SearXNG MCP Server
Web search and page reading through a SearXNG metasearch instance you run or trust
Query and manage a self-hosted Sonarr, Radarr, Lidarr and Prowlarr media stack from an MCP client
By Jim Christian (individual) TypeScript Local · stdio Media
59 popularity score ★ 238 ↓ 1.3k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs SONARR_URL, SONARR_API_KEY. Replace each <NAME> with your value.
claude mcp add arr -e SONARR_URL=<SONARR_URL> -e SONARR_API_KEY=<SONARR_API_KEY> -- npx -y mcp-arr-server{
"mcpServers": {
"arr": {
"command": "npx",
"args": [
"-y",
"mcp-arr-server"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}{
"mcpServers": {
"arr": {
"command": "npx",
"args": [
"-y",
"mcp-arr-server"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}{
"servers": {
"arr": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-arr-server"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}[mcp_servers.arr]
command = "npx"
args = ["-y", "mcp-arr-server"]
[mcp_servers.arr.env]
SONARR_URL = "<SONARR_URL>"
SONARR_API_KEY = "<SONARR_API_KEY>"gemini mcp add --scope user -e SONARR_URL=<SONARR_URL> -e SONARR_API_KEY=<SONARR_API_KEY> arr npx -- -y mcp-arr-serverOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs SONARR_URL, SONARR_API_KEY. Replace each <NAME> with your value.
claude mcp add arr -e SONARR_URL=<SONARR_URL> -e SONARR_API_KEY=<SONARR_API_KEY> -- docker run --rm -i -e SONARR_URL -e SONARR_API_KEY ghcr.io/aplaceforallmystuff/mcp-arr:latest{
"mcpServers": {
"arr": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"SONARR_URL",
"-e",
"SONARR_API_KEY",
"ghcr.io/aplaceforallmystuff/mcp-arr:latest"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}{
"mcpServers": {
"arr": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"SONARR_URL",
"-e",
"SONARR_API_KEY",
"ghcr.io/aplaceforallmystuff/mcp-arr:latest"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}{
"servers": {
"arr": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"SONARR_URL",
"-e",
"SONARR_API_KEY",
"ghcr.io/aplaceforallmystuff/mcp-arr:latest"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}[mcp_servers.arr]
command = "docker"
args = ["run", "--rm", "-i", "-e", "SONARR_URL", "-e", "SONARR_API_KEY", "ghcr.io/aplaceforallmystuff/mcp-arr:latest"]
[mcp_servers.arr.env]
SONARR_URL = "<SONARR_URL>"
SONARR_API_KEY = "<SONARR_API_KEY>"gemini mcp add --scope user -e SONARR_URL=<SONARR_URL> -e SONARR_API_KEY=<SONARR_API_KEY> arr docker -- run --rm -i -e SONARR_URL -e SONARR_API_KEY ghcr.io/aplaceforallmystuff/mcp-arr:latestOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs SONARR_URL, SONARR_API_KEY. Replace each <NAME> with your value.
git clone https://github.com/aplaceforallmystuff/mcp-arr.git
cd mcp-arr
npm install
npm run buildclaude mcp add arr -e SONARR_URL=<SONARR_URL> -e SONARR_API_KEY=<SONARR_API_KEY> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'{
"mcpServers": {
"arr": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}{
"mcpServers": {
"arr": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}{
"servers": {
"arr": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"SONARR_URL": "<SONARR_URL>",
"SONARR_API_KEY": "<SONARR_API_KEY>"
}
}
}
}[mcp_servers.arr]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"]
[mcp_servers.arr.env]
SONARR_URL = "<SONARR_URL>"
SONARR_API_KEY = "<SONARR_API_KEY>"gemini mcp add --scope user -e SONARR_URL=<SONARR_URL> -e SONARR_API_KEY=<SONARR_API_KEY> arr node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'SONARR_URL |
Required: Sonarr base URL, e.g. http://localhost:8989. Any one app pair works instead: RADARR_, LIDARR_ or PROWLARR_URL/API_KEY. |
|---|---|
SONARR_API_KEY |
Required: Sonarr API key from Settings > General > Security. |
RADARR_URL |
Optional: Radarr base URL, e.g. http://localhost:7878. |
RADARR_API_KEY |
Optional: Radarr API key. |
LIDARR_URL |
Optional: Lidarr base URL, e.g. http://localhost:8686. |
LIDARR_API_KEY |
Optional: Lidarr API key. |
PROWLARR_URL |
Optional: Prowlarr base URL, e.g. http://localhost:9696. |
PROWLARR_API_KEY |
Optional: Prowlarr API key. |
MCP_TRANSPORT |
Optional: Set to http to serve Streamable HTTP instead of stdio. |
HOST |
Optional: HTTP bind address, 127.0.0.1 by default. |
PORT |
Optional: HTTP port, 3000 by default. |
MCP_PATH |
Optional: HTTP endpoint path, /mcp by default. |
In a container, a setting goes in with -e NAME=value after docker run.
MCP *arr Server connects an MCP client to the self-hosted "*arr" apps people use to run a home media library: Sonarr for TV, Radarr for films, Lidarr for music and Prowlarr for indexers. It talks to each app's own HTTP API with that app's API key, so you can browse what is in the library, see what is downloading, check upcoming releases, look up new titles and add them, and start searches for missing episodes, albums or films.
Tools appear only for the apps you configure. For Sonarr, Radarr and Lidarr it also adds a set of read-only configuration tools (quality profiles, health checks, root folders and free space, download clients, naming rules, tags, and a one-call setup dump) so you can ask why something is not being grabbed. A further group of tools pulls reference quality profiles, custom formats, naming schemes and size limits from the TRaSH Guides GitHub repository and can compare your own profile or naming against them; those work with no *arr app configured at all.
It runs over stdio by default, or as a Streamable HTTP server (MCP_TRANSPORT=http) for clients such as ChatGPT that connect to a URL; for those it also offers generic search and fetch tools. With all four apps configured, version 1.7.3 registers 64 distinct tool names, more than the README tables suggest, because the seven configuration tools are generated once per app (src/index.ts).
The package description in the repository mentions Readarr, but the code at v1.7.3 reads settings only for Sonarr, Radarr, Lidarr and Prowlarr; there are no Readarr tools.
| Runtime | Node.js 18+orDocker |
|---|
Node.js 18 or newer (for npx), or Docker for the published ghcr.io image. At least one running Sonarr, Radarr, Lidarr or Prowlarr instance reachable from where the server runs, plus that app's API key (Settings > General > Security). The TRaSH Guides tools need outbound access to GitHub.
No Readarr support in v1.7.3, despite the repository description. Configuration tools are read-only: profiles, naming and download clients must be changed in each app's own interface. Library and queue listings return 25 items by default, up to 100 with limit and offset; calendars look 7 days ahead for Sonarr and 30 for Radarr and Lidarr by default. Prowlarr gets no configuration tools. TRaSH data is cached for an hour. When Lidarr is configured, lidarr_get_root_folders and lidarr_get_quality_profiles are registered twice in the tool list (once explicitly, once by the per-app config set), which a strict client may reject.
Suits people who already run Sonarr, Radarr, Lidarr or Prowlarr at home and want to ask about their library, queue and setup in plain language, or have an assistant add titles and kick off searches. It is a community project, not from the *arr developers. Because several tools change the library or queue, give it only the apps you want it to act on. Readarr users will find nothing for books here. If you want to expose it to a remote client, plan your own access control, since the HTTP mode has none.
arr_statusarr_search_allsearchfetchsonarr_get_seriessonarr_searchsonarr_add_seriessonarr_get_root_folderssonarr_get_quality_profilessonarr_get_queuesonarr_get_calendarsonarr_get_episodessonarr_search_missingsonarr_search_episodesonarr_refresh_seriesradarr_get_moviesradarr_searchradarr_add_movieradarr_get_root_foldersradarr_get_quality_profilesradarr_get_queueradarr_get_calendarradarr_search_movieradarr_search_moviesradarr_update_movieradarr_delete_queue_itemradarr_refresh_movielidarr_get_artistslidarr_searchlidarr_add_artistlidarr_get_root_folderslidarr_get_quality_profileslidarr_get_metadata_profileslidarr_get_queuelidarr_get_albumslidarr_search_albumlidarr_search_missinglidarr_get_calendarprowlarr_get_indexersprowlarr_searchprowlarr_test_indexersprowlarr_get_statstrash_list_profilestrash_get_profiletrash_list_custom_formatstrash_get_namingtrash_get_quality_sizestrash_compare_profiletrash_compare_naming