{"$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-05T20:59:40.976Z","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1","markdownUrl":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1.md","server":{"slug":"com-qrblox-mcp","name":"Qrblox","registryName":"com.qrblox/mcp","description":"Create and track QR codes, audio codes, menus, and scan analytics for a Qrblox merchant.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"mcp-v1","type":"remote","identifier":"https://api.qrblox.com/mcp/v1","withdrawn":false,"url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1","version":"0.1.0","transport":null,"scoredAt":"2026-11-05T08:10:28.013Z"},"score":{"total":85,"tier":"high trust","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":85},{"date":"2026-11-04","total":85},{"date":"2026-11-03","total":84},{"date":"2026-11-02","total":84},{"date":"2026-11-01","total":83},{"date":"2026-10-31","total":83},{"date":"2026-10-30","total":82},{"date":"2026-10-29","total":82},{"date":"2026-10-28","total":81},{"date":"2026-10-27","total":81},{"date":"2026-10-26","total":81},{"date":"2026-10-25","total":80},{"date":"2026-10-24","total":80},{"date":"2026-10-23","total":79},{"date":"2026-10-22","total":79},{"date":"2026-10-21","total":78},{"date":"2026-10-20","total":78},{"date":"2026-10-19","total":77},{"date":"2026-10-18","total":77},{"date":"2026-10-17","total":76},{"date":"2026-10-16","total":76},{"date":"2026-10-15","total":75}]},"categories":[{"name":"Endpoint Security","score":94,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC check failed: this domain isn't protected by DNSSEC.","The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.rfc9728_invoke","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.absent","args":{}},{"code":"auth.registration_dcr_only","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":69,"verdict":"fail","reasons":["AI-judged instruction clarity (good).","Tool/resource definitions use about 1363 tokens (~97/item across 14 items; 14 tools + 0 resources), lean.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_lean","args":{"avg":"97","items":"14","tools":"14","tokens":"1363","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":70,"verdict":"partial","reasons":["Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"21"}}]},{"name":"Tool Coverage","score":98,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","95% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"95"}}]},{"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 14 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 15 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":"14"}},{"code":"toolsafety.manipulation_clean","args":{"units":"15","judged":"15"}}]},{"name":"Capabilities","score":40,"verdict":"fail","reasons":["Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28."],"codes":[{"code":"protocol.outdated","args":{"latest":"2026-07-28","version":"2025-03-26"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"mcp-v1","type":"remote","identifier":"https://api.qrblox.com/mcp/v1","withdrawn":false,"score":85,"current":true,"url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1","markdownUrl":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1.md"},{"slug":"qrblox-mcp","type":"npm","identifier":"qrblox-mcp","withdrawn":false,"score":38,"current":false,"url":"https://verifymcp.io/servers/com-qrblox-mcp/qrblox-mcp","markdownUrl":"https://verifymcp.io/servers/com-qrblox-mcp/qrblox-mcp.md"}],"facts":[{"label":"Endpoint","value":"https://api.qrblox.com/mcp/v1"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"required"},{"label":"Version","value":"0.1.0"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"qrblox.ping","title":null,"description":"Confirm that the Qrblox MCP server is reachable for the authenticated merchant.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":26},{"name":"qrblox.voice_agent.lookup","title":null,"description":"Look up a business in the Qrblox Voice Agent Phone Book by website domain — returns their confirmed AI voice agent phone number if registered.","inputs":[{"name":"domain","type":"string","required":true,"description":"Business website domain, like example.com (protocol, www, and paths are stripped)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"qrblox.voice_agent.register","title":null,"description":"Register a business's AI voice agent phone number and domain in the Qrblox Voice Agent Phone Book directory (free; creates a backlink page at qrblox.com/d/<domain> once approved).","inputs":[{"name":"businessName","type":"string","required":true,"description":"Business name as it should appear in the phone book."},{"name":"domain","type":"string","required":true,"description":"Business website domain, like example.com."},{"name":"email","type":"string","required":true,"description":"Contact email — receives the confirmation once the claim is approved."},{"name":"voiceAgentPhone","type":"string","required":true,"description":"Phone number of the business's AI voice agent, like +12025551234."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":127},{"name":"qrblox.merchant.get_profile","title":null,"description":"Get the merchant workspace attached to this user or API key.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":25},{"name":"qrblox.qr.list","title":null,"description":"List recent QR codes for the merchant.","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum records to return, up to 100."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"qrblox.qr.create","title":null,"description":"Create a finished QR code: returns a hosted PNG (qrImageUrl) plus, for dynamic codes, a qrb.dev dynamic link you can re-point later. Options: template wraps the code in a Qrblox hex frame; boostFrame renders a scan-to-earn reward frame (scans through the Qrblox app award boosted points); scanBeepSound makes the Qrblox app play that sound on every scan (forces dynamic). Plain calls with none of these return a simple static code.","inputs":[{"name":"boostFrame","type":"string","required":false,"description":"Scan-to-earn reward frame (3X/5X boosted points), rendered server-side. Overrides template."},{"name":"campaign","type":"string","required":false,"description":"Optional campaign name."},{"name":"destinationUrl","type":"string","required":true,"description":"The URL the QR code should open."},{"name":"dynamic","type":"boolean","required":false,"description":"Encode a qrb.dev dynamic link instead of the raw URL — re-pointable later, trackable per scan."},{"name":"scanBeepSound","type":"string","required":false,"description":"Sound the Qrblox app plays when anyone scans this code (coin ding = mariocoin). Forces dynamic."},{"name":"tags","type":"array","required":false,"description":null},{"name":"template","type":"string","required":false,"description":"Qrblox hex frame: hexSeal (candy hexagon + QRBLOX wordmark) or soundSeal (dashed ring + SOUND CODE label; forces dynamic)."},{"name":"title","type":"string","required":true,"description":"Human-readable name for the QR code."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":292},{"name":"qrblox.qr.update","title":null,"description":"Edit an existing QR code: re-point the destination URL (dynamic codes redirect immediately, no reprint), change the scan sound, or rename it. Identify the code by codeId (from qr.create/qr.list) or uniqueQRCodeID.","inputs":[{"name":"codeId","type":"string","required":false,"description":"Merchant record id returned by qr.create / qr.list."},{"name":"destinationUrl","type":"string","required":false,"description":"New destination URL (dynamic codes only take effect on print)."},{"name":"scanBeepSound","type":"string","required":false,"description":"New scan sound, or 'none' to remove it."},{"name":"title","type":"string","required":false,"description":"New display name."},{"name":"uniqueQRCodeID","type":"string","required":false,"description":"Cross-platform id (the trailing part of the qrb.dev/qr/... link)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":154},{"name":"qrblox.qr.get_analytics","title":null,"description":"Per-code scan report from the Qrblox analytics pipeline: total scans, daily counts, and every scan with date and city/state. Works for dynamic codes and app-scanned codes (last 365 days max).","inputs":[{"name":"codeId","type":"string","required":false,"description":"Merchant record id returned by qr.create / qr.list."},{"name":"days","type":"number","required":false,"description":"Lookback window in days, 1-365 (default 30)."},{"name":"uniqueQRCodeID","type":"string","required":false,"description":"Cross-platform id (the trailing part of the qrb.dev/qr/... link)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":121},{"name":"qrblox.audio.create","title":null,"description":"Create a draft audio code payload that can later be published as a near-ultrasonic sharing experience.","inputs":[{"name":"campaign","type":"string","required":false,"description":"Optional campaign name."},{"name":"payloadText","type":"string","required":true,"description":"Text or URL payload to encode."},{"name":"title","type":"string","required":true,"description":"Human-readable audio code name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":67},{"name":"qrblox.menu.create","title":null,"description":"Create a merchant menu that can be connected to QR codes, audio codes, and scan experiences.","inputs":[{"name":"description","type":"string","required":false,"description":"Optional description."},{"name":"locationId","type":"string","required":false,"description":"Optional merchant location id."},{"name":"name","type":"string","required":true,"description":"Menu name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"qrblox.menu.list","title":null,"description":"List recent menus for the merchant.","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum records to return, up to 100."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"qrblox.menu.add_item","title":null,"description":"Add an item to a section in an existing merchant menu.","inputs":[{"name":"description","type":"string","required":false,"description":"Optional item description."},{"name":"menuId","type":"string","required":true,"description":"Menu id."},{"name":"name","type":"string","required":true,"description":"Item name."},{"name":"price","type":"number","required":false,"description":"Optional price."},{"name":"sectionName","type":"string","required":true,"description":"Section name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":72},{"name":"qrblox.challenge.create","title":null,"description":"Create a draft scan challenge, streak, game, or loyalty campaign.","inputs":[{"name":"challengeType","type":"string","required":true,"description":null},{"name":"description","type":"string","required":false,"description":"Optional description."},{"name":"endsAt","type":"string","required":false,"description":"Optional ISO end date."},{"name":"name","type":"string","required":true,"description":"Challenge name."},{"name":"rewardText","type":"string","required":false,"description":"Optional reward copy."},{"name":"startsAt","type":"string","required":false,"description":"Optional ISO start date."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":86},{"name":"qrblox.analytics.scan_summary","title":null,"description":"Summarize recent scan activity for a merchant workspace.","inputs":[{"name":"days","type":"number","required":false,"description":"Lookback window in days, from 1 to 365."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T08:10:28.000Z","track":"remote","endpoint":"https://api.qrblox.com/mcp/v1","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=api.qrblox.com","issuer":"CN=YR1,O=Let's Encrypt,C=US","notBefore":"2026-11-02T16:37:13Z","notAfter":"2027-01-31T16:37:12Z","keyType":"RSA","keyBits":2048,"isCa":false},{"subject":"CN=YR1,O=Let's Encrypt,C=US","issuer":"CN=Root YR,O=ISRG,C=US","notBefore":"2025-09-03T00:00:00Z","notAfter":"2028-09-02T23:59:59Z","keyType":"RSA","keyBits":2048,"isCa":true},{"subject":"CN=Root YR,O=ISRG,C=US","issuer":"CN=ISRG Root X1,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"RSA","keyBits":4096,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"api.qrblox.com.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"com.","outcome":"verified","label":"Verified"},{"zone":"qrblox.com.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"enforced_validated","label":"Enforced and verified","gate":"invoke","gateLabel":"On tool calls","status":200,"authorizationServers":["https://api.qrblox.com"]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":308},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-15","recent":[{"id":"chg_01a1a599-9812-72ed-85ae-3601e98e33d3","kind":"score.total_changed","summary":"Trust score (84 → 85)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a1a599-9812-72ed-85ae-3601e98e33d3"},{"id":"chg_01a19b4e-26ef-736b-b676-36879c39a315","kind":"score.total_changed","summary":"Trust score (83 → 84)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a19b4e-26ef-736b-b676-36879c39a315"},{"id":"chg_01a19101-53b3-741a-bf62-37a222588433","kind":"score.total_changed","summary":"Trust score (82 → 83)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a19101-53b3-741a-bf62-37a222588433"},{"id":"chg_01a186b6-b841-7936-bfd2-cd114870a842","kind":"score.total_changed","summary":"Trust score (81 → 82)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a186b6-b841-7936-bfd2-cd114870a842"},{"id":"chg_01a1773f-d749-7311-837d-d4b2296f9bb5","kind":"score.total_changed","summary":"Trust score (80 → 81)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a1773f-d749-7311-837d-d4b2296f9bb5"},{"id":"chg_01a16cf3-f2a8-72b5-b403-fe85f3583442","kind":"score.total_changed","summary":"Trust score (79 → 80)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a16cf3-f2a8-72b5-b403-fe85f3583442"},{"id":"chg_01a162a7-9c5a-7821-8f0a-e4982c54c713","kind":"score.total_changed","summary":"Trust score (78 → 79)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-22","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a162a7-9c5a-7821-8f0a-e4982c54c713"},{"id":"chg_01a1585b-4085-7bc1-8b94-e06577309b78","kind":"score.total_changed","summary":"Trust score (77 → 78)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a1585b-4085-7bc1-8b94-e06577309b78"},{"id":"chg_01a14e10-c25c-7bd9-b20c-f549100e78e3","kind":"score.total_changed","summary":"Trust score (76 → 77)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a14e10-c25c-7bd9-b20c-f549100e78e3"},{"id":"chg_01a143c4-1824-7bb0-b423-f9d0b877ed36","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a143c4-1824-7bb0-b423-f9d0b877ed36"},{"id":"chg_01a143c4-1826-733e-86ff-4219129fa8be","kind":"score.total_changed","summary":"Trust score (75 → 76)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a143c4-1826-733e-86ff-4219129fa8be"},{"id":"chg_01a140b9-12e1-7b2d-abeb-d96ea340c55a","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-15","url":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1#chg-chg_01a140b9-12e1-7b2d-abeb-d96ea340c55a"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1/changelog.json"},"links":{"html":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1","markdown":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1.md","changelogJson":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1/changelog.json","changelogRss":"https://verifymcp.io/servers/com-qrblox-mcp/mcp-v1.xml","external":[{"label":"Remote endpoint","href":"https://api.qrblox.com/mcp/v1"},{"label":"Authorisation metadata","href":"https://api.qrblox.com/.well-known/oauth-protected-resource/mcp/v1"},{"label":"Repository","href":"https://github.com/Terahertz-Inc/qrblox-mcp"},{"label":"Website","href":"https://docs.qrblox.com/mcp"}]}}