{"$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-06T17:19:29.966Z","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register","markdownUrl":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register.md","server":{"slug":"dev-forestrie-register","name":"Sign and register statements on a Forestrie log","registryName":"dev.forestrie/register","description":"Sign and register statements on a Forestrie log, verify receipts, buy grants via x402 within caps","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"forestrie-mcp-register","type":"npm","identifier":"@forestrie/mcp-register","withdrawn":false,"url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register","version":"0.3.0","transport":"stdio","scoredAt":"2026-11-06T04:13:29.677Z"},"score":{"total":84,"tier":"high trust","status":"scored","weekDelta":3,"history":[{"date":"2026-11-06","total":84},{"date":"2026-11-05","total":84},{"date":"2026-11-04","total":83},{"date":"2026-11-03","total":83},{"date":"2026-11-02","total":82},{"date":"2026-11-01","total":82},{"date":"2026-10-31","total":82},{"date":"2026-10-30","total":81},{"date":"2026-10-29","total":81},{"date":"2026-10-28","total":80},{"date":"2026-10-27","total":80},{"date":"2026-10-26","total":79},{"date":"2026-10-25","total":79},{"date":"2026-10-24","total":78},{"date":"2026-10-23","total":78},{"date":"2026-10-22","total":77},{"date":"2026-10-21","total":77},{"date":"2026-10-20","total":61},{"date":"2026-10-19","total":76},{"date":"2026-10-18","total":75},{"date":"2026-10-17","total":60}]},"categories":[{"name":"Supply Chain Security","score":81,"verdict":"fail","reasons":["No malware found by supply-chain analysis.","CVE check failed: a known high-severity CVE affects @modelcontextprotocol/sdk 1.30.0, a direct dependency. A fixed version is available.","No install/post-install scripts declared.","30 of 116 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.direct","args":{"package":"@modelcontextprotocol/sdk","version":"1.30.0","severity":"high"}},{"code":"installscript.none","args":{}},{"code":"dephealth.assessed","args":{"deps":"116","unhealthy":"30"}}]},{"name":"Provenance & Transparency","score":97,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Cryptographically verified build provenance (signed, bound to forestrie/mcp-register).","Clear OSI-approved license (MIT).","Actively maintained (last published 4 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":"forestrie/mcp-register"}},{"code":"license.osi","args":{"spdx":"MIT"}},{"code":"maintenance.recent","args":{"age_days":"4"}},{"code":"disclosure.absent","args":{}}]},{"name":"Schema Quality & AI Usability","score":74,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 2184 tokens (~312/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.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"312","items":"7","tools":"7","tokens":"2184","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":67,"verdict":"partial","reasons":["Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"20"}}]},{"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."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","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 supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"forestrie-mcp-register","type":"npm","identifier":"@forestrie/mcp-register","withdrawn":false,"score":84,"current":true,"url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register","markdownUrl":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register.md"}],"facts":[{"label":"Registry","value":"npm"},{"label":"Package","value":"@forestrie/mcp-register"},{"label":"Version","value":"0.3.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"get_log_key","title":"Get the log key","description":"Return the public half of one of this server's keys (ES256, 64 bytes x‖y, as hex, base64 and an SPKI PEM) and where it lives, creating it on first use. which: \"log\" (the default) is the key that owns your data log: a grant issuer names it in the grant's grantData, and a grant naming any other key cannot carry statements this server signs. which: \"authority\" is the requester's key that owns your authority log and signs the grants issue_grant makes. Never returns private key material.","inputs":[{"name":"which","type":"string","required":false,"description":"which key: \"log\" (default), the key that owns your data log and signs statements; or \"authority\", the requester's key that owns an authority log and signs the child grants issue_grant makes"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":177},{"name":"register_statement","title":"Sign and register a statement","description":"Sign a payload with the log key and register it under your Forestrie-Grant. Takes the payload bytes (inline base64 or a file path, up to canopy's 4 MiB statement limit) and its content type. The signed statement is saved before it is sent, so the returned content hash always names it, even if the request fails. A payload path may not point at the log key or inside this server's home. Registration is accepted, not yet sequenced: call check_registration next.","inputs":[{"name":"baseUrl","type":"string","required":false,"description":"the canopy SCRAPI base URL; falls back to FORESTRIE_BASE_URL — never defaulted by the package itself"},{"name":"contentType","type":"string","required":true,"description":"the payload's media type, e.g. application/json"},{"name":"grant","type":"string","required":false,"description":"the Forestrie-Grant: base64 (standard or URL-safe) of the completed grant, or a path to a file holding it as raw bytes or base64 text; falls back to FORESTRIE_GRANT"},{"name":"issuer","type":"string","required":false,"description":"CWT iss; defaults to the hex of the key id"},{"name":"payload","type":null,"required":true,"description":"the payload to sign and register, up to 4 MiB — { b64 } | { base64 } | { path }"},{"name":"rootLogId","type":"string","required":false,"description":"the forest's root log id (R in /register/{R}/entries); falls back to FORESTRIE_ROOT_LOG_ID"},{"name":"subject","type":"string","required":false,"description":"CWT sub; defaults to sha-256:<hex of the payload>"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":317},{"name":"check_registration","title":"Check a registration","description":"One status check for a registration, by its content hash: pending (not yet sequenced; retry after the given seconds), awaiting_seal (sequenced, entry id known, receipt not yet sealed — sealing takes minutes, and never happens until delegate_sealing has run for the log), or sealed (the receipt is saved and its path returned). Any other answer from canopy is reported as a problem with its reason. canopy answers a statement it never received exactly like a pending one, so after ten minutes of pending this says so. Does not sleep; pace the retries yourself.","inputs":[{"name":"contentHash","type":"string","required":true,"description":"the content hash register_statement returned (64 lowercase hex)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":142},{"name":"verify_registration","title":"Verify a registration's receipt","description":"Verify a sealed registration's receipt over the statement you registered, with @forestrie/mcp-verify's verifier, and return its four-question answers unaltered. By default the trust root is this server's own log key, the root of your data log; verifying never creates a key. Pass a known accumulator (from @forestrie/mcp-resolve's fetch_accumulator) to use a root that can also answer split-view.","inputs":[{"name":"contentHash","type":"string","required":true,"description":"the content hash register_statement returned (64 lowercase hex)"},{"name":"knownAccumulator","type":null,"required":false,"description":"optional: a known accumulator (e.g. from @forestrie/mcp-resolve's fetch_accumulator) to verify against instead of this server's own log key — { b64 } | { base64 } | { path }"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":169},{"name":"delegate_sealing","title":"Delegate sealing for your log","description":"Authorise the operator's sealer to publish checkpoints for your data log, signed with the log key. Without it entries sequence but are never sealed. If the coordinator has not learned the log's public root, this calls canopy's prepare with the same grant first. Run once per log; the delegation lasts until the returned expiresAt. With as: \"authority\" it does the same for your authority log, signed with the authority key, so the child grants you register there get sealed.","inputs":[{"name":"as","type":"string","required":false,"description":"which key owns the log: \"log\" (default) for your data log, under the grant you register statements with; \"authority\" for your authority log, under its creation grant (FORESTRIE_AUTHORITY_GRANT), so t…"},{"name":"baseUrl","type":"string","required":false,"description":"the canopy SCRAPI base URL; falls back to FORESTRIE_BASE_URL — never defaulted by the package itself"},{"name":"coordinatorUrl","type":"string","required":false,"description":"the delegation coordinator base URL; falls back to FORESTRIE_COORDINATOR_URL"},{"name":"grant","type":"string","required":false,"description":"the Forestrie-Grant: base64 (standard or URL-safe) of the completed grant, or a path to a file holding it as raw bytes or base64 text; falls back to FORESTRIE_GRANT"},{"name":"knownSealerKey","type":"string","required":false,"description":"the registrar's voucher key, base64 of 64 bytes x‖y, as the operator publishes it; falls back to FORESTRIE_KNOWN_SEALER_KEY"},{"name":"ttlSeconds","type":"integer","required":false,"description":"how long the delegation lasts; defaults to the coordinator's suggestion"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":343},{"name":"issue_grant","title":"Issue a child grant as the requester","description":"As the requester, sign a child grant with this server's authority key: a data-log creation grant under your authority log (named by your authority grant, FORESTRIE_AUTHORITY_GRANT), naming the performer's log key (by default this server's own) and sized with maxHeight, the batch ceiling canopy prices it by. Saves the grant under a fresh child log id; nothing is sent. Call register_grant next.","inputs":[{"name":"grantee","type":"string","required":false,"description":"base64 of the 64-byte x‖y the grant names (the performer's log key); defaults to this server's own log key, for a self-purchase"},{"name":"logId","type":"string","required":false,"description":"the child data log to create; a fresh random UUID by default"},{"name":"maxHeight","type":"integer","required":true,"description":"the grant's batch ceiling. canopy prices a payment-gated child grant as its unit price × maxHeight, so size it to the work it is for"},{"name":"parentGrant","type":"string","required":false,"description":"your authority grant: the completed grant that created your authority log and names this server's authority key, as base64 or a file path; falls back to FORESTRIE_AUTHORITY_GRANT"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":245},{"name":"register_grant","title":"Register a child grant, paying if canopy asks","description":"Register a child grant with canopy (POST /register/{R}/grants, your authority grant as the parent) and follow it to its receipt; call it again with the same logId to resume until it reports complete. If canopy answers 402 and a payer is configured, it pays within the server's hard caps (per call, per UTC day, one network and asset, testnet only by default) and reports any cap that refuses. With no payer it returns the payment requirements: pay them from your own x402 wallet and call again with payment set to the X-PAYMENT value. Every payment for a grant carries a nonce derived from that grant, so retries and overlapping calls can never pay for it twice. When complete it returns the completed grant for delegate_sealing and register_statement.","inputs":[{"name":"baseUrl","type":"string","required":false,"description":"the canopy SCRAPI base URL; falls back to FORESTRIE_BASE_URL — never defaulted by the package itself"},{"name":"grant","type":"string","required":false,"description":"a child grant signed elsewhere (base64 or a file path), instead of logId"},{"name":"logId","type":"string","required":false,"description":"the child log id issue_grant returned: register_grant resumes that grant from wherever the last call reached"},{"name":"parentGrant","type":"string","required":false,"description":"your authority grant: the completed grant that created your authority log and names this server's authority key, as base64 or a file path; falls back to FORESTRIE_AUTHORITY_GRANT"},{"name":"payment","type":"string","required":false,"description":"relay mode: the X-PAYMENT header value your own x402 wallet produced for the payment requirements register_grant returned"},{"name":"rootLogId","type":"string","required":false,"description":"the forest's root log id (R in /register/{R}/grants); falls back to FORESTRIE_ROOT_LOG_ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":366}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T04:13:29.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":[],"installScriptsTotal":null,"vulnerabilities":[{"id":"GHSA-22jm-h49p-29qw","cve":"CVE-2026-111767","severity":"high","fixAvailable":true},{"id":"GHSA-46jr-4wx8-v453","cve":"CVE-2026-111768","severity":"high","fixAvailable":true},{"id":"GHSA-6prh-2h8m-c8cw","cve":"CVE-2026-111769","severity":"medium","fixAvailable":true},{"id":"GHSA-6qxp-vccf-f47h","cve":"CVE-2026-104850","severity":"high","fixAvailable":true},{"id":"GHSA-f897-62hf-6gxq","cve":null,"severity":"high","fixAvailable":true},{"id":"GHSA-rvq5-wwqv-78pq","cve":"CVE-2026-111771","severity":"medium","fixAvailable":true}],"vulnerabilitiesTotal":6,"dependencies":{"nodes":116,"partial":false,"deprecated":null,"stale":30,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-10-17","recent":[{"id":"chg_01a1a9b4-323e-7d5b-9fae-580335c1a432","kind":"score.total_changed","summary":"Trust score (83 → 84)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a1a9b4-323e-7d5b-9fae-580335c1a432"},{"id":"chg_01a19f66-4332-729d-adf3-63fd12504676","kind":"score.total_changed","summary":"Trust score (82 → 83)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19f66-4332-729d-adf3-63fd12504676"},{"id":"chg_01a19959-0f55-792a-85c7-181dbe1df0e7","kind":"score.total_changed","summary":"Trust score (44 → 82)","materiality":"functional","direction":"improvement","scoreDelta":38,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19959-0f55-792a-85c7-181dbe1df0e7"},{"id":"chg_01a19957-8f87-7512-a985-b5f7fe94690f","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f87-7512-a985-b5f7fe94690f"},{"id":"chg_01a19957-8f89-7c05-8f4b-1a98a08e65a6","kind":"check.unverifiable","summary":"Stability (0.47 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f89-7c05-8f4b-1a98a08e65a6"},{"id":"chg_01a19957-8f8a-72de-840e-770d98332181","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f8a-72de-840e-770d98332181"},{"id":"chg_01a19957-8f8a-7896-9f9d-60dd6464939c","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f8a-7896-9f9d-60dd6464939c"},{"id":"chg_01a19957-8f8a-7e12-9c3a-6b6ca94eb1f1","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f8a-7e12-9c3a-6b6ca94eb1f1"},{"id":"chg_01a19957-8f8b-74f3-b994-2d1fabb4d757","kind":"package.version_changed","summary":"Package version (0.2.1 → 0.3.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f8b-74f3-b994-2d1fabb4d757"},{"id":"chg_01a19957-8f8b-7da4-b727-a46e016371c0","kind":"score.total_changed","summary":"Trust score (82 → 44)","materiality":"functional","direction":"regression","scoreDelta":-38,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a19957-8f8b-7da4-b727-a46e016371c0"},{"id":"chg_01a18ff3-8c6e-7818-ae61-41cc4ddf3728","kind":"score.total_changed","summary":"Trust score (81 → 82)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a18ff3-8c6e-7818-ae61-41cc4ddf3728"},{"id":"chg_01a185a7-80e1-7c6d-997b-08998b9ded56","kind":"score.total_changed","summary":"Trust score (80 → 81)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a185a7-80e1-7c6d-997b-08998b9ded56"},{"id":"chg_01a1807f-e51a-7ab4-af65-3ed87ab5029d","kind":"advisory.identified","summary":"GHSA-f897-62hf-6gxq affects this package (high)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a1807f-e51a-7ab4-af65-3ed87ab5029d"},{"id":"chg_01a17b59-7646-79d8-9341-d161ac0dda57","kind":"score.total_changed","summary":"Trust score (79 → 80)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a17b59-7646-79d8-9341-d161ac0dda57"},{"id":"chg_01a1710d-32a6-7cb4-86f2-d019df1c6743","kind":"score.total_changed","summary":"Trust score (78 → 79)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-25","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a1710d-32a6-7cb4-86f2-d019df1c6743"},{"id":"chg_01a166bf-b711-7816-b6d9-58036d41f7d6","kind":"score.total_changed","summary":"Trust score (77 → 78)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-23","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a166bf-b711-7816-b6d9-58036d41f7d6"},{"id":"chg_01a15c72-e919-7687-81d3-698ac170d621","kind":"advisory.identified","summary":"CVE-2026-111771 affects this package (high)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a15c72-e919-7687-81d3-698ac170d621"},{"id":"chg_01a15c72-e919-7e19-9015-301accaa0c9d","kind":"advisory.identified","summary":"CVE-2026-111768 affects this package (high)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a15c72-e919-7e19-9015-301accaa0c9d"},{"id":"chg_01a15c72-e91a-7398-8463-93b2c2f4d2d5","kind":"advisory.identified","summary":"CVE-2026-111769 affects this package (high)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a15c72-e91a-7398-8463-93b2c2f4d2d5"},{"id":"chg_01a15c72-e91a-7840-b289-1b2a4956e6a6","kind":"advisory.identified","summary":"CVE-2026-111767 affects this package (high)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register#chg-chg_01a15c72-e91a-7840-b289-1b2a4956e6a6"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register/changelog.json"},"links":{"html":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register","markdown":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register.md","changelogJson":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register/changelog.json","changelogRss":"https://verifymcp.io/servers/dev-forestrie-register/forestrie-mcp-register.xml","external":[{"label":"npm package","href":"https://www.npmjs.com/package/@forestrie/mcp-register"},{"label":"Socket report","href":"https://socket.dev/npm/package/@forestrie/mcp-register"},{"label":"Repository","href":"https://github.com/forestrie/mcp-register"}]}}