{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T15:52:47.730Z","url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp","markdownUrl":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp.md","server":{"slug":"qso-graph-jt-mcp","name":"io.github.qso-graph/jt-mcp","registryName":"io.github.qso-graph/jt-mcp","description":"WSJT-X over UDP for AI apps: status, decodes, who is calling CQ, stations heard, WSPR. Read-only.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"jt-mcp","type":"pypi","identifier":"jt-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp","version":"0.2.0","transport":"stdio","scoredAt":"2026-11-05T12:03:15.739Z"},"score":{"total":66,"tier":"medium","status":"scored","weekDelta":0,"history":[{"date":"2026-11-05","total":66},{"date":"2026-11-04","total":81},{"date":"2026-11-03","total":81},{"date":"2026-11-02","total":81},{"date":"2026-11-01","total":81},{"date":"2026-10-31","total":81},{"date":"2026-10-30","total":66},{"date":"2026-10-29","total":66}]},"categories":[{"name":"Supply Chain Security","score":50,"verdict":"partial","reasons":["Malware scan not yet available for this package.","No known CVEs affecting this package version or its production dependencies.","Runs hatchling.build at install time, a recognised build step with no custom scripting around it.","1 of 16 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_inconclusive","args":{"reason":"vendor_no_verdict"}},{"code":"cve.none","args":{}},{"code":"installscript.allowlisted","args":{"tool":"hatchling.build","hooks":"build_backend"}},{"code":"dephealth.assessed","args":{"deps":"16","unhealthy":"1"}}]},{"name":"Provenance & Transparency","score":97,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Cryptographically verified build provenance (signed, bound to qso-graph/jt-mcp).","Clear OSI-approved license (GPL-3.0-or-later).","Actively maintained (last published 7 days ago).","Disclosure check failed: no security disclosure policy was found in the source repository."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.verified","args":{"repo":"qso-graph/jt-mcp"}},{"code":"license.osi","args":{"spdx":"GPL-3.0-or-later"}},{"code":"maintenance.recent","args":{"age_days":"7"}},{"code":"disclosure.absent","args":{}}]},{"name":"Schema Quality & AI Usability","score":73,"verdict":"fail","reasons":["AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 803 tokens (~114/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"114","items":"7","tools":"7","tokens":"803","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","100% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"7"}},{"code":"toolsafety.manipulation_clean","args":{"units":"8","judged":"8"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":["Malware scan not yet available for this package.","Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"malware":[],"components":[{"slug":"jt-mcp","type":"pypi","identifier":"jt-mcp","withdrawn":false,"score":66,"current":true,"url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp","markdownUrl":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp.md"}],"facts":[{"label":"Registry","value":"pypi"},{"label":"Package","value":"jt-mcp"},{"label":"Version","value":"0.2.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"get_version_info","title":"Get Version Info","description":"Get this server's version, what it does, and where its work is tracked.","inputs":[],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":26},{"name":"jt_status","title":"Jt Status","description":"What each running WSJT-X is doing now: dial frequency and band, mode, the station\nbeing worked (DX call and grid), whether Tx is enabled or transmitting, and your own\ncall and grid.","inputs":[{"name":"instance","type":null,"required":false,"description":"one WSJT-X by the Id it sends (e.g. \"WSJT-X - FT-991A\"); every one\nif left out."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":85},{"name":"jt_cq","title":"Jt Cq","description":"Who is calling CQ, and what kind of CQ: plain, DX, an activity (POTA, SOTA, WWFF,\nIOTA), a contest (TEST, FD, RU, WW), a region (NA, EU, ...), or a frequency (CQ 290).\nThe latest CQ per station, newest first.","inputs":[{"name":"band","type":null,"required":false,"description":"e.g. \"20m\"."},{"name":"cq_type","type":null,"required":false,"description":"one of plain, dx, activity, contest, region, frequency, other."},{"name":"instance","type":null,"required":false,"description":"one WSJT-X by its Id; every one if left out."},{"name":"modifier","type":null,"required":false,"description":"the exact word after CQ, e.g. \"POTA\" or \"NA\"."},{"name":"since_minutes","type":"integer","required":false,"description":"how far back, 1 to 1440 (default 5)."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":169},{"name":"jt_decodes","title":"Jt Decodes","description":"Recent decodes, newest first, each read into its parts: CQ (with its type), or\nwho is calling whom, with the grid, report or sign-off it carries.","inputs":[{"name":"band","type":null,"required":false,"description":"e.g. \"20m\"."},{"name":"callsign","type":null,"required":false,"description":"decodes sent by or to this call."},{"name":"cq_only","type":"boolean","required":false,"description":"CQ calls only."},{"name":"instance","type":null,"required":false,"description":"one WSJT-X by its Id; every one if left out."},{"name":"limit","type":"integer","required":false,"description":"at most this many, 1 to 500 (default 50)."},{"name":"min_snr","type":null,"required":false,"description":"this SNR in dB or better (-50 to 50)."},{"name":"since_minutes","type":"integer","required":false,"description":"how far back, 1 to 1440 (default 15)."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":163},{"name":"jt_heard","title":"Jt Heard","description":"Stations heard since this server started: how often, last SNR, last grid sent,\nmode and band, first and last heard.","inputs":[{"name":"callsign","type":null,"required":false,"description":"one station only."},{"name":"limit","type":"integer","required":false,"description":"at most this many, 1 to 500 (default 50)."},{"name":"since_minutes","type":"integer","required":false,"description":"heard within this many minutes, 1 to 1440 (default 60)."},{"name":"sort","type":"string","required":false,"description":"last_heard (default), snr or count."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":107},{"name":"jt_wspr","title":"Jt Wspr","description":"WSPR spots WSJT-X has decoded, newest first: call, grid, power, SNR, drift.","inputs":[{"name":"band","type":null,"required":false,"description":"e.g. \"30m\"."},{"name":"callsign","type":null,"required":false,"description":"one station only."},{"name":"limit","type":"integer","required":false,"description":"at most this many, 1 to 500 (default 50)."},{"name":"since_minutes","type":"integer","required":false,"description":"how far back, 1 to 1440 (default 60)."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":95},{"name":"jt_diagnostics","title":"Jt Diagnostics","description":"The listener itself: where it listens, who may send, what has arrived, what was\ndropped and from where, and each WSJT-X instance's version and last heartbeat.","inputs":[],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":46}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T12:03:15.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"verified","label":"Verified","reason":"verified","reasonLabel":"Verified","discovery":"attestation_endpoint","discoveryLabel":"Registry attestation endpoint","sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[{"hook":"build_backend","tier":"allowlisted"}],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":{"nodes":16,"partial":false,"deprecated":null,"stale":1,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-10-29","recent":[{"id":"chg_01a1ab97-82b0-77cd-b258-1a063fc3787e","kind":"check.unverifiable","summary":"Malware scan (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp#chg-chg_01a1ab97-82b0-77cd-b258-1a063fc3787e"},{"id":"chg_01a1ab97-82b1-76b5-90f2-74d427b39eb4","kind":"score.total_changed","summary":"Trust score (81 → 66)","materiality":"functional","direction":"regression","scoreDelta":-15,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp#chg-chg_01a1ab97-82b1-76b5-90f2-74d427b39eb4"},{"id":"chg_01a19172-ccea-7281-87a1-ec487d1e2d95","kind":"check.reverified","summary":"Malware scan (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp#chg-chg_01a19172-ccea-7281-87a1-ec487d1e2d95"},{"id":"chg_01a19172-ccf2-7022-a488-b24cb1a24478","kind":"score.total_changed","summary":"Trust score (66 → 81)","materiality":"functional","direction":"improvement","scoreDelta":15,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp#chg-chg_01a19172-ccf2-7022-a488-b24cb1a24478"},{"id":"chg_01a187aa-ca1a-76fe-8f68-2914af5f0a3a","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp#chg-chg_01a187aa-ca1a-76fe-8f68-2914af5f0a3a"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp","markdown":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp.md","changelogJson":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/qso-graph-jt-mcp/jt-mcp.xml","external":[{"label":"PyPI project","href":"https://pypi.org/project/jt-mcp/"},{"label":"Socket report","href":"https://socket.dev/pypi/package/jt-mcp"},{"label":"Repository","href":"https://github.com/qso-graph/jt-mcp"}]}}