README.md•4.56 kB
# Taboola API MCP Server
A flexible MCP (Model Context Protocol) server with fetchRecommendations functionality.
Supports both local (STDIO) and remote (HTTP) deployment modes.
## Setup
1. Install dependencies:
```bash
pip install -r requirements.txt
```
2. Activate virtual environment (if using one):
```bash
source .venv/bin/activate
```
## Deployment Options
### Local Mode (STDIO Transport)
Perfect for local development and testing with MCP Inspector:
```bash
# Default mode - runs locally with STDIO transport
python server.py
# Explicitly specify local mode
python server.py --mode local
```
### Remote Mode (HTTP Server)
Deploy as a remote HTTP server accessible over the network:
```bash
# Run as HTTP server on default port 8000
python server.py --mode remote
# Specify custom host and port
python server.py --mode remote --host 0.0.0.0 --port 3000
# Using environment variables
export MCP_MODE=remote
export MCP_HOST=0.0.0.0
export MCP_PORT=8000
python server.py
```
## Configuration Options
### Command Line Arguments
- `--mode`: Server mode (`local` or `remote`) - default: `local`
- `--host`: Host to bind to in remote mode - default: `0.0.0.0`
- `--port`: Port to bind to in remote mode - default: `8000`
### Environment Variables
- `MCP_MODE`: Server mode (`local` or `remote`)
- `MCP_HOST`: Host to bind to in remote mode
- `MCP_PORT`: Port to bind to in remote mode
Environment variables override command line arguments.
## Functions
### fetchRecommendations
Fetches recommendations for a given publisher using their API key via Taboola API.
**Parameters:**
- `publisher_name` (str): The name of the publisher
- `api_key` (str): The API key for authentication
**Returns:**
- `str`: JSON recommendations data from Taboola API
## Usage Examples
### Local Development with MCP Inspector
```bash
# Start server locally
python server.py
# In another terminal, run MCP Inspector
npx @modelcontextprotocol/inspector python server.py
```
### Remote Deployment
```bash
# Deploy as remote server
python server.py --mode remote --port 8000
# Server will be available at: http://your-server-ip:8000
# Connect using HTTP transport with MCP clients
```
### Production Deployment
For production, consider using environment variables:
```bash
export MCP_MODE=remote
export MCP_HOST=0.0.0.0
export MCP_PORT=8000
python server.py
```
Or with a process manager like PM2:
```bash
pm2 start server.py --name "taboola-mcp" -- --mode remote --port 8000
```
## Testing
Use the provided test script to verify functionality:
```bash
# Edit test_function.py with your credentials
python test_function.py
```
## Cloud Deployment
### Render Deployment
Deploy easily on Render cloud platform:
#### Option 1: Using Render.yaml (Recommended)
1. **Push your code to GitHub/GitLab**
2. **Connect to Render:**
- Go to [Render Dashboard](https://render.com/)
- Click "New" > "Blueprint"
- Connect your repository
- The `render.yaml` file will be automatically detected
3. **Deploy:**
- Render will automatically build and deploy your MCP server
- Your server will be available at: `https://your-app-name.onrender.com`
#### Option 2: Manual Render Setup
1. **Create a new Web Service on Render**
2. **Connect your repository**
3. **Configure the service:**
- **Build Command:** `pip install -r requirements.txt`
- **Start Command:** `python server.py --mode remote --host 0.0.0.0 --port $PORT`
- **Environment Variables:**
- `MCP_MODE=remote`
- `MCP_HOST=0.0.0.0`
- `PYTHON_VERSION=3.13.0`
4. **Deploy and get your URL**
### Docker Deployment
For any Docker-compatible platform:
```bash
# Build and run locally
docker build -t taboola-mcp-server .
docker run -p 8000:8000 taboola-mcp-server
# Or use docker-compose
docker-compose up -d
```
### Other Cloud Platforms
The server is compatible with:
- **Heroku**: Use `Procfile` with `web: python server.py --mode remote --port $PORT`
- **Railway**: Deploy directly from GitHub with automatic detection
- **DigitalOcean App Platform**: Use the provided `docker-compose.yml`
- **AWS/GCP/Azure**: Deploy using Docker or direct Python deployment
## Security Notes
- In remote mode, the server binds to `0.0.0.0` by default (all interfaces)
- Consider using a reverse proxy (nginx, Apache) for production deployments
- Ensure proper firewall rules are in place for remote access
- API keys are passed as parameters - ensure secure transmission (HTTPS recommended)
- Cloud platforms like Render automatically provide HTTPS endpoints