opensubtitles/mcp.opensubtitles.com
If you are the rightful owner of mcp.opensubtitles.com and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The OpenSubtitles MCP Server is a TypeScript/Node.js-based server designed for seamless integration with the OpenSubtitles API, providing subtitle search and download functionalities.
OpenSubtitles MCP Server
A TypeScript/Node.js-based MCP (Model Context Protocol) server for OpenSubtitles API integration. This server provides subtitle search and download functionality with a freemium model, using the Kong gateway at api.opensubtitles.com for all API management.
Features
- Comprehensive Search: Search subtitles using all OpenSubtitles API parameters (title, IMDB ID, TMDB ID, file hash, etc.)
- Multiple Download Formats: Support for SRT, ASS, and VTT subtitle formats
- File Hash Calculation: Calculate OpenSubtitles hash for exact movie file matching
- Rate Limiting: Integrated with Kong gateway for proper rate limiting
- Freemium Model: Unlimited search, downloads limited by API key status
Installation & Usage
The OpenSubtitles MCP Server supports three modes:
- HTTP Mode: Web server for n8n workflows, browser access, and HTTP integrations
- Stdio Mode (Local): Run locally for Claude Desktop integration
- Stdio Mode (Remote): Connect to hosted server at mcp.opensubtitles.com
1. HTTP Mode (Recommended for Server Deployment)
Run as a web server on port 1620:
# Install dependencies
npm install
npm run build
# Start HTTP server
npm start
# or
PORT=1620 MCP_MODE=http node dist/index.js
Access points:
- Health Check:
http://localhost:1620/health - API Info:
http://localhost:1620/ - Web Interface:
http://localhost:1620/web(Browser UI - No Node.js required!) - Direct API:
http://localhost:1620/proxy(POST requests) - Tools List:
http://localhost:1620/tools(Schema discovery) - MCP Endpoint:
http://localhost:1620/sse(Server-Sent Events)
2. Stdio Mode (For Claude Desktop)
Quick Start with npx
npx @opensubtitles/mcp-server
Install via mcp-get
npx @michaellatman/mcp-get@latest install @opensubtitles/mcp-server
Claude Code Integration
For claude-code environments, you can add the server using the claude mcp add-json command:
claude mcp add-json "opensubtitles" '{"command":"npx","args":["-y","@opensubtitles/mcp-server@latest"],"env":{"MCP_MODE":"stdio","LOG_LEVEL":"info"},"disabled":false}'
Claude Desktop Integration - Local Mode
Add to your Claude Desktop configuration:
{
"mcpServers": {
"opensubtitles": {
"command": "npx",
"args": ["-y", "@opensubtitles/mcp-server"],
"env": {
"MCP_MODE": "stdio",
"OPENSUBTITLES_USER_KEY": "your_api_key_here"
}
}
}
}
Claude Desktop Integration - Remote Mode
Connect to the hosted server at mcp.opensubtitles.com:
{
"mcpServers": {
"opensubtitles": {
"command": "npx",
"args": ["-y", "@opensubtitles/mcp-server", "remote-proxy.js"]
}
}
}
Or using the dedicated remote command:
{
"mcpServers": {
"opensubtitles": {
"command": "npx",
"args": ["-y", "mcp-opensubtitles-remote"]
}
}
}
MCP Tools
1. search_subtitles
Search for subtitles with comprehensive parameter support:
Parameters:
query(string): Text search queryimdb_id(number): IMDB ID for exact matchingtmdb_id(number): TMDB ID for exact matchingparent_imdb_id(number): Parent IMDB ID for TV seriesparent_tmdb_id(number): Parent TMDB ID for TV seriesseason_number(number): Season number for TV episodesepisode_number(number): Episode number for TV episodesyear(number): Release yearmoviehash(string): OpenSubtitles file hash for exact matchingmoviebytesize(number): File size in bytes for hash matchinglanguages(string): Comma-separated language codes (e.g., 'en,es,fr')machine_translated(string): Include machine translated subtitlesai_translated(string): Include AI translated subtitleshearing_impaired(string): Include hearing impaired subtitlesforeign_parts_only(string): Include foreign parts onlytrusted_sources(string): Only trusted sourcesorder_by(string): Sort orderorder_direction(string): Sort direction (asc/desc)
Example:
await mcpClient.callTool("search_subtitles", {
query: "The Matrix",
year: 1999,
languages: "en"
});
2. download_subtitle
Download subtitle content by ID:
Parameters:
subtitle_id(string, required): Subtitle ID from search resultsformat(string): Subtitle format (srt, ass, vtt) - defaults to 'srt'user_api_key(string): Optional user API key for authenticated downloads
Example:
await mcpClient.callTool("download_subtitle", {
subtitle_id: "123456",
format: "srt",
user_api_key: "your_api_key"
});
3. calculate_file_hash
Calculate OpenSubtitles hash for local movie files:
Parameters:
file_path(string, required): Path to the movie file
Example:
await mcpClient.callTool("calculate_file_hash", {
file_path: "/path/to/movie.mkv"
});
Usage Examples
Search by Movie Title
await mcpClient.callTool("search_subtitles", {
query: "Inception",
year: 2010,
languages: "en"
});
Search by File Hash
// First calculate the hash
const hashResult = await mcpClient.callTool("calculate_file_hash", {
file_path: "/path/to/inception.mkv"
});
// Then search using the hash
await mcpClient.callTool("search_subtitles", {
moviehash: "8e245d9679d31e12",
moviebytesize: 12909756
});
Search TV Show Episodes
await mcpClient.callTool("search_subtitles", {
parent_imdb_id: 944947, // Game of Thrones
season_number: 1,
episode_number: 5,
languages: "en"
});
n8n Workflow Integration
The OpenSubtitles MCP Server has native n8n MCP client support for seamless workflow automation. Connect directly to the MCP server using n8n's built-in MCP client tools.
1. Start Server in HTTP Mode
First, start the MCP server in HTTP mode:
# Option 1: Use npm script (recommended)
npm start
# Option 2: Direct command with custom port
MCP_MODE=http PORT=1620 node dist/index.js
# Option 3: Using environment variables
export MCP_MODE=http
export PORT=1620
node dist/index.js
The server will be available at:
- Base URL:
http://localhost:1620 - Health Check:
http://localhost:1620/health - MCP Endpoint:
http://localhost:1620/message(Streamable HTTP) - Force JSON:
http://localhost:1620/json(Plain JSON for debugging) - Debug Info:
http://localhost:1620/debug(Server diagnostics) - Legacy MCP:
http://localhost:1620/sse(Server-Sent Events)
2. n8n MCP Client Configuration
Using n8n Native MCP Client
Configure the n8n MCP Client Tool node:
- Server URL:
http://localhost:1620/message(or your server URL) - Transport: HTTP Streamable
- Protocol: Model Context Protocol (MCP)
Search Subtitles with MCP Client
Configure the MCP Client node with these parameters:
{
"tool": "search_subtitles",
"arguments": {
"query": "The Matrix",
"year": 1999,
"languages": "en"
}
}
Alternative: Direct HTTP Request
For manual HTTP integration, use HTTP Request node:
{
"method": "POST",
"url": "http://localhost:1620/message",
"headers": {
"Content-Type": "application/json"
},
"body": {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_subtitles",
"arguments": {
"query": "The Matrix",
"year": 1999,
"languages": "en"
}
}
}
}
Download Subtitle with MCP Client
{
"tool": "download_subtitle",
"arguments": {
"file_id": 123456,
"user_api_key": "{{ $env.OPENSUBTITLES_API_KEY }}"
}
}
Calculate File Hash with MCP Client
{
"tool": "calculate_file_hash",
"arguments": {
"file_path": "/path/to/movie.mkv"
}
}
3. n8n Workflow Examples
Basic Search Workflow
- MCP Client Tool: Search for subtitles using movie title
- Code Node: Parse search results and extract file IDs
- MCP Client Tool: Download best matching subtitle
- File System Node: Save subtitle to disk
Automated Processing Workflow
- File Trigger: Monitor folder for new movie files
- MCP Client Tool: Calculate file hash
- MCP Client Tool: Search subtitles by hash for exact match
- Conditional Node: Check if subtitles found
- MCP Client Tool: Download subtitle if found
- File System Node: Save subtitle next to movie file
Benefits of Native MCP Integration
- Auto-discovery: Tools are automatically discovered via MCP protocol
- Type Safety: Full schema validation for tool arguments
- Error Handling: Proper MCP error responses
- Tool Documentation: Inline help and parameter descriptions
- JSON Compatibility: Automatic plain JSON responses for n8n clients
- Debug Support: Built-in debugging endpoints for troubleshooting
Troubleshooting n8n Integration
If you encounter JSON parsing errors:
- Try Force JSON Endpoint: Use
http://localhost:1620/jsoninstead of/message - Check Debug Info: Visit
http://localhost:1620/debugto verify server status - Verify User-Agent: Server auto-detects n8n clients (node, n8n, langchain, mcpClientTool)
- Check Logs: Look for "Sending plain JSON response for n8n compatibility" messages
4. Environment Variables for n8n
Set these environment variables in your n8n instance:
# OpenSubtitles API Key (optional but recommended)
OPENSUBTITLES_API_KEY=your_api_key_here
# MCP Server URL (if running on different host/port)
MCP_SERVER_URL=http://localhost:1620
5. Response Format
All n8n HTTP requests will receive JSON-RPC 2.0 responses:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "Search results or download data..."
}
]
}
}
6. Error Handling in n8n
Add error handling nodes to catch common issues:
- Rate Limit (429): Retry after delay or notify user to get API key
- Invalid API Key (401): Alert administrator to check API key
- Network Errors: Retry mechanism or alternative endpoint
- File Not Found: Skip processing or log error
7. Production Deployment
For production n8n workflows:
# Run MCP server as background service
nohup MCP_MODE=http PORT=1620 node dist/index.js > mcp-server.log 2>&1 &
# Or use PM2 for process management
pm2 start dist/index.js --name "opensubtitles-mcp" -- --env MCP_MODE=http PORT=1620
# Or use Docker
docker run -d -p 1620:1620 -e MCP_MODE=http opensubtitles-mcp-server
This integration allows you to automate subtitle operations in n8n workflows, perfect for media processing pipelines, batch subtitle downloads, or automated movie library management.
Web Browser Interface
For users who don't want to install Node.js or configure MCP, we provide a full web interface:
Access
- URL:
http://mcp.opensubtitles.com/web - Requirements: Any modern web browser
- No Installation: Works immediately without setup
Features
- 🔍 Search Subtitles: Search by title, year, IMDB ID, languages
- 💾 Download Subtitles: Download by file ID from search results
- 🔢 Calculate Hash: Generate OpenSubtitles hash for movie files
- 📊 Real-time Results: Instant feedback with formatted results
- 🎯 User-friendly: Clean interface with loading states and error handling
Direct HTTP API
For developers and automation:
# Search subtitles
curl -X POST http://mcp.opensubtitles.com/proxy \
-H "Content-Type: application/json" \
-d '{"tool": "search_subtitles", "arguments": {"query": "Matrix", "year": 1999}}'
# Download subtitle
curl -X POST http://mcp.opensubtitles.com/proxy \
-H "Content-Type: application/json" \
-d '{"tool": "download_subtitle", "arguments": {"file_id": 123456}}'
# List available tools
curl http://mcp.opensubtitles.com/tools
Rate Limiting & API Keys
Anonymous Usage
- Search: Unlimited
- Downloads: 0 per day (Kong enforced)
With OpenSubtitles API Key
- Search: Unlimited
- Downloads: Based on your OpenSubtitles account quota
Getting an API Key
- Register at OpenSubtitles.com
- Get your free API key
- Set the
OPENSUBTITLES_USER_KEYenvironment variable or pass it in tool calls
Development
Prerequisites
- Node.js 18.0.0 or higher
- TypeScript
Setup
git clone <repository>
cd mcp-opensubtitles
npm install
Building
npm run build
Development Commands
# HTTP Mode (Web Server)
npm run dev # Build and run HTTP server on port 1620
npm start # Run built HTTP server
# Stdio Mode (Claude Desktop)
npm run dev:stdio # Build and run stdio mode
npm start:stdio # Run built stdio mode
# Development with Auto-rebuild
npm run watch
Testing
# For HTTP mode testing
curl http://localhost:1620/health # Health check
curl http://localhost:1620/ # API info
# For Stdio mode testing
npm test # Run evaluation tests
npm run inspector # Debug with MCP Inspector (stdio mode)
# MCP evaluation tests
npx mcp-eval evals/evals.ts dist/index.js
Environment Variables
OPENSUBTITLES_API_BASE=https://api.opensubtitles.com # Default Kong gateway
NODE_ENV=production
PORT=1620
OPENSUBTITLES_USER_KEY=your_api_key_here # Optional
Architecture
The server uses a clean architecture with the following components:
- MCP Server Core (
src/server.ts): Main MCP protocol implementation - Kong API Client (
src/api-client.ts): HTTP client for Kong gateway communication - Tools (
src/tools/): Individual tool implementations - Utilities (
src/utils/): Helper functions for hash calculation
All API requests go through the Kong gateway at api.opensubtitles.com, which handles:
- Rate limiting enforcement
- API key validation
- Request routing to OpenSubtitles API
- Error handling and responses
Error Handling
The server provides helpful error messages for common scenarios:
- Rate Limit Exceeded: "Download limit reached. Get your free API key at opensubtitles.com/api"
- Invalid API Key: "Invalid API key. Please check your OpenSubtitles API key"
- File Not Found: Clear file path validation messages
- Network Errors: Descriptive network connectivity messages
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Submit a pull request
License
MIT License - see LICENSE file for details
Support
- Issues: Report bugs and feature requests on GitHub
- API Documentation: OpenSubtitles API Docs
- MCP Protocol: Model Context Protocol Documentation