Skip to main content
Glama
aserper

NZBGet MCP Server

by aserper
README.md
# NZBGet MCP Server

An MCP (Model Context Protocol) server for [NZBGet](https://nzbget.net/) that exposes NZBGet API functionality as MCP tools usable by LLM clients.

Control your Usenet downloads with natural language through Claude and other MCP-compatible clients.

## Features

- **15 MCP tools** for complete NZBGet control
- Queue management: list, add, pause, resume, delete downloads
- History tracking: view completed and failed downloads
- Speed control: set download rate limits
- Status monitoring: real-time server status, disk space, queue info
- Logging: access and write to NZBGet logs
- TypeScript implementation with JSON-RPC client
- Stdio transport compatible with Claude Desktop

## Requirements

- Node.js 18+
- A running NZBGet instance with RPC enabled

## Setup

1. Clone the repository and install dependencies:

```bash
git clone https://github.com/aserper/nzbget-mcp.git
cd nzbget-mcp
npm install
```

2. Build the project:

```bash
npm run build
```

3. Copy `.env.example` to `.env` and set your values:

```bash
cp .env.example .env
```

Edit `.env`:

```
NZBGET_HOST=localhost
NZBGET_PORT=6789
NZBGET_USERNAME=nzbget
NZBGET_PASSWORD=tegbzn6789
NZBGET_USE_HTTPS=false
```

## Running the MCP Server

```bash
npm start
```

Or directly:

```bash
node dist/index.js
```

## Testing

```bash
# Run all tests
npm test

# Run with coverage
npm run test:coverage

# Run tests in watch mode
npm run test:ui
```

## Architecture

This MCP server uses a modular architecture:

- `src/tools/*.ts` - Individual tool implementations
- `src/tools/index.ts` - Tool registry and discovery
- `src/utils/errors.ts` - Error handling utilities
- `src/__tests__/mocks/` - Test fixtures and mocks

All 15 tools are self-contained modules that register themselves on import.

## Configuration

| Variable | Description | Default |
|----------|-------------|---------|
| `NZBGET_HOST` | NZBGet hostname | `localhost` |
| `NZBGET_PORT` | NZBGet RPC port | `6789` |
| `NZBGET_USERNAME` | NZBGet username | - |
| `NZBGET_PASSWORD` | NZBGet password | - |
| `NZBGET_USE_HTTPS` | Use HTTPS | `false` |

## Claude Desktop Configuration

Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, or equivalent on other platforms):

```json
{
  "mcpServers": {
    "nzbget": {
      "command": "node",
      "args": ["/path/to/nzbget-mcp/dist/index.js"],
      "env": {
        "NZBGET_HOST": "localhost",
        "NZBGET_PORT": "6789",
        "NZBGET_USERNAME": "nzbget",
        "NZBGET_PASSWORD": "tegbzn6789"
      }
    }
  }
}
```

## Docker

### Build Locally

```bash
docker build -t nzbget-mcp .
```

### Run

```bash
docker run --rm -it \
  -e NZBGET_HOST="localhost" \
  -e NZBGET_PORT="6789" \
  -e NZBGET_USERNAME="nzbget" \
  -e NZBGET_PASSWORD="tegbzn6789" \
  nzbget-mcp
```

## Exposed Tools

### Status & Information
- `nzbget_status` - Get server status (speed, queue size, disk space)
- `nzbget_version` - Get NZBGet version
- `nzbget_server_volumes` - Get download statistics per server

### Download Queue
- `nzbget_list_groups` - List all downloads in queue
- `nzbget_append` - Add NZB file to queue
- `nzbget_edit_queue` - Edit queue (pause, resume, delete, set priority)

### History
- `nzbget_history` - View download history

### Control
- `nzbget_pause_download` / `nzbget_resume_download`
- `nzbget_pause_post` / `nzbget_resume_post`
- `nzbget_rate` - Set download speed limit (KB/s)
- `nzbget_scan` - Scan for new NZB files

### Logging
- `nzbget_log` - Get log entries
- `nzbget_write_log` - Write custom log message

## Usage Examples

```
"Show me what's currently downloading"
"Pause the download queue"
"Set download speed to 5 MB/s"
"Add an NZB file to the queue"
"Show my recent download history"
```

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev

# Lint
npm run lint

# Type check
npm run typecheck
```

## License

MIT

## Contributing

Contributions welcome! Feel free to open an issue or submit a PR.

TDQS

C2.9/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct purposes targeting different aspects of NZBGet management (queue, history, status, control). There is some potential confusion between pause_download/pause_post and resume_download/resume_post pairs, but the descriptions clarify the download vs. post-processing distinction.

Naming Consistency5/5

All tools follow a consistent 'nzbget_verb_noun' pattern with snake_case throughout. The naming convention is predictable and systematic, making it easy to understand each tool's function at a glance.

Tool Count5/5

15 tools is well-scoped for an NZBGet management server. This provides comprehensive coverage of queue management, status monitoring, control operations, and logging without being overwhelming or sparse.

Completeness4/5

The toolset covers most essential NZBGet operations including queue management (append, edit, list groups), status monitoring (status, version, server volumes), control (pause/resume, rate limiting), and logging. Minor gaps might include more granular queue item manipulation or configuration management, but core workflows are well-covered.

Maintenance

ActivityInactive
ResponsivenessNo issues