Anchorr — a small Discord bot that lets you request movies/TV via Jellyseerr and receives Jellyfin "item added" notifications in Discord.
Use slash commands to search/request (TMDB and OMDB-backed) and get pretty embeds when content shows up on your server.
/search <title>— search TMDB and show details in an embed; from the embed you can Request./request <title>— send a request immediately to Jellyseerr.- Receives Jellyfin-style webhooks and posts Add notifications into a configured Discord channel (embed with director, short summary, runtime, rating, and quick buttons).
- Optional OMDb lookup for IMDb rating / director / actors.
Before you begin, ensure you have the following:
- A running Jellyfin server.
- A running Jellyseerr instance.
- A Discord account and a server where you have administrative privileges.
- API keys from:
- The Movie Database (TMDB)
- OMDb API (Optional, but recommended for richer data)
- Node.js (version 18.x or later).
- Docker and Docker Compose (if you choose the Docker installation method).
This project is intended to be self-hosted by each user (so everyone keeps their own API keys).
The bot will also available as a hosted Discord bot (maintainer-hosted) soon.
Before installing anchorr, you need to create an application and a bot user in the Discord Developer Portal.
- Go to the Discord Developer Portal and log in.
- Click the "New Application" button in the top-right corner. Give it a name and accept the terms.
- In the left-hand menu, navigate to the "Bot" section.
- Click the "Add Bot" button and confirm the action.
- Under the bot's username, click "Reset Token" to generate the bot's secret key. Copy this token. Keep this token secure and do not share it with anyone! You will need it shortly.
- Now, let's generate the invite link. Go to "OAuth2" -> "URL Generator".
- In the "SCOPES" section, check the boxes for
botandapplications.commands. - A new "BOT PERMISSIONS" section will appear below. Grant the following minimum permissions:
- Send Messages
- Embed Links
- Copy the generated URL at the bottom of the page, open it in a new browser tab, and invite the bot to your Discord server.
For Jellyfin to be able to send notifications to the bot, you need the official Webhooks plugin.
- Log in to your Jellyfin interface with an administrator account.
- Navigate to Dashboard -> Plugins.
- Go to the "Catalog" tab and search for the plugin named Webhooks.
- Click on it and install it.
- After the installation is complete, restart your Jellyfin server to activate the plugin.
Now we will download the source code and set up the environment variables.
- Clone the repository into a folder of your choice:
git clone https://github.com/nairdahh/anchorr.git cd anchorr - Create and configure the
.envfile. Copy the example file and open it with a text editor.cp .env.example .env
- Edit the
.envfile and fill in the required variables.
You can run the bot directly using Node.js or through a Docker container.
This method is ideal if you want to modify the code or debug. It requires Node.js and npm to be installed.
- Install the project dependencies:
npm install
- Start the bot:
node app.js
This is the recommended method for most users as it simplifies dependency management. It requires Docker and Docker Compose to be installed.
- Build and start the container in the background:
docker compose up -d --build
The final step is to configure Jellyfin to send events to your running bot.
- Go back to your Jellyfin Dashboard -> Webhooks (the section will appear in the menu after the plugin is installed).
- Click the
+button to add a new webhook. - In the URL field, enter the IP address of the machine where the bot is running, followed by the port set in
.envand the webhook path. The format is:http://<your-host-ip>:<WEBHOOK_PORT>/jellyfin-webhook - Example: If the bot is running on a machine with the local IP
192.168.1.100and you left the port as8282in your.envfile, the URL will be:http://192.168.1.100:8282/jellyfin-webhook - Choose which notifications you want to receive, save, and you're all set! Your bot is now fully configured.
Anchorr is configured using a .env file. Copy the .env.example to .env and fill in the values:
-
DISCORD_TOKEN: Your bot's unique token. Think of it as the bot's password. You can get this from the "Bot" section of your application in the Discord Developer Portal. -
BOT_ID: The Client ID of your bot. Find this on the "General Information" page of your Discord application. -
GUILD_ID: The ID of the Discord server where you will use the bot. Enable Developer Mode in Discord, then right-click your server icon and "Copy Server ID". -
JELLYSEERR_URL: The full URL to your Jellyseerr API. The correct value depends on your setup. Make sure to include/api/v1at the end.-
If running the bot directly with Node.js (without Docker):
-
If Jellyseerr is on the same machine, use localhost:
JELLYSEERR_URL=http://localhost:5055/api/v1 -
If Jellyseerr is on a different machine on your local network, use its IP address:
JELLYSEERR_URL=http://<jellyseerr-ip-address>:5055/api/v1
-
-
If running the bot inside a Docker container:
-
If Jellyseerr is running on the host machine (outside of Docker), you must use host.docker.internal:
JELLYSEERR_URL=http://host.docker.internal:5055/api/v1(Note:host.docker.internalis a special DNS name provided by Docker that resolves to the host machine's IP address). -
If Jellyseerr is running in another Docker container on the same network, use its service name:
JELLYSEERR_URL=http://jellyseerr:5055/api/v1(Note: Here,jellyseerris the service name of your Jellyseerr container in yourdocker-compose.ymlfile).
-
-
-
JELLYSEERR_API_KEY: Your API key from Jellyseerr. Find it in your Jellyseerr settings underSettings->API Keys. -
TMDB_API_KEY: Your API key from The Movie Database (TMDB). You can get one by creating an account on their website. -
OMDB_API_KEY: (Optional) Your API key from OMDb API for fetching IMDb ratings, director, and actor information. -
JELLYFIN_BASE_URL: The publicly accessible URL of your Jellyfin server. This must be reachable from the internet for the "Watch Now" links in Discord to work for other users.- Correct examples:
http://jellyfin.yourdomain.comorhttp://88.99.100.101:8096(if using a public IP). - Note: Using
localhostor a local network IP (e.g.,192.168.1.100) will only work for users on the same local network as the server.
- Correct examples:
-
JELLYFIN_SERVER_ID: The unique ID of your Jellyfin server. You can find this by navigating to any item in your library; it's theserverIdparameter in the URL. -
JELLYFIN_CHANNEL_ID: The ID of the Discord text channel where you want to receive notifications about new media. Enable Developer Mode, right-click the channel, and "Copy Channel ID". -
WEBHOOK_PORT: The network port the bot will listen on for incoming webhooks from Jellyfin. The default is8282.
/search <title> — opens interactive embed; use the Request button to send to Jellyseerr.
/request <title> — instantly request the title.
When Jellyfin (or your add pipeline) sends a webhook to http://<host>:<port>/jellyfin-webhook, the bot will post the notification to the configured Discord channel.
A Dockerfile is provided in the repo. Use docker compose up -d to run.
Keep secrets out of the repo (use .env only).
GitHub Actions can be set up to build/push images to GHCR or Docker Hub.
Contributions are always welcome!
See contributing.md for ways to get started.
This repo is released under the Unlicense — public domain. Do anything with the code.




