url-download-mcp
# MCP URL Downloader
A Model Context Protocol (MCP) server that enables AI assistants to download files from URLs to the local filesystem.
<a href="https://glama.ai/mcp/servers/@dmitryglhf/url-download-mcp">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@dmitryglhf/url-download-mcp/badge" alt="mcp-ping MCP server" />
</a>
## Features
- Download single or multiple files from URLs with concurrent support
- File size validation (configurable, default 500MB)
- Unique filename generation to prevent overwrites
- Security
## Installation
```bash
# Using uvx (recommended)
uvx mcp-url-downloader
# Using pip
pip install mcp-url-downloader
# From source
git clone https://github.com/dmitryglhf/mcp-url-downloader.git
cd mcp-url-downloader
uv sync
```
## Configuration
### Claude Desktop
To integrate server with Claude, add the following to your `claude_desktop_config.json` file:
```json
{
"mcpServers": {
"url-downloader": {
"command": "uvx",
"args": ["mcp-url-downloader"]
}
}
}
```
## Tools
### `download_single_file`
Download a single file from a URL with optional custom filename.
**Parameters:**
- `url` (string, required): URL of the file to download
- Must be a valid HTTP/HTTPS URL
- Maximum length: 2048 characters
- `output_dir` (string, optional): Directory to save the file
- Default: `~/Downloads/mcp-downloads/`
- Must be a valid writable directory path
- `filename` (string, optional): Custom filename for the saved file
- If not provided, extracted from URL
- Will be sanitized automatically
- Extension will be preserved or detected
- `timeout` (number, optional): Download timeout in seconds
- Default: `60`
- Range: `1-300`
- `max_size_mb` (number, optional): Maximum file size in MB
- Default: `500`
- Range: `1-5000`
### `download_files`
Download multiple files from URLs concurrently.
**Parameters:**
- `urls` (array of strings, required): List of URLs to download
- Each URL must be valid HTTP/HTTPS
- Maximum: 100 URLs per request
- Each URL max length: 2048 characters
- `output_dir` (string, optional): Directory to save all files
- Default: `~/Downloads/mcp-downloads/`
- All files will be saved to this directory
- `timeout` (number, optional): Download timeout in seconds per file
- Default: `60`
- Range: `1-300`
- `max_size_mb` (number, optional): Maximum file size in MB per file
- Default: `500`
- Range: `1-5000`
### Rate Limits
- Maximum 100 URLs per `download_files` request
- Maximum concurrent downloads: 10 (configurable up to 50)
- URL length limited to 2048 characters
- Timeout range: 1-300 seconds
- File size range: 1-5000 MB
## Development
```bash
# Run tests
uv run pytest
```
TDQS
Scored across 2 tools
The two tools have overlapping purposes—both download files from URLs—but their descriptions help differentiate them: one handles multiple files, the other a single file with optional custom naming. However, the core functionality is similar, which could lead to confusion about when to use each.
The tool names follow a consistent verb_noun pattern with snake_case throughout: 'download_files' and 'download_single_file'. Both start with 'download' and clearly describe their scope, making the naming predictable and easy to understand.
With only 2 tools, the server feels thin for a URL download domain, as it lacks operations like checking download status, handling errors, or managing downloads. While the tools cover basic downloading, the count is borderline for providing a complete surface.
The tool set is significantly incomplete for a URL download server. It lacks essential operations such as validating URLs, pausing/resuming downloads, handling authentication, or providing progress updates. This will likely cause agent failures in more complex scenarios.