Koskamo

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.

theluckystrike Zip MCP logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by theluckystrike
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/zip
Vendor documentation

What its tools do

12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

12 of 12 have a description · 12 of 12 declare behavior hints · 9 of 10 with parameters document them all

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

Community listingRegistry 0.23.0
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
Server-advertised capabilities
{
  "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.

Zip archive handling. It covers new archives from uploaded files, archive contents with safety flags for path traversal, symlinks, encryption, duplicate names and zip bombs, extraction that refuses unsafe entries, adding files to an existing archive, reading one text entry inline, and a history of created archives. McpStamp's hosted service has no file system, so files arrive as base64 uploads, text or public URLs, are kept per user account, and results come back as one-hour download links. The free tier allows 20 archives a month. One lifetime key unlocks this server and all 58 others: https://mcp.zovo.one/buy/bundle?src=instr.zip

Tools

12 advertised

license_status — License status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

license_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
license_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
license_activate — Activate license
Advertised by the server during the last successful anonymous check.

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.

license_activate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "key"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  }
}
license_activate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
zip_upload — Upload a file or an archive
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

zip_upload input schema
{
  "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"
    }
  }
}
zip_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
zip_files — List uploaded files
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the files stored for your token on this endpoint, with their sizes. These are the names every path argument here resolves against.

zip_files input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
zip_files annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
zip_delete_upload — Delete an uploaded file
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete one uploaded file stored for your token. The register rows zip_history lists are kept.

zip_delete_upload input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 70,
      "minLength": 1
    }
  }
}
zip_delete_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
zip_create — Create a zip archive
Advertised by the server during the last successful anonymous check.

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.

zip_create input schema
{
  "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"
    }
  }
}
zip_create annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
zip_list — List a zip archive
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

zip_list input schema
{
  "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"
    }
  }
}
zip_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
zip_extract — Extract a zip archive
Advertised by the server during the last successful anonymous check.

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.

zip_extract input schema
{
  "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"
    }
  }
}
zip_extract annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
zip_add — Add files to a zip
Advertised by the server during the last successful anonymous check.

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.

zip_add input schema
{
  "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"
    }
  }
}
zip_add annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
zip_extract_text — Read one entry as text
Advertised by the server during the last successful anonymous check.

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.

zip_extract_text input schema
{
  "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"
    }
  }
}
zip_extract_text annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
zip_bundle_month — Bundle a month of documents
Advertised by the server during the last successful anonymous check.

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.

zip_bundle_month input schema
{
  "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"
    }
  }
}
zip_bundle_month annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
zip_history — Archives created
Advertised by the server during the last successful anonymous check.

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.

zip_history input schema
{
  "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)"
    }
  }
}
zip_history annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

1 advertised

upgrade_to_pro — Explain the upgrade

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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 URI
pricing://zip

MIME type: application/json

90-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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zip-mcp https://mcp.zovo.one/mcp/zip

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zip-mcp --url https://mcp.zovo.one/mcp/zip

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zip-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zip-mcp": {
      "url": "https://mcp.zovo.one/mcp/zip"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zip-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.zovo.one/mcp/zip",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zip-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zip-mcp": {
      "type": "http",
      "url": "https://mcp.zovo.one/mcp/zip"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zip-mcp https://mcp.zovo.one/mcp/zip

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.zovo.one/mcp/zip

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.