Note: This post is primarily focused towards developers who are looking to implement their own custom metadata agents, however there is nothing preventing anyone interested from taking a look through here if they find the topic interesting. It’s never too late to become a developer!
Many of you know that we removed the old Plug-ins system from Plex Media Server (PMS) many years ago but have kept the legacy metadata agents which use this system around until we had a suitable replacement for those.
Work has been steadily happening in the background on building a system to replace this, which leverages the same API that our official Plex Movie and Plex Series metadata agents use.
Today we are releasing the first implementation of this system for developers to start familiarising themselves with the API and to start building out their own metadata providers and to start replacing any beloved legacy agents with these new ones. We plan to completely remove the legacy agents system from new PMS releases in 2026.
This requires Plex Media Server 1.43.0, which is currently in beta, you may need to restart your server if you have an instance on this beta already running to pick up the new feature.
Metadata Providers and Metadata Agents
The nomenclature is slightly updated with the introduction of “metadata providers,” these are as the name suggests, providers of metadata, and are just an HTTP API that returns metadata for library items in a standardized way which is used across the Plex ecosystem.
The new updated “metadata agents” are just a collection of one or more metadata providers which can be defined in the media server. If you are familiar with how the legacy agents worked, then this will be very similar in the way you can add multiple sources (via metadata providers) and re-order them to define the priority of the data from those sources.
Developers only really need to work on the metadata provider side, as the metadata agents are just a user-defined list of providers.
Documentation
Our documentation portal (https://developer.plex.tv/pms) has been updated to include a few new sections outlining the API and the expected responses.
Your jumping off point will start here: https://developer.plex.tv/pms/#section/API-Info/Metadata-Providers
Developers are not restricted by any one language or technology to write these providers, essentially anything that can serve an HTTP API can be used.
Distribution to users can also happen in any way you see fit, from local Docker containers, to self-contained binaries or publicly hosted on the internet. All the user needs to install a metadata provider is a single URL that their system can access.
Example Provider Project
We’ve also provided an example metadata provider written in Typescript that utilizes the TMDB API for TV Show libraries.
This project should make it easier to reference expected behaviours and shows the usage of a more advanced feature like implementing different episode orders.
You can visit this project here: GitHub - plexinc/tmdb-example-provider
Current limitations and missing features
We are releasing this to developers quite early intentionally with just the basic functionality, as getting early feedback on what is most important to developers will guide what features and functionality get worked on next and how they are implemented
- Currently only Movie and TV Libraries are supported. Music libraries will come later but require a bit more work to get there.
- Only unauthenticated requests are currently supported. This is currently fine for development purposes or even when users are only hosting locally. Developers hosting public facing providers will likely want to wait until authentication has been implemented before publishing unauthenticated APIs.
- Metadata support for “streams” is not yet implemented. This would be used to support providing subtitles. Currently only the “item” metadata is used.
- Provider-specific preferences are not yet implemented. Some providers may want to define specific settings unique to that provider that users can adjust from inside PMS which then get passed to the provider when making requests. Currently we only pass some fixed standard query parameters with requests like language, country, etc.
- Expect some bugs early on.
Getting Started
- Take a look at the documentation to get a basic understanding.
- Clone the example project and get it running locally (be sure to check the SwaggerUI to play around making requests).
- Use this to configure the example provider inside PMS
- Go to Settings → Metadata Agents → Add Provider → Enter the URL for the locally running provider.
- Still in the Metadata Agents section, click “Add Agent”, give it any name you want and make the newly added provider the Primary metadata provider. Add additional providers if needed (generally recommended to also add “Plex Local Media” for local metadata and asset).
- Create a new TV Show Library, in the Advanced pane select your new Agent in the agent dropdown.
- You will see requests being logged to the console of the example provider, this can be useful to see what is happening when PMS does matching and metadata refreshes.
- Be free and write your own metadata providers with the knowledge you’ve gained!
Feedback
Early feedback would be very valuable to us, so anything you think could use improvement or if you’re missing something that doesn’t yet exist please make a post in the dev corner forum section.
Future plans
If you are currently maintaining one of these legacy agents then it would be a great time to hop in and implement your agent using the new metadata provider method, if you wish to continue having a usable metadata agent in future PMS versions, before we drop support for legacy agents.
Please feel free to reach out on the forum if you are one of these people and have any questions to make this process as easy as possible.