{"$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-05T18:26:00.173Z","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp","markdownUrl":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp.md","server":{"slug":"geiserx-genieacs-mcp","name":"GenieACS","registryName":"io.github.GeiserX/genieacs-mcp","description":"MCP server bridging GenieACS TR-069 ACS instances to LLMs for CPE device management","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"drumsergio-genieacs-mcp","type":"oci","identifier":"drumsergio/genieacs-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp","version":"v0.4.1","transport":"stdio","scoredAt":"2026-11-05T02:30:12.258Z"},"score":{"total":49,"tier":"low","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":49},{"date":"2026-11-04","total":48},{"date":"2026-11-03","total":48},{"date":"2026-11-02","total":47},{"date":"2026-11-01","total":47},{"date":"2026-10-31","total":47},{"date":"2026-10-30","total":46},{"date":"2026-10-29","total":46},{"date":"2026-10-28","total":45},{"date":"2026-10-27","total":45},{"date":"2026-10-26","total":45},{"date":"2026-10-25","total":45},{"date":"2026-10-24","total":44},{"date":"2026-10-23","total":44},{"date":"2026-10-22","total":43},{"date":"2026-10-21","total":43},{"date":"2026-10-20","total":42},{"date":"2026-10-19","total":42},{"date":"2026-10-18","total":41},{"date":"2026-10-17","total":41},{"date":"2026-10-16","total":39},{"date":"2026-10-15","total":39},{"date":"2026-10-14","total":39},{"date":"2026-10-13","total":7},{"date":"2026-10-12","total":7},{"date":"2026-10-06","total":7}]},"categories":[{"name":"Supply Chain Security","score":0,"verdict":"unverified","reasons":["No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.","Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.","Install-script risk not yet assessed.","Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read."],"codes":[{"code":"supplychain.malware_inconclusive","args":{"reason":"ecosystem_unsupported"}},{"code":"cve.inconclusive","args":{"reason":"no_sbom_attached"}},{"code":"installscript.inconclusive","args":{"reason":"no_install_concept"}},{"code":"dephealth.inconclusive","args":{"reason":"no_sbom_attached"}}]},{"name":"Provenance & Transparency","score":35,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Provenance check failed: no build-provenance attestation is published.","License check failed: no license is declared.","Actively maintained (last published 7 days ago).","Publishes a security disclosure policy (SECURITY.md)."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.absent","args":{}},{"code":"maintenance.recent","args":{"age_days":"7"}},{"code":"disclosure.present","args":{}}]},{"name":"Schema Quality & AI Usability","score":79,"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 (excellent).","Context-footprint check failed: tool/resource definitions use about 3724 tokens (~248/item across 15 items; 12 tools + 3 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":"excellent"}},{"code":"schema.footprint_heavy","args":{"avg":"248","items":"15","tools":"12","tokens":"3724","resources":"3"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":69,"verdict":"fail","reasons":["Stability check failed: the tool surface changed between v0.3.6 and v0.4.1: 0 tool removals, 1 breaking changes, 0 additions."],"codes":[{"code":"stability.version_churn","args":{"to":"v0.4.1","days":"22","from":"v0.3.6","added":"0","breaks":"1","removed":"0"}}]},{"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 (50% 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":"50"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.","An AI judge read all 14 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_declared","args":{"pct":"100","annotated":"2","destructive":"2"}},{"code":"toolsafety.manipulation_clean","args":{"units":"14","judged":"14"}}]},{"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":["No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.","Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.","Install-script risk not yet assessed.","Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read."],"malware":[],"components":[{"slug":"genieacs-mcp","type":"npm","identifier":"genieacs-mcp","withdrawn":false,"score":48,"current":false,"url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/genieacs-mcp","markdownUrl":"https://verifymcp.io/servers/geiserx-genieacs-mcp/genieacs-mcp.md"},{"slug":"drumsergio-genieacs-mcp","type":"oci","identifier":"drumsergio/genieacs-mcp","withdrawn":false,"score":49,"current":true,"url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp","markdownUrl":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp.md"}],"facts":[{"label":"Registry","value":"oci"},{"label":"Package","value":"drumsergio/genieacs-mcp"},{"label":"Version","value":"v0.4.1"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"connection_request","title":"Wake device (connection request)","description":"Send a TR-069 connection request so a CPE device contacts GenieACS now instead of at its next periodic inform. Use it to run tasks that are already queued, or to apply a preset change without waiting. It queues nothing itself. Succeeds when the device answered; fails with ACS error 504 when the device is unreachable (offline, or behind NAT without STUN). Example: connection_request(device_id=\"202BC1-BM632w-000001\").","inputs":[{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":197},{"name":"delete_task","title":"Delete queued task","description":"Remove a task from the GenieACS queue before the device runs it, for example a firmware download or reboot queued by mistake, or a faulted task you do not want retried. GenieACS already deletes a task once the device has run it, so every task you can see in genieacs://tasks/{device_id} is either waiting or faulted. Fails with ACS error 503 while the device is in a session with GenieACS; try again a few seconds later. Use retry_task instead to run a faulted task again. Example: delete_task(task_id=\"67abc123def4560012345678\").","inputs":[{"name":"task_id","type":"string","required":true,"description":"The task's _id, from genieacs://tasks/{device_id} or from the task_id a task tool returned."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":166},{"name":"download_firmware","title":"Push firmware or file to device","description":"Tell a CPE device to download and apply a file stored on GenieACS: a firmware image, a configuration file or another file the device accepts. A wrong image can leave a device unusable, so check the file's metadata (genieacs://file/{name}: OUI, product class, version) against the device first. GenieACS queues a download task and sends a connection request at once; the transfer itself can take minutes after the tool returns. Check genieacs://tasks/{device_id} and genieacs://faults/{device_id} afterwards. Example: download_firmware(device_id=\"202BC1-BM632w-000001\", file_id=\"firmware-v2.0.bin\").","inputs":[{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"},{"name":"file_id","type":"string","required":true,"description":"The _id of the file on GenieACS, which is its filename, e.g. \"firmware-v2.0.bin\". Check it exists with genieacs://file/{name}."},{"name":"filename","type":"string","required":false,"description":"Optional target file name sent to the device (TR-069 TargetFileName). Omit it to let the device choose."}],"outputs":[{"name":"device_id","type":"string","required":true,"description":"The device the task was queued on."},{"name":"message","type":"string","required":true,"description":"What happened, in one sentence."},{"name":"status","type":"string","required":true,"description":"done: the device ran the task in the session GenieACS opened at once. queued: the device did not answer within 3 seconds, so the task runs at its next inform or connection request."},{"name":"task","type":null,"required":false,"description":"The task document GenieACS returned."},{"name":"task_id","type":"string","required":false,"description":"The GenieACS task id; use it with delete_task or retry_task, or look for it in genieacs://tasks/{device_id}."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":323},{"name":"get_parameter","title":"Read cached device parameters","description":"Read TR-069 parameter values GenieACS has cached for a device, without contacting the device: firmware version, serial number, uptime, WiFi SSID, IP addresses and so on. Values are what the device reported at its last inform or refresh, with a timestamp each; call refresh_parameter first when you need a value from the device now. Give one path or a comma-separated list; an object path such as \"Device.WiFi\" returns every cached leaf under it. Returns found=false for an unknown device id, and lists paths with no cached value under missing.","inputs":[{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"},{"name":"parameter_path","type":"string","required":true,"description":"Comma-separated TR-069 paths. Example: \"Device.DeviceInfo.SoftwareVersion\" or \"InternetGatewayDevice.DeviceInfo.SoftwareVersion,InternetGatewayDevice.DeviceInfo.UpTime\"."}],"outputs":[{"name":"device_id","type":"string","required":true,"description":null},{"name":"found","type":"boolean","required":true,"description":"false when no device has this id."},{"name":"missing","type":"null|array","required":true,"description":"Requested paths with no cached value; refresh_parameter can fetch them."},{"name":"parameters","type":"object","required":true,"description":"Every cached leaf parameter at or under the requested paths, keyed by full path."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":262},{"name":"manage_preset","title":"Create, replace or delete preset","description":"Create, replace or delete a GenieACS preset. A preset is a fleet-wide rule: at their next inform, every device matching its precondition gets its configurations applied, so a broad precondition (or an empty one) reconfigures the whole fleet. Confirm the precondition and the devices it matches (search_devices with the same filter) before a put. action=\"put\" creates or overwrites the preset with body; action=\"delete\" removes it. body is a JSON object: weight (integer, higher wins), precondition (a MongoDB-style filter as a JSON string, e.g. \"{\\\"_tags\\\":\\\"office\\\"}\"), and configurations (an array of {type: \"value\" | \"provision\" | \"add_object\" | \"delete_object\", ...}). Example body: {\"weight\":0,\"precondition\":\"{\\\"_tags\\\":\\\"pilot\\\"}\",\"configurations\":[{\"type\":\"provision\",\"name\":\"myScript\"}]}. Read genieacs://presets/list first.","inputs":[{"name":"action","type":"string","required":true,"description":"\"put\" creates or replaces the preset, \"delete\" removes it."},{"name":"body","type":"string","required":false,"description":"For action=\"put\": the preset document as a JSON object string, with weight, precondition and configurations. Ignored for \"delete\"."},{"name":"name","type":"string","required":true,"description":"The preset name, its id on GenieACS. It cannot contain a dot."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":289},{"name":"manage_provision","title":"Create, replace or delete provision script","description":"Create, replace or delete a GenieACS provision script. A provision is JavaScript that GenieACS runs during the inform session of every device a preset applies it to, so replacing one changes how those devices are configured. Scripts use the GenieACS sandbox API (declare, commit, clear, ext, log); ext() calls extension scripts that run on the ACS host with full privileges, so treat a provision as code running on your ACS. action=\"put\" uploads or overwrites the script (raw JavaScript, not JSON; GenieACS answers 400 on a syntax error); action=\"delete\" removes it. Presets reference provisions by name. Read genieacs://provisions/list first. Example script: log(\"Device \" + DeviceID.ID + \" informed\");","inputs":[{"name":"action","type":"string","required":true,"description":"\"put\" creates or replaces the script, \"delete\" removes it."},{"name":"name","type":"string","required":true,"description":"The provision name, its id on GenieACS."},{"name":"script","type":"string","required":false,"description":"For action=\"put\": the JavaScript source. Ignored for \"delete\"."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":221},{"name":"reboot_device","title":"Reboot device","description":"Reboot a CPE device through GenieACS. Use it when a device needs a restart, for example after a configuration change or to recover an unresponsive device. The device drops its service while it restarts. GenieACS queues the task and sends a connection request at once: status \"done\" means the device ran it in that session, \"queued\" means it runs at the device's next inform. A reboot does not confirm the device came back; read Device.DeviceInfo.UpTime (or InternetGatewayDevice.DeviceInfo.UpTime) with refresh_parameter afterwards. Example: reboot_device(device_id=\"202BC1-BM632w-000001\").","inputs":[{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"}],"outputs":[{"name":"device_id","type":"string","required":true,"description":"The device the task was queued on."},{"name":"message","type":"string","required":true,"description":"What happened, in one sentence."},{"name":"status","type":"string","required":true,"description":"done: the device ran the task in the session GenieACS opened at once. queued: the device did not answer within 3 seconds, so the task runs at its next inform or connection request."},{"name":"task","type":null,"required":false,"description":"The task document GenieACS returned."},{"name":"task_id","type":"string","required":false,"description":"The GenieACS task id; use it with delete_task or retry_task, or look for it in genieacs://tasks/{device_id}."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":233},{"name":"refresh_parameter","title":"Refresh parameter from device","description":"Ask a CPE device for the current value of a TR-069 parameter, or of every parameter under an object path, and store it in GenieACS. Use it when get_parameter's cached value may be stale. It changes nothing on the device. GenieACS queues a getParameterValues task and sends a connection request at once: status \"done\" means the fresh value is already stored, so read it with get_parameter; \"queued\" means it arrives at the device's next inform. Example: refresh_parameter(device_id=\"202BC1-BM632w-000001\", parameter=\"Device.DeviceInfo.SoftwareVersion\").","inputs":[{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"},{"name":"parameter","type":"string","required":true,"description":"Full dotted TR-069 path in the device's data model. Examples: \"Device.DeviceInfo.SoftwareVersion\", \"InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.SSID\", or an object such as \"Device.WiFi.\" fo…"}],"outputs":[{"name":"device_id","type":"string","required":true,"description":"The device the task was queued on."},{"name":"message","type":"string","required":true,"description":"What happened, in one sentence."},{"name":"status","type":"string","required":true,"description":"done: the device ran the task in the session GenieACS opened at once. queued: the device did not answer within 3 seconds, so the task runs at its next inform or connection request."},{"name":"task","type":null,"required":false,"description":"The task document GenieACS returned."},{"name":"task_id","type":"string","required":false,"description":"The GenieACS task id; use it with delete_task or retry_task, or look for it in genieacs://tasks/{device_id}."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":290},{"name":"retry_task","title":"Retry faulted task","description":"Run a faulted task again: GenieACS clears the task's fault, and the device runs the task at its next session. Read genieacs://faults/{device_id} first to see why it failed; retrying a task whose cause is unchanged faults again. A task that has not faulted is left as it is. Example: retry_task(task_id=\"67abc123def4560012345678\").","inputs":[{"name":"task_id","type":"string","required":true,"description":"The faulted task's _id, from genieacs://tasks/{device_id}."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":116},{"name":"search_devices","title":"Search devices","description":"Find CPE devices in GenieACS with a MongoDB-style filter: by tag, manufacturer, model, firmware version, last inform time or any TR-069 parameter. It only reads. Examples: {\"_tags\":\"office\"}; {\"InternetGatewayDevice.DeviceInfo.Manufacturer\":\"Huawei\"} (GenieACS adds ._value to parameter paths); {\"_lastInform\":{\"$lt\":\"2026-01-01T00:00:00Z\"}} for devices silent since that date; {\"_id\":{\"$regex\":\"^202BC1-\"}}. Query operators such as $eq, $ne, $gt, $lt, $in, $nin, $exists, $regex, $and and $or work; $where, $function, $accumulator and $expr are refused, and a $regex pattern may be at most 256 characters. By default each device comes back as a summary (id, last inform, tags, manufacturer, product class, serial); ask for other fields with projection. Results come in pages of limit (default 50, at most 200); page with skip.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Most devices to return in this page, 1 to 200. Default 50."},{"name":"projection","type":"string","required":false,"description":"Comma-separated fields to return per device, e.g. \"_id,InternetGatewayDevice.DeviceInfo.SoftwareVersion\". Default: the summary fields. \"all\" returns whole device documents, which can be large (tens o…"},{"name":"query","type":"string","required":true,"description":"The filter, as a JSON object string. Example: {\"_tags\":\"office\"} or {\"_id\":\"202BC1-BM632w-000001\"}."},{"name":"skip","type":"integer","required":false,"description":"Matching devices to skip before this page, for paging. Default 0."},{"name":"sort","type":"string","required":false,"description":"Sort order as a JSON object string: 1 ascending, -1 descending. Example: {\"_lastInform\":-1} for the most recent first."}],"outputs":[{"name":"count","type":"integer","required":true,"description":"Devices in this page."},{"name":"devices","type":"null|array","required":true,"description":"The matching device documents, with the fields the projection asked for."},{"name":"limit","type":"integer","required":true,"description":"The page size used."},{"name":"more","type":"boolean","required":true,"description":"true when the page is full, so more devices may match: call again with skip = skip + count."},{"name":"skip","type":"integer","required":true,"description":"Devices skipped before this page."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":413},{"name":"set_parameter","title":"Set device parameters","description":"Write one or more TR-069 parameter values on a CPE device, overwriting the current values: WiFi SSID or key, periodic inform interval, management server URL, or any writable parameter. A wrong value can cut the device off (a wrong WAN or ACS URL setting, for example). parameter_values is a JSON array of [path, value] or [path, value, xsdType] tuples; xsd types include xsd:string, xsd:boolean, xsd:unsignedInt, xsd:int and xsd:dateTime, and GenieACS infers the type when it is omitted. Example: [[\"InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.SSID\",\"Lab-2\",\"xsd:string\"]]. GenieACS queues the task and sends a connection request at once: status \"done\" means the device applied it, \"queued\" means it runs at the next inform. A read-only or unknown parameter makes the device fault the task; see genieacs://faults/{device_id}. Read the current value with get_parameter first.","inputs":[{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"},{"name":"parameter_values","type":"string","required":true,"description":"JSON array of tuples, each [path, value] or [path, value, xsdType]. Example: [[\"Device.WiFi.SSID.1.SSID\",\"NewName\",\"xsd:string\"],[\"Device.ManagementServer.PeriodicInformInterval\",300,\"xsd:unsignedInt…"}],"outputs":[{"name":"device_id","type":"string","required":true,"description":"The device the task was queued on."},{"name":"message","type":"string","required":true,"description":"What happened, in one sentence."},{"name":"status","type":"string","required":true,"description":"done: the device ran the task in the session GenieACS opened at once. queued: the device did not answer within 3 seconds, so the task runs at its next inform or connection request."},{"name":"task","type":null,"required":false,"description":"The task document GenieACS returned."},{"name":"task_id","type":"string","required":false,"description":"The GenieACS task id; use it with delete_task or retry_task, or look for it in genieacs://tasks/{device_id}."}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":389},{"name":"tag_device","title":"Add or remove device tag","description":"Add a tag to a CPE device or remove one. Tags group devices: presets match on them (precondition {\"_tags\":\"office\"}) and search_devices finds by them. Adding or removing a tag can therefore make a preset apply to the device, or stop applying, at its next inform. Tags are case-sensitive. Use letters, digits, \"-\" and \"_\": GenieACS rejects a tag with other characters (a \".\" for example) with a 404. Fails with ACS error 404 when the device id does not exist. Example: tag_device(device_id=\"202BC1-BM632w-000001\", tag=\"office\", action=\"add\").","inputs":[{"name":"action","type":"string","required":true,"description":"\"add\" tags the device, \"remove\" untags it."},{"name":"device_id","type":"string","required":true,"description":"The GenieACS device id (the _id field), exactly as GenieACS stores it, usually OUI-ProductClass-SerialNumber, e.g. \"202BC1-BM632w-000001\". GenieACS escapes characters other than letters and digits in…"},{"name":"tag","type":"string","required":true,"description":"The tag, e.g. \"office\", \"floor-2\", \"firmware_pending\"."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":281}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T02:30:12.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":"no_attestation","reasonLabel":"No attestation published","discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-06","recent":[{"id":"chg_01a1a98a-dc58-7529-8ddc-054e0f78a233","kind":"score.total_changed","summary":"Trust score (48 → 49)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a1a98a-dc58-7529-8ddc-054e0f78a233"},{"id":"chg_01a19f3d-cbf3-7ec8-8a8f-af558396c4c1","kind":"score.total_changed","summary":"Trust score (47 → 48)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a19f3d-cbf3-7ec8-8a8f-af558396c4c1"},{"id":"chg_01a18fca-1df7-737e-bad5-c6fe75a957ee","kind":"score.total_changed","summary":"Trust score (46 → 47)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18fca-1df7-737e-bad5-c6fe75a957ee"},{"id":"chg_01a1857c-cb16-7c37-8321-a6058f09e4b6","kind":"score.total_changed","summary":"Trust score (45 → 46)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a1857c-cb16-7c37-8321-a6058f09e4b6"},{"id":"chg_01a1848a-ab1b-79e8-aa21-d5916adc91f8","kind":"score.total_changed","summary":"Trust score (7 → 45)","materiality":"functional","direction":"improvement","scoreDelta":38,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a1848a-ab1b-79e8-aa21-d5916adc91f8"},{"id":"chg_01a18488-13cb-73bc-b9ec-46a500579e52","kind":"package.version_changed","summary":"Package version (v0.4.0 → v0.4.1)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13cb-73bc-b9ec-46a500579e52"},{"id":"chg_01a18488-13cb-781d-9338-c29322bc72e7","kind":"score.total_changed","summary":"Trust score (45 → 7)","materiality":"functional","direction":"regression","scoreDelta":-38,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13cb-781d-9338-c29322bc72e7"},{"id":"chg_01a18488-13c9-7919-b807-bd436a544bbf","kind":"check.unverifiable","summary":"Stability (fail → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13c9-7919-b807-bd436a544bbf"},{"id":"chg_01a18488-13ca-7084-b4e6-c227f286bc63","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13ca-7084-b4e6-c227f286bc63"},{"id":"chg_01a18488-13ca-7bbb-b693-dfb8f41b1143","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13ca-7bbb-b693-dfb8f41b1143"},{"id":"chg_01a18488-13ca-76b1-a7df-74107387207b","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13ca-76b1-a7df-74107387207b"},{"id":"chg_01a18488-13cb-702b-b7ca-feaf2f2c4fc9","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a18488-13cb-702b-b7ca-feaf2f2c4fc9"},{"id":"chg_01a17e71-a342-7595-b089-7397421290dd","kind":"check.reason","summary":"MCP protocol (Implements a current MCP spec version (2026-07-28).)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a17e71-a342-7595-b089-7397421290dd"},{"id":"chg_01a17e71-a33f-79e3-aa1c-637af2f9d4be","kind":"check.verdict","summary":"Stability (0.40 → fail)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a17e71-a33f-79e3-aa1c-637af2f9d4be"},{"id":"chg_01a17e71-a344-72bd-8b42-b3efd27b9dd5","kind":"package.version_changed","summary":"Package version (v0.3.7 → v0.4.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a17e71-a344-72bd-8b42-b3efd27b9dd5"},{"id":"chg_01a17e71-a343-74bd-bf45-56b701310cb1","kind":"check.appeared","summary":"First check of Tool coverage (50)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a17e71-a343-74bd-bf45-56b701310cb1"},{"id":"chg_01a170e1-1620-7616-b65e-05e3cd131fd0","kind":"score.total_changed","summary":"Trust score (44 → 45)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-25","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a170e1-1620-7616-b65e-05e3cd131fd0"},{"id":"chg_01a16692-be74-7a95-aa1a-ef2cb874e554","kind":"check.reverified","summary":"Security disclosure (unverified → pass)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-23","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a16692-be74-7a95-aa1a-ef2cb874e554"},{"id":"chg_01a16692-be75-7cfd-848f-8c852ed99af7","kind":"score.total_changed","summary":"Trust score (43 → 44)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-23","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a16692-be75-7cfd-848f-8c852ed99af7"},{"id":"chg_01a1616c-d6d8-70a6-ac0e-91acae380573","kind":"check.unverifiable","summary":"Security disclosure (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-22","url":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp#chg-chg_01a1616c-d6d8-70a6-ac0e-91acae380573"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp","markdown":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp.md","changelogJson":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/geiserx-genieacs-mcp/drumsergio-genieacs-mcp.xml","external":[{"label":"Docker Hub","href":"https://hub.docker.com/r/drumsergio/genieacs-mcp"},{"label":"Repository","href":"https://github.com/GeiserX/genieacs-mcp"},{"label":"Website","href":"https://geiserx.github.io/genieacs-mcp/"}]}}