使用说明
archive-mcp
archive-mcp is a Go Model Context Protocol (MCP) server over stdio that inspects and selectively extracts archives using system tools on PATH (no shell).
| License | Apache-2.0 |
| OS | Linux, macOS |
Documentation
Start here — guides and contracts live under docs/:
| Doc | Description |
|---|---|
| Tools reference | Parameters and result shapes for every MCP tool |
| Usage examples | Worked JSON requests (list, inspect, extract, ping) |
| Client contract | Error codes, fields, configuration-sensitive limits |
| Architecture | Packages, adapters, stdio request flow |
| Development | Local checks, fuzzing, doc update checklist |
| Troubleshooting | Missing binaries, permissions, malformed JSON, CI |
| Releases | Branching, tags, changelog policy |
Repository meta:
| Security policy | Threat model, runner limits, extraction + ZIP encryption notes |
| Contributing | Branches, PRs, CI gate |
| Code of conduct | Community expectations |
| Changelog | Version history (Keep a Changelog) |
On GitHub, relative links above resolve to the browsable files for the branch/tag you are viewing.
Contents
- What it does
- Supported archive shapes
- External binaries (PATH)
- Stdio JSON contract
- Safety guarantees
- Quickstart
- Configuration
- Sample
list_archive_contents
What it does
| Capability | Tools |
|---|---|
| Health / version | ping |
| List members (read-only) | list_archive_contents |
| Metadata + warnings (read-only) | inspect_archive (optional deep) |
| Extract named paths only | extract_selected_files |
Details: Tools reference · Examples: Usage.
Supported archive shapes
Extensions / detection (see internal/archive):
.tar→tar.tar.gz,.tgz→targz.gz→ single-streamgz(not a multi-file container).zip→zip
External binaries (PATH)
| Format family | Typical binaries |
|---|---|
| tar / tar.gz | tar |
| zip | unzip (list + extract); zipinfo optional for name listing |
| gzip stream | gzip tooling where used by adapters; .gz extract may use stdlib |
Clients should expect binary_missing if required tools are absent — see Troubleshooting.
Stdio transport
One JSON object per line on stdin (NDJSON). stdout carries only JSON; stderr is for logs (--debug adds detail).
MCP hosts (Cursor, Claude Desktop, …)
Use JSON-RPC 2.0 messages (jsonrpc, id, method, params):
initialize→ capabilities +serverInfonotifications/initialized→ no stdout line (notification)tools/list→ tool names, descriptions,inputSchematools/callwithname+arguments→content/isError(see Usage)
Legacy / scripts
A single-line object with tool (and optional id, params) still works for ad-hoc pipes and tests.
Malformed input
Non-JSON or bad frames: legacy-shaped lines get one invalid_request response and the process exits. JSON-RPC lines return a JSON-RPC error when possible — see Troubleshooting and Client contract.
Safety guarantees
- No shell interpolation (
exec.CommandContextonly). - Bounded command timeouts and stdout/stderr capture limits.
- Path traversal prevention and archive entry validation.
- Extraction: no overwrite, optional allowed output base, symlink/hardlink entries refused by default.
More detail: SECURITY.md · Errors: Client contract.
Quickstart
go build -o bin/archive-mcp ./cmd/archive-mcp
./bin/archive-mcp
Embedded version string (shown in ping):
go build -ldflags "-X main.buildVersion=$(git describe --tags --always)" -o bin/archive-mcp ./cmd/archive-mcp
Ping:
{"id":"req-1","tool":"ping"}
{"id":"req-1","result":{"ok":true,"version":"dev","server":"archive-mcp"}}
Configuration
Flags and equivalent environment variables (see internal/config):
| Flag | Env (typical) |
|---|---|
--timeout |
ARCHIVE_MCP_TIMEOUT_SECONDS |
--max-output-bytes |
ARCHIVE_MCP_MAX_OUTPUT_BYTES |
--max-entries |
ARCHIVE_MCP_MAX_ENTRIES |
--max-archive-size |
ARCHIVE_MCP_MAX_ARCHIVE_SIZE |
--allowed-output-base |
ARCHIVE_MCP_ALLOWED_OUTPUT_BASE |
--debug |
ARCHIVE_MCP_DEBUG |
Example:
./bin/archive-mcp --timeout 10 --max-output-bytes 1048576 --debug
Limits also appear in Client contract.
Sample list_archive_contents
{
"id": "req-list-1",
"tool": "list_archive_contents",
"params": {
"archive_path": "internal/archive/testdata/sample.tar",
"max_entries": 100,
"include_details": true
}
}
License
Licensed under Apache-2.0. See LICENSE.
