Skip to content

Commit 1388166

Browse files
feat: add Docker support for MCP Registry submission
- Add multi-stage Dockerfile for containerized deployment - Add tools.json with all 63 tool definitions - Add docker-registry/ with server.yaml for registry PR - Add .dockerignore for optimized builds Enables submission to docker/mcp-registry for Docker Desktop MCP Toolkit integration. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent 7fa801b commit 1388166

6 files changed

Lines changed: 1693 additions & 0 deletions

File tree

.dockerignore

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Dependencies
2+
node_modules
3+
4+
# Build output (rebuilt in container)
5+
dist
6+
7+
# Development files
8+
.git
9+
.github
10+
.claude
11+
.vscode
12+
*.md
13+
!README.md
14+
15+
# Docker registry files (not needed in image)
16+
docker-registry
17+
18+
# Config files not needed for build
19+
.gitignore
20+
.npmrc
21+
.env*

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@ dist/
33
*.log
44
.DS_Store
55
.mcpregistry_*
6+
7+
# Claude Code local files
8+
.claude/memory/
9+
.claude/settings.local.json

Dockerfile

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Build stage
2+
FROM node:20-alpine AS builder
3+
4+
WORKDIR /app
5+
6+
# Copy package files
7+
COPY package*.json ./
8+
9+
# Install all dependencies (including dev)
10+
RUN npm ci
11+
12+
# Copy source code
13+
COPY tsconfig.json ./
14+
COPY src/ ./src/
15+
16+
# Build TypeScript
17+
RUN npm run build
18+
19+
# Production stage
20+
FROM node:20-alpine
21+
22+
WORKDIR /app
23+
24+
# Copy package files and install production dependencies only
25+
COPY package*.json ./
26+
RUN npm ci --omit=dev && npm cache clean --force
27+
28+
# Copy built output from builder
29+
COPY --from=builder /app/dist ./dist
30+
31+
# Set non-root user for security
32+
RUN addgroup -g 1001 -S nodejs && \
33+
adduser -S nodejs -u 1001 -G nodejs
34+
35+
USER nodejs
36+
37+
# Run the MCP server
38+
ENTRYPOINT ["node", "dist/index.js"]

docker-registry/server.yaml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: arr
2+
image: mcp/arr
3+
type: server
4+
meta:
5+
category: media
6+
tags:
7+
- sonarr
8+
- radarr
9+
- lidarr
10+
- readarr
11+
- prowlarr
12+
- media-management
13+
- plex
14+
- homelab
15+
- entertainment
16+
about:
17+
title: "*arr Media Management"
18+
description: "MCP server for the *arr media management suite - Sonarr (TV), Radarr (Movies), Lidarr (Music), Readarr (Books), and Prowlarr (Indexers). Manage your media library, search for content, monitor downloads, and get AI-powered configuration recommendations using TRaSH Guides."
19+
icon: https://wiki.servarr.com/assets/servarr.png
20+
source:
21+
project: https://github.com/aplaceforallmystuff/mcp-arr
22+
commit: 7fa801bc7c19ea67b2dbe48a1fcae5c3122f1a17
23+
config:
24+
description: |
25+
Configure URLs and API keys for your *arr services. Only configure the services you use -
26+
the server automatically detects which are available. Find API keys in each application
27+
under Settings > General > Security.
28+
env:
29+
- name: SONARR_URL
30+
description: "Sonarr base URL (e.g., http://localhost:8989 or http://sonarr:8989)"
31+
example: "http://localhost:8989"
32+
- name: RADARR_URL
33+
description: "Radarr base URL (e.g., http://localhost:7878 or http://radarr:7878)"
34+
example: "http://localhost:7878"
35+
- name: LIDARR_URL
36+
description: "Lidarr base URL (e.g., http://localhost:8686 or http://lidarr:8686)"
37+
example: "http://localhost:8686"
38+
- name: READARR_URL
39+
description: "Readarr base URL (e.g., http://localhost:8787 or http://readarr:8787)"
40+
example: "http://localhost:8787"
41+
- name: PROWLARR_URL
42+
description: "Prowlarr base URL (e.g., http://localhost:9696 or http://prowlarr:9696)"
43+
example: "http://localhost:9696"
44+
secrets:
45+
- name: arr.sonarr-api-key
46+
env: SONARR_API_KEY
47+
description: "Sonarr API key from Settings > General > Security"
48+
example: "<your-sonarr-api-key>"
49+
- name: arr.radarr-api-key
50+
env: RADARR_API_KEY
51+
description: "Radarr API key from Settings > General > Security"
52+
example: "<your-radarr-api-key>"
53+
- name: arr.lidarr-api-key
54+
env: LIDARR_API_KEY
55+
description: "Lidarr API key from Settings > General > Security"
56+
example: "<your-lidarr-api-key>"
57+
- name: arr.readarr-api-key
58+
env: READARR_API_KEY
59+
description: "Readarr API key from Settings > General > Security"
60+
example: "<your-readarr-api-key>"
61+
- name: arr.prowlarr-api-key
62+
env: PROWLARR_API_KEY
63+
description: "Prowlarr API key from Settings > General > Security"
64+
example: "<your-prowlarr-api-key>"

0 commit comments

Comments
 (0)