{"name":"io.github.theluckystrike/zip-archive-create-extract-bomb-guard","slug":"theluckystrike-zip-archive-create-extract-bomb-guard","title":null,"description":"Create, inspect and extract zip archives offline, with traversal, symlink and zip-bomb guards.","url":"https://mcp.market/server/theluckystrike-zip-archive-create-extract-bomb-guard","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"scraping","tags":["scraping"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T07:17:48.000Z","license":"MIT"},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T19:31:06.547Z","last_ok_at":"2026-09-19T19:31:06.547Z","latency_ms":16},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/theluckystrike/mcp-servers","website":"https://mcp.zovo.one/s/zip","version":"0.22.0","remotes":[{"type":"streamable-http","url":"https://mcp.zovo.one/mcp/zip","headers":[{"description":"Bearer <Pro license key or anonymous token from GET https://mcp.zovo.one/mcp/token>","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"mcpb","identifier":"https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/zip.mcpb","version":"0.22.0","fileSha256":"3d71504c5897fd76ba1ef02a9b841fbf897acb15aeb77f3ee9ff561b4cb2af43","transport":{"type":"stdio"},"environmentVariables":[{"description":"Optional Pro license key (MCPL1....). Verified offline.","isSecret":true,"name":"MCP_LICENSE_KEY"}]}],"tools":[{"name":"license_activate","description":"Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"type":"string","description":"License key from checkout, MCPL1.<payload>.<signature>"}},"required":["key"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"license_status","description":"Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_add","description":"Call this tool to add files to an existing archive under their own names, or under prefix. A name clash is refused unless replace. An archive holding unsafe entries is refused rather than rewritten.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Path to the existing .zip file"},"paths":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Files to add, each stored under its own file name. A directory contributes its tree under its own name"},"prefix":{"type":"string","description":"Put the new entries under this folder inside the archive, for example \"invoices\""},"replace":{"type":"boolean","description":"Replace an entry whose name is already in the archive. Default false: a name clash is refused and nothing is changed"},"level":{"type":"integer","minimum":0,"maximum":9,"description":"Deflate level 0 to 9 for the new entries, default 6"},"password":{"type":"string","description":"Not supported. Passing it is refused rather than ignored"}},"required":["path","paths"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_bundle_month","description":"Local (stdio) install only. On this hosted endpoint /mcp/invoice, /mcp/quotes, /mcp/expense-tracker, /mcp/docx and /mcp/resume return their documents as one-hour download links and keep no output folder to read, so there is nothing for this tool to bundle. Pack the files with zip_upload plus zip_create instead.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Month as YYYY-MM. Default: this month. Files are chosen by their modification date"},"out_path":{"type":"string","description":"Name for the bundle. Default: the month, e.g. 2026-09"},"servers":{"type":"array","items":{"type":"string"},"description":"Only these sibling servers: invoice, quotes, expense-tracker, docx, resume. Default: all five"},"overwrite":{"type":"boolean","description":"Replace out_path if it exists. Default false"},"dry_run":{"type":"boolean","description":"Report what would go in and write nothing"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_create","description":"Call this tool to pack files uploaded with zip_upload into a new .zip and get a download link valid for one hour. Entry names are always relative, so the archive cannot write outside where it is unpacked.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"out_path":{"type":"string","description":"Name for the archive, e.g. reports. It comes back as a download link valid for one hour; a name already produced in this request is refused without overwrite"},"paths":{"type":"array","items":{"type":"string"},"description":"Names of files uploaded with zip_upload, each packed under that name"},"dir":{"type":"string","description":"Not available on this hosted endpoint: there are no directories. Passing it is refused rather than ignored, so nobody believes a tree was packed"},"patterns":{"type":"array","items":{"type":"string"},"description":"Only entries matching one of these globs (* and ? inside a segment, ** across segments; a pattern with no slash also matches the file name at any depth)"},"exclude":{"type":"array","items":{"type":"string"},"description":"Drop entries matching one of these globs, applied after patterns"},"level":{"type":"integer","minimum":0,"maximum":9,"description":"Deflate level 0 to 9, default 6. 0 stores without compressing"},"overwrite":{"type":"boolean","description":"Replace out_path if a file is already there. Default false: an existing file is never overwritten"},"password":{"type":"string","description":"Not supported. Passing it is refused rather than ignored, so no one believes an archive is encrypted when it is not"}},"required":["out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_delete_upload","description":"Delete one uploaded file stored for your token. The register rows zip_history lists are kept.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":70}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_extract","description":"Call this tool to unpack an archive; every entry comes back as its own download link valid for one hour. Traversal, absolute-path and symlink entries are refused, a size and ratio cap stops a zip bomb, and dry_run reports exactly what would be written.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Path to the .zip file"},"out_dir":{"type":"string","description":"Ignored on this hosted endpoint: there are no directories, and every extracted entry comes back as its own download link valid for one hour"},"patterns":{"type":"array","items":{"type":"string"},"description":"Only entries matching one of these globs (* and ? inside a segment, ** across segments)"},"dry_run":{"type":"boolean","description":"Report what would be written, byte counts included, and write nothing"},"overwrite":{"type":"boolean","description":"Replace files that already exist in out_dir. Default false: the whole extraction is refused if any would be replaced"},"skip_unsafe":{"type":"boolean","description":"Skip the dangerous entries and extract the rest, naming what was skipped. Default false: one bad entry refuses the whole archive"},"max_total_mb":{"type":"number","minimum":1,"description":"Refuse if the selected entries declare more than this uncompressed. Default 1024"},"max_ratio":{"type":"number","minimum":2,"description":"Refuse an entry whose uncompressed/compressed ratio is above this. Default 100"}},"required":["path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_extract_text","description":"Call this tool to read one text entry out of an archive without unpacking anything: give the entry name and the text comes back inline. Binary entries are refused by name rather than printed as noise.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Path to the .zip file"},"entry":{"type":"string","description":"Exact entry name, as zip_list prints it. A glob is accepted when it matches exactly one entry"},"max_chars":{"type":"integer","minimum":100,"maximum":200000,"description":"Stop after this many characters (default 200000). The answer says when it was cut"}},"required":["path","entry"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_files","description":"List the files stored for your token on this endpoint, with their sizes. These are the names every path argument here resolves against.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_history","description":"List the archives created for your token, newest first, with entry counts, sizes and names, plus how much of the free 20 a month is used. Each download link expires after an hour; the row keeps the name.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"How many rows to show, newest first (default 20)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_list","description":"Call this tool to list an archive's entries with sizes and ratios and flag what is dangerous: absolute paths, .., symlinks, encrypted entries, duplicate names and bombs. Read-only. Run it before zip_extract.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Path to the .zip file. Read-only: the archive is never modified and nothing is extracted"},"limit":{"type":"integer","minimum":1,"maximum":2000,"description":"How many entries to print, largest first (default 50). The totals always cover every entry"},"patterns":{"type":"array","items":{"type":"string"},"description":"Only entries matching one of these globs"},"max_ratio":{"type":"number","minimum":2,"description":"Flag an entry whose uncompressed/compressed ratio is above this. Default 100"}},"required":["path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"zip_upload","description":"Send a file to this hosted endpoint. There is no filesystem here, so instead of a path you upload the file once with zip_upload and then pass its name wherever a path is asked for: an archive to zip_list, zip_extract, zip_extract_text or zip_add, a plain file to zip_create. Give exactly one of content_base64 (the file's bytes, the only paste form an archive can take), content (text, for a text file to pack) or url. url: fetch a public file instead of pasting base64 (recommended above about 10 KB): the url is fetched here with a 10 second timeout, at most 3 redirects, public http(s) hosts only, and a 1 MB cap, and a name ending .zip is checked for the PK magic before anything is stored. Uploads are kept for your token between calls; zip_files lists them and zip_delete_upload removes one. The request body cap is 256 KB, so the practical ceiling on a paste is about 190 KB of file once it is base64 inside a JSON-RPC envelope.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":70,"description":"Name to refer to this file by: 1-64 characters of letters, digits, underscore or dash, with an optional extension. No extension means .zip, e.g. \"reports\" or \"notes.txt\""},"content":{"type":"string","description":"The file as text (a .txt, .csv, .md or source file to pack). Not accepted for a .zip"},"content_base64":{"type":"string","description":"The file's bytes, base64-encoded. This is the only paste form an archive can be uploaded in"},"url":{"type":"string","description":"url: fetch a public file instead of pasting base64 (recommended above about 10 KB). Public http(s) only; private, link-local and this endpoint's own zone are refused"}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-19T19:21:28.922Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:21:28.753Z","components":{"code":{"score":-1,"max":25,"notes":["package could not be scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 206ms"]},"poisoning":{"score":15,"max":15,"notes":["12 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.zovo.one/mcp/zip","reachable":true,"authRequired":false,"latencyMs":206,"serverInfo":{"name":"mcp-zip","version":"0.22.0"}}],"packages":[],"repo":{"found":true,"owner":"theluckystrike","repo":"mcp-servers","archived":false,"pushedAt":"2026-09-19T07:17:48Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/51033404?v=4","ownerCreatedAt":"2019-05-25T20:35:39Z","license":"MIT"},"icon":{"url":"https://mcp.zovo.one/favicon.ico","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T07:17:48.000Z","score":23}}}},"grade_history":[{"kind":"restore","fromGrade":"C","toGrade":"A","reason":"score 88","createdAt":"2026-09-19T00:28:22.926Z"}],"reviews":[]}