get_movieLABSCO SUMMARY
A worked example of a real database behind MCP, that happens to hold films.
The interesting part is not the subject matter — it is that writes are validated at the edge, relationships are readable from both directions, and search is delegated to Postgres full-text indexing rather than reimplemented. If you are looking for a template for putting your own relational data behind an assistant, this is a more complete one than most.
What it is
A Go server over a Postgres movie database. Movies and actors are full records with validation, they can be linked to each other, and the search tools go beyond title matching into decades, rating ranges and similarity.
What you get
- add_movie, get_movie, update_movie and delete_movie, with year and rating bounds enforced on write
- add_actor, get_actor, update_actor and delete_actor
- search_movies across title, director, genre, year range and rating range in one call
- search_by_decade and search_by_rating_range for the questions people actually ask
- movie_recommendation_engine for recommendations scored against your preferences — the README's own example is "Recommend movies similar to The Godfather"
- search_actors by name, and list_top_movies for the ranked list
- link_actor_to_movie and unlink_actor_from_movie to maintain the cast
- get_movie_cast and get_actor_movies — the relationship read from either end
- movies://database/all and movies://database/stats as resources, plus the poster collection
Requirements
PostgreSQL and Go — the database connection comes from DB_HOST, DB_PORT, DB_NAME, DB_USER and DB_PASSWORD, or a single DATABASE_URL. A Docker-based setup is provided if you would rather not install Postgres yourself. Full-text search relies on Postgres indexes, so the database does the work rather than the server.
Setup effort
Build from source — git clone https://github.com/francknouama/movies-mcp-server.git
USE CASES
Finding something to watch tonight
Search by genre, decade and a minimum rating in one call instead of filtering by hand.
Following an actor's work
Look up the actor, then read every film they are linked to.
Finding out who was in something
Read the cast from the film rather than checking each actor.
Adding a film and its cast properly
Create the record, then link the actors so the relationship reads from both ends.
Looking for more like this one
Ask for similar films instead of guessing at the right genre filter.
Correcting a record that was entered wrong
Update the film or the actor, with the year and rating bounds checked on the way in.
23 tools
Listed in project docs. Your client may show a different list.
add_movieupdate_moviedelete_movielist_top_moviessearch_moviessearch_by_decadesearch_by_rating_rangeadd_actorget_actorupdate_actordelete_actorlink_actor_to_movieunlink_actor_from_movieget_movie_castget_actor_moviessearch_actorsbulk_movie_importmovie_recommendation_enginedirector_career_analysiscreate_search_contextget_context_pageget_context_infoBEFORE YOU INSTALL
What to know first
Tools you get
23 tools named in the project's documentation.
Requires
- Go 1.24.4 or later
- PostgreSQL 17 (or the Docker-based setup)
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/francknouama/movies-mcp-server.git
cd movies-mcp-server
cp .env.example .env # Edit .env with your database settings
make docker-up
make db-setup
make db-migrate
make db-seed
go build -o movies-mcp-server-sdk ./cmd/server-sdk/Add the mcpServers block to claude_desktop_config.json with the absolute binary path and the DB_* env values, then restart Claude Desktop
MCP Clients
Claude Desktop
{
"mcpServers": {
"movies": {
"command": "<YOUR_PATH_TO_MOVIES_MCP_SERVER_SDK>",
"args": [],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "5432",
"DB_USER": "movies_user",
"DB_PASSWORD": "movies_password",
"DB_NAME": "movies_mcp",
"DB_SSLMODE": "disable"
}
}
}
}