🐱
Copied!
v0.7.0 Released

Simple, Efficient & Open Source HTTP File Transfer Service

HttpCat is a simple, efficient, and stable solution for file uploading and downloading. No external dependencies, easy deployment.

Open Source
GitHub
Simple
Zero Deps
MCP
AI Ready
Docker
Deploy

Core Features

Everything you need for efficient file transfers

MCP Support

AI assistants (Claude, Cursor, CodeBuddy) can directly manage your files

Modern UI

Beautiful React-based management interface for a better user experience

Docker Ready

One-click Docker deployment with docker-compose support

Open API

AK/SK HMAC-SHA256 signature authentication for scripts, CI/CD and AI integration

Image Management

Upload, rename, delete images with auto thumbnail generation and gallery view

Statistics

Detailed upload/download history and usage statistics tracking

Secure

UploadToken verification for secure file transfers

Notifications

WeCom Webhook integration for upload notifications

File Sharing

Share files via link with expiry time, download limit and extraction code protection

Anonymous Access

Share links support anonymous download without login (configurable)

Chunked Upload

Split large files into 5MB chunks for parallel upload. Resume from breakpoint after network interruption. Supports up to 100GB files

Resume Download

HTTP Range support for downloads. Use wget/curl -c to resume large file downloads. Drag progress bar in browser without re-downloading

Login Rate Limit

Auto-lock IP for 15min after 5 failed logins in 5min. Pure in-memory, zero external dependencies. Returns 429 during lockout

Related Projects

Explore the HttpCat ecosystem

HttpCat

Main

Core HTTP file transfer service with MCP support and modern React UI

Go 66.6% React 26.7% Shell 6.7%
View Project Download

HttpCat Python SDK

SDK

Python client SDK for easy server API communication

Python 100% MIT License
View SDK

Quick Start

Get started in minutes

# Quick Installation
httpcat_version="v0.7.0"
tar -zxvf httpcat_${httpcat_version}_linux-amd64.tar.gz
cd httpcat_${httpcat_version}_linux-amd64
sudo ./install.sh

# Manage service
systemctl start httpcat    # Start
systemctl stop httpcat     # Stop
systemctl status httpcat   # Status
# Docker Compose (Recommended)
docker-compose up -d

# Or Docker Run
docker run -d --name httpcat \
  -p 8888:8888 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/upload:/app/upload \
  httpcat:latest
# Upload file
curl -v -F "f1=@/path/to/file" \
  -H "UploadToken: YOUR_TOKEN" \
  http://localhost:8888/api/v1/file/upload

# Download file
wget -O xxx.jpg http://127.0.0.1:8888/api/v1/file/download?filename=xxx.jpg
# 1. Enable Open API in svr.yml
server:
  http:
    auth:
      open_api_enable: true
      aksk:
        your_access_key: your_secret_key

# 2. Shell script for AK/SK signature
AK="your_access_key"
SK="your_secret_key"
TIMESTAMP=$(date +%s)
BODY_HASH=$(printf '' | openssl dgst -sha256 -hex | awk '{print $NF}')

# Build signature string: Method\nPath\nQuery\nAccessKey\nTimeStamp\nBodySHA256
SIGN_STR=$(printf "%s\n%s\n%s\n%s\n%s\n%s" \
  "GET" "/api/v1/file/listFiles" "dir=/" \
  "${AK}" "${TIMESTAMP}" "${BODY_HASH}")

# Calculate HMAC-SHA256 signature
SIGNATURE=$(printf '%s' "${SIGN_STR}" | \
  openssl dgst -sha256 -hmac "${SK}" -hex | awk '{print $NF}')

# 3. Make API request with AK/SK headers
curl -s "http://localhost:8888/api/v1/file/listFiles?dir=/" \
  -H "AccessKey: ${AK}" \
  -H "Signature: ${SIGNATURE}" \
  -H "TimeStamp: ${TIMESTAMP}"
# Install SDK
pip install httpcat-sdk

# Python upload example
from httpcat.services.storage.uploader import upload_file

file_path = '/path/to/file.txt'
upload_token = 'your_token'
upload_url = 'http://your-server:8888/api/v1/file/upload'

response = upload_file(file_path, upload_token, upload_url)
print(response.text)
# MCP Client Configuration (Claude Desktop, Cursor, CodeBuddy)
{
  "mcpServers": {
    "httpcat": {
      "type": "sse",
      "url": "http://your-server:8888/mcp/sse"
    }
  }
}

# Available MCP Tools:
# - list_files, get_file_info, upload_file
# - upload_image, get_disk_usage, get_upload_history
# - request_delete_file, confirm_delete_file
# 1. Init chunked upload session
curl -X POST http://localhost:8888/api/v1/file/upload/init \
  -H "Content-Type: application/json" \
  -H "UploadToken: YOUR_TOKEN" \
  -d '{"filename":"bigfile.zip","fileSize":1073741824,"chunkSize":5242880,"fileMD5":"abc123"}'
# Returns: {"uploadId":"xxx","chunkSize":5242880,"totalChunks":205}

# 2. Upload each chunk (idempotent, retry safe)
curl -X POST http://localhost:8888/api/v1/file/upload/chunk \
  -H "UploadToken: YOUR_TOKEN" \
  -F "uploadId=xxx" \
  -F "chunkIndex=0" \
  -F "chunk=@/tmp/chunk_0.bin"

# 3. Query upload status (resume from breakpoint)
curl "http://localhost:8888/api/v1/file/upload/status?uploadId=xxx" \
  -H "UploadToken: YOUR_TOKEN"
# Returns: {"uploadedChunks":[0,1,2,...],"totalChunks":205}

# 4. Complete: merge chunks and verify MD5
curl -X POST http://localhost:8888/api/v1/file/upload/complete \
  -H "Content-Type: application/json" \
  -H "UploadToken: YOUR_TOKEN" \
  -d '{"uploadId":"xxx"}'

# 5. Abort session (cleanup temp files)
curl -X POST http://localhost:8888/api/v1/file/upload/abort \
  -H "Content-Type: application/json" \
  -H "UploadToken: YOUR_TOKEN" \
  -d '{"uploadId":"xxx"}'