theluckystrike Zip MCP
The Zip MCP server allows agents to create, inspect, and extract zip archives safely. It includes safety features like bomb and traversal guards, CRC checking, and symlink protection. It supports listing contents, extracting files, and reading text from archives without unpacking the entire bundle, making it suitable for freelancers and bookkeepers managing document archives.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.zovo.one/mcp/zipWhat its tools do
12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (3)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Pack uploaded files into a zip archive for accounting
- List zip contents with safety flags for dangerous paths
- Extract text from a specific file without unpacking the rest
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- mcp-zip 0.22.6
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 12 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- 1 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
12 advertised
license_status — License status
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}license_activate — Activate license
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}zip_upload — Upload a file or an archive
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"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"
},
"name": {
"type": "string",
"maxLength": 70,
"minLength": 1,
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}zip_files — List uploaded files
List the files stored for your token on this endpoint, with their sizes. These are the names every path argument here resolves against.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}zip_delete_upload — Delete an uploaded file
Delete one uploaded file stored for your token. The register rows zip_history lists are kept.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 70,
"minLength": 1
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}zip_create — Create a zip archive
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"out_path"
],
"properties": {
"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"
},
"level": {
"type": "integer",
"maximum": 9,
"minimum": 0,
"description": "Deflate level 0 to 9, default 6. 0 stores without compressing"
},
"paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Names of files uploaded with zip_upload, each packed under that name"
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Drop entries matching one of these globs, applied after patterns"
},
"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"
},
"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"
},
"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)"
},
"overwrite": {
"type": "boolean",
"description": "Replace out_path if a file is already there. Default false: an existing file is never overwritten"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}zip_list — List a zip archive
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "Path to the .zip file. Read-only: the archive is never modified and nothing is extracted"
},
"limit": {
"type": "integer",
"maximum": 2000,
"minimum": 1,
"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"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}zip_extract — Extract a zip archive
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "Path to the .zip file"
},
"dry_run": {
"type": "boolean",
"description": "Report what would be written, byte counts included, and write nothing"
},
"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)"
},
"max_ratio": {
"type": "number",
"minimum": 2,
"description": "Refuse an entry whose uncompressed/compressed ratio is above this. Default 100"
},
"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"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}zip_add — Add files to a zip
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"path",
"paths"
],
"properties": {
"path": {
"type": "string",
"description": "Path to the existing .zip file"
},
"level": {
"type": "integer",
"maximum": 9,
"minimum": 0,
"description": "Deflate level 0 to 9 for the new entries, default 6"
},
"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"
},
"password": {
"type": "string",
"description": "Not supported. Passing it is refused rather than ignored"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}zip_extract_text — Read one entry as text
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"path",
"entry"
],
"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",
"maximum": 200000,
"minimum": 100,
"description": "Stop after this many characters (default 200000). The answer says when it was cut"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}zip_bundle_month — Bundle a month of documents
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"month": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}$",
"description": "Month as YYYY-MM. Default: this month. Files are chosen by their modification date"
},
"dry_run": {
"type": "boolean",
"description": "Report what would go in and write nothing"
},
"servers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these sibling servers: invoice, quotes, expense-tracker, docx, resume. Default: all five"
},
"out_path": {
"type": "string",
"description": "Name for the bundle. Default: the month, e.g. 2026-09"
},
"overwrite": {
"type": "boolean",
"description": "Replace out_path if it exists. Default false"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}zip_history — Archives created
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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "How many rows to show, newest first (default 20)"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
1 advertised
upgrade_to_pro — Explain the upgrade
Explain what Pro on the zip server costs and exactly what the user has to do, without leaving the conversation.
- feature
- The capped feature that prompted this, if there was one
Resources
1 advertised
pricing — Pricing and upgrade
What zip costs, what Pro unlocks, the checkout link that carries this connection's token, and the one step a person has to take. Machine-readable; read it before telling a user how to lift a free-tier cap.
pricing://zip90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 3520 ms
- 95th percentile latency
- 3520 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 3520 ms · metadata changed · 12 tool(s), 1 resource(s), 0 resource template(s), 1 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zip-mcp https://mcp.zovo.one/mcp/zipCodex
codex mcp add zip-mcp --url https://mcp.zovo.one/mcp/zipCursor
{
"mcpServers": {
"zip-mcp": {
"url": "https://mcp.zovo.one/mcp/zip"
}
}
}Cline
{
"mcpServers": {
"zip-mcp": {
"type": "streamableHttp",
"url": "https://mcp.zovo.one/mcp/zip",
"disabled": false
}
}
}VS Code
{
"servers": {
"zip-mcp": {
"type": "http",
"url": "https://mcp.zovo.one/mcp/zip"
}
}
}Gemini CLI
gemini mcp add --transport http zip-mcp https://mcp.zovo.one/mcp/zipClaude Desktop
https://mcp.zovo.one/mcp/zipWindsurf
{
"mcpServers": {
"zip-mcp": {
"serverUrl": "https://mcp.zovo.one/mcp/zip"
}
}
}Let your agent find its tools
Find servers like theluckystrike Zip MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.