MCP server for querying a MongoDB movie database with search, filtering, and ranking capabilities
The server defines 4 tools with clear action verbs and reasonable descriptions. All tools have explicit input schemas with typed properties and descriptions. However, several quality gaps prevent a higher score: (1) descriptions lack detail about error conditions and dependencies, (2) output schemas are not formally documented, (3) no pagination support despite query tools returning lists, (4) parameter constraints (e.g., limit ranges) are not enforced in schemas, (5) no per-parameter type validation hints beyond basic JSON Schema. The codebase shows competent MongoDB integration but lacks production-grade tool polish. Tool names follow verb_noun convention well (find_movies, count_movies, get_top_movies, get_movie_details), which is +10pts. Descriptions average ~150 chars, within the 10-1024 target but lack dependency hints and error guidance. All 4 tools have schemas with properties and descriptions, but output structure is only implicit in the docstring, not formally declared.
Count how many movies match the criteria. Args: genre: Genre to filter by year: Release year to filter by min_rating: Minimum IMDb rating Returns: Number of movies matching the criteria
Find movies based on search criteria. Args: title: Movie title to search for genre: Genre like "Comedy", "Drama", etc. actor: Actor name to search for year: Release year min_rating: Minimum IMDb rating (e.g., 7.5) limit: Maximum number of results (default: 10) Returns: List of movies matching the criteria
Get detailed information about a specific movie. Args: title: Exact movie title Returns: Movie details or None if not found
Get the top-rated movies. Args: year: Filter by release year genre: Filter by genre limit: Number of movies to return (default: 5) Returns: List of top-rated movies
Output schemas not formally documented. Tool docstrings describe return values in natural language, but no explicit JSON Schema is provided for LLM parsing. This forces LLMs to infer the structure of returned movie objects, risking misuse of fields.
No pagination parameters despite list-returning tools. find_movies and get_top_movies return lists but lack offset/page/cursor support. Large result sets could exhaust context windows. Docstring mentions 'limit' but no 'offset' or 'cursor' for pagination.
Parameter constraints not enforced in schemas. 'limit' and 'min_rating' accept unbounded values without min/max. Schema lacks pattern, format, or minimum/maximum constraints that would prevent invalid input like limit=-5 or min_rating=1000.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Descriptions lack error handling guidance. No mention of what happens if a movie is not found, if MongoDB connection fails, or if parameters are invalid. LLMs have no recovery strategy when a call fails.
get_movie_details requires exact title match, but find_movies uses case-insensitive regex. This asymmetry forces users to know exact capitalization. Description should clarify that partial matches don't work, or support regex like find_movies.