greenroom
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TMDB_API_KEY | Yes | API key for The Movie Database (TMDB), obtained from account settings in the API section. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_genresA | List all available entertainment genres across media types and providers. Returns: Dictionary mapping genre names to their properties: { "Documentary": { "id": 99, "has_films": true, "has_tv_shows": true }, "Action": { "id": 28, "has_films": true, "has_tv_shows": false }, ... } |
| list_genres_simplifiedA | Get a simplified list of available genre names. Uses LLM sampling to extract genre names from the full genre data, returning a clean, formatted list without IDs or media type flags. Falls back to direct extraction if sampling is not supported. Returns: A formatted string containing the sorted list of genre names. Raises: Sampling errors are logged and result in fallback to direct key extraction. |
| categorize_genresA | Categorize all available genres by mood/tone. Groups entertainment genres into mood categories (Dark, Light, Serious, Fun) using a hybrid approach: hardcoded mappings for common genres with LLM-based categorization for edge cases and unknown genres. Returns: Dictionary mapping mood categories to lists of genre names: { "Dark": ["Horror", "Thriller", "Crime", "Mystery"], "Light": ["Comedy", "Family", "Kids", "Animation", "Romance"], "Serious": ["Documentary", "History", "War", "Drama"], "Fun": ["Action", "Adventure", "Fantasy", "Science Fiction"], "Other": ["Western", "Film Noir"] } |
| compare_llm_responsesA | Compare how Claude and a second agent (defaults to Ollama) respond to the same prompt. Sends the same prompt to both Claude (via ctx.sample) and the second agent in parallel, returning a structured comparison of their responses. Args: prompt: The prompt to send to both LLMs llm_model: Which second model to use (default: llama3.2:latest) temperature: Temperature for both LLMs (default: 0.7) max_tokens: Maximum tokens for responses (default: 500) Returns: Dictionary containing: { "prompt": "original prompt text", "claude_response": { "text": "Claude's response...", "model": "claude-sonnet-4-5", "error": None }, "alternative_response": { "text": "Ollama's response...", "model": "llama3.2:latest", "error": None }, "comparison": { "claude_length": 150, "alternative_length": 142, "both_succeeded": true } } Raises: ValueError: If prompt is empty or invalid parameters provided |
| discover_filmsA | Discovers films from based on optional filters like genre, release year, language, and sorting preferences. For now, defaults to TMDB service. Args: genre_id: Optional TMDB genre ID to filter by (use list_genres to find IDs) year: Optional release year to filter by (e.g., 2024) language: Optional ISO 639-1 language code (e.g., "en", "es", "fr") sort_by: Sort order - options: "popularity.desc", "popularity.asc", "vote_average.desc", "vote_average.asc", "date.desc", "date.asc" (None defaults to "popularity.desc") page: Page number for pagination, 1-indexed (default: 1) max_results: Maximum number of results to return (default: 20, max: 100) Returns: Dictionary containing: { "results": [ { "id": str, "media_type": str, "title": str, "date": str (YYYY-MM-DD format, may be None), "rating": float (0-10 scale, may be None), "description": str (may be None), "genre_ids": List[int] } ], "total_results": int, "page": int, "total_pages": int, "provider": str } Raises: ValueError: If invalid parameters provided RuntimeError: If service returns an error ConnectionError: If unable to connect to service |
| discover_televisionA | Discovers television shows based on optional filters like genre, first air year, language, and sorting preferences. For now, defaults to TMDB service. Args: genre_id: Optional TMDB genre ID to filter by (use list_genres to find IDs) year: Optional first air year to filter by (e.g., 2024) language: Optional ISO 639-1 language code (e.g., "en", "es", "fr") sort_by: Sort order - options: "popularity.desc", "popularity.asc", "vote_average.desc", "vote_average.asc", "date.desc", "date.asc" (None defaults to "popularity.desc") page: Page number for pagination, 1-indexed (default: 1) max_results: Maximum number of results to return (default: 20, max: 100) Returns: Dictionary containing: { "results": [ { "id": str, "media_type": str, "title": str, "date": str (YYYY-MM-DD format, may be None), "rating": float (0-10 scale, may be None), "description": str (may be None), "genre_ids": List[int] } ], "total_results": int, "page": int, "total_pages": int, "provider": str } Raises: ValueError: If invalid parameters provided RuntimeError: If service returns an error ConnectionError: If unable to connect to service |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_version | Get MCP server version. |
TDQS
Scored across 6 tools
Most tools have distinct purposes (categorizing genres, comparing LLMs, discovering films/TV, listing genres), but there is notable overlap between 'list_genres' and 'list_genres_simplified'—both list genres with only output format differences. This could confuse agents about which to use for basic genre listing. The other tools are clearly differentiated.
Tools follow a consistent verb_noun naming pattern (e.g., 'categorize_genres', 'compare_llm_responses', 'discover_films'), which is predictable and readable. However, 'list_genres' and 'list_genres_simplified' deviate slightly by adding a modifier, breaking the pure verb_noun convention but maintaining clarity.
With 6 tools, the count is reasonable for a media/entertainment-focused server, covering genre management, content discovery, and LLM comparison. It's slightly thin for full media lifecycle coverage (e.g., no update/delete tools for genres or content), but each tool serves a clear purpose without obvious bloat.
The server covers genre listing and content discovery for films and TV, but there are notable gaps. It lacks CRUD operations for genres (only listing/categorizing) and media (no create/update/delete tools for films/TV). The LLM comparison tool feels out of scope, and there's no integration between discovery and genre tools (e.g., filtering by mood from categorize_genres).