Skip to main content
Glama
artemu78

S3 Uploader MCP Server

by artemu78
README.md
# S3 Uploader MCP Server

A Model Context Protocol (MCP) server that provides file upload functionality to AWS S3 buckets with automatic MIME type detection.

## Features

- Upload files to S3 buckets
- Automatic MIME type detection based on file extensions
- Support for common file types (images, documents, audio, video, archives)
- Configurable S3 object keys
- Comprehensive error handling

## Setup

### Prerequisites

- Node.js (version 14 or higher)
- AWS credentials with S3 access
- An S3 bucket

### Installation

1. Clone or download this repository
2. Install dependencies:
   ```bash
   npm install
   ```

### Configuration

Set the following environment variables:

```bash
export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
export AWS_REGION="your-aws-region"
export BUCKET_NAME="your-s3-bucket-name"
```

## Usage

### As an MCP Server

Start the server:

```bash
node index.js
```

The server exposes one tool:

#### `upload_files`

Upload a file to the configured S3 bucket.

**Annotations:**
- Title: "Upload File to S3"
- Read-only: false (modifies environment by uploading files)
- Destructive: false (additive operation, doesn't remove existing data)
- Idempotent: false (uploading same file again may overwrite or create new version)
- Open-world: true (interacts with external AWS S3 service)

**Parameters:**

- `filePath` (required): Absolute path to the file to upload
- `key` (optional): S3 object key. If not provided, uses the filename

**Example:**

```json
{
  "name": "upload_files",
  "arguments": {
    "filePath": "/path/to/your/file.jpg",
    "key": "uploads/my-image.jpg"
  }
}
```

### Supported MIME Types

The server automatically detects MIME types for the following file extensions:

- **Images**: jpg, jpeg, png, gif, webp, bmp, ico, svg, tiff
- **Documents**: pdf, doc, docx, xls, xlsx, ppt, pptx, rtf
- **Text**: txt, csv, html, css, js, json, xml, md
- **Audio**: mp3, wav, ogg, m4a, flac
- **Video**: mp4, avi, mov, wmv, flv, webm, mkv
- **Archives**: zip, rar, tar, gz, 7z
- **Other**: bin, exe, dmg (treated as binary)

Unknown file types default to `application/octet-stream`.

## Integration with Claude Desktop

To use this MCP server with Claude Desktop, add it to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "s3-uploader": {
      "command": "node",
      "args": ["/path/to/s3-mcp-server/index.js"],
      "env": {
        "AWS_ACCESS_KEY_ID": "your-access-key-id",
        "AWS_SECRET_ACCESS_KEY": "your-secret-access-key",
        "AWS_REGION": "your-aws-region",
        "BUCKET_NAME": "your-s3-bucket-name"
      }
    }
  }
}
```

## Error Handling

The server provides detailed error messages for common issues:

- Missing environment variables
- File not found
- Invalid file paths
- AWS/S3 errors
- Network connectivity issues

## Security Considerations

- Store AWS credentials securely (use environment variables, not hardcoded values)
- Ensure the S3 bucket has appropriate permissions
- Consider using IAM roles instead of access keys in production
- Validate file types and sizes before upload if needed

## Development

To test the server locally:

```bash
# Test tools listing
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node index.js

# Test file upload (replace with actual file path)
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "upload_files", "arguments": {"filePath": "/path/to/test/file.txt"}}}' | node index.js
```

TDQS

A4/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion. The upload_file tool clearly defines its purpose and input.

Naming Consistency5/5

The single tool name 'upload_file' follows a clear verb_noun pattern, consistent with common conventions.

Tool Count3/5

The server provides only one tool, which is borderline thin but appropriate for a narrowly-scoped uploader service.

Completeness5/5

For an S3 uploader, the upload_file tool covers the essential operation thoroughly, with no obvious missing functionality within the stated scope.

Maintenance

ActivitySlowing
ResponsivenessNo issues