Skip to main content
Glama
exrienz
by exrienz
README.md
# πŸš€ MCPO - MCP Pollinations Proxy

A Docker-containerized MCP (Model Context Protocol) proxy that combines **mcpo** CLI tool with **Pollinations MCP** server, providing AI image, text, audio, and vision generation capabilities through standard REST endpoints.

## 🌟 Features

### 🎨 Multimodal AI Capabilities
- **Image Generation**: Create stunning images from text prompts with 1024x1024 default resolution
- **Image-to-Image**: Transform existing images using text descriptions  
- **Vision Analysis**: Analyze, describe, compare images and extract text (OCR)
- **Text Generation**: Simple and advanced text generation with system prompts
- **Text-to-Speech**: Convert text to speech with multiple voice options
- **Audio Generation**: Create contextual audio responses

### πŸ”§ Technical Features
- **OpenAPI REST Endpoints**: Standard HTTP/REST interface for all MCP capabilities
- **Docker Containerized**: Easy deployment and consistent environment
- **Real-time Processing**: Direct API integration with Pollinations services
- **Multiple Model Support**: Access various AI models for different tasks

## πŸš€ Quick Start

### Prerequisites
- Docker and Docker Compose
- Port 7777 available

### Installation & Usage

1. **Clone the repository**
   ```bash
   git clone <repository-url>
   cd mcpo
   ```

2. **Build and run the container**
   ```bash
   docker-compose build
   docker-compose up
   ```

3. **Access the service**
   - Service runs on: `http://localhost:7777`
   - OpenAPI docs: `http://localhost:7777/docs`
   - API endpoints: `http://localhost:7777/api/...`

### Development Commands

```bash
# Build the container
docker-compose build

# Run in detached mode
docker-compose up -d

# View logs
docker-compose logs

# Stop the service
docker-compose down
```

## 🎯 API Endpoints

The service exposes Pollinations MCP server functionality through REST endpoints:

### πŸ–ΌοΈ Image Generation
- `POST /api/generateImage` - Generate image from text prompt
- `POST /api/generateImageUrl` - Get image generation URL
- `POST /api/generateImageToImage` - Transform image with text prompt
- `GET /api/listImageModels` - List available image models

### πŸ“ Text Generation  
- `POST /api/generateText` - Simple text generation
- `POST /api/generateAdvancedText` - Advanced text with system prompts
- `GET /api/listTextModels` - List available text models

### πŸ‘οΈ Vision & Analysis
- `POST /api/analyzeImageFromUrl` - Analyze image from URL
- `POST /api/analyzeImageFromData` - Analyze base64 image data
- `POST /api/compareImages` - Compare two images
- `POST /api/extractTextFromImage` - OCR text extraction

### 🎡 Audio Generation
- `POST /api/sayText` - Text-to-speech conversion
- `POST /api/respondAudio` - Generate contextual audio responses
- `GET /api/listAudioVoices` - List available voices

## πŸ—οΈ Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Client App    │───▢│  MCPO Proxy  │───▢│  Pollinations API   β”‚
β”‚   (HTTP/REST)   β”‚    β”‚  (Port 7777) β”‚    β”‚  (MCP Protocol)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### Container Stack
- **Base**: Node.js 18 Alpine Linux  
- **Python**: Installed for mcpo CLI tool
- **Port**: 7777 exposed for HTTP access
- **Host**: Configured to bind to 0.0.0.0

### Service Flow
1. Container starts with `mcpo` CLI tool
2. `mcpo` proxies the `pollinations-model-context-protocol` MCP server
3. MCP server capabilities become available via OpenAPI endpoints
4. External applications use standard HTTP/REST calls

## πŸ“ Project Structure

```
mcpo/
β”œβ”€β”€ docker-compose.yml          # Docker compose configuration
β”œβ”€β”€ Dockerfile                  # Container definition
β”œβ”€β”€ CLAUDE.md                   # Development instructions
β”œβ”€β”€ pollinations-mcp-src/       # MCP server source code
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”‚   β”œβ”€β”€ imageService.js     # Image generation & transformation
β”‚   β”‚   β”‚   β”œβ”€β”€ textService.js      # Text generation (simple & advanced)
β”‚   β”‚   β”‚   β”œβ”€β”€ audioService.js     # Text-to-speech & audio
β”‚   β”‚   β”‚   β”œβ”€β”€ visionService.js    # Image analysis & OCR
β”‚   β”‚   β”‚   β”œβ”€β”€ authService.js      # Authentication
β”‚   β”‚   β”‚   └── resourceService.js  # Resource management
β”‚   β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”‚   β”œβ”€β”€ coreUtils.js        # Core utilities
β”‚   β”‚   β”‚   β”œβ”€β”€ polyfills.js        # Node.js polyfills
β”‚   β”‚   β”‚   └── schemaUtils.js      # Schema validation
β”‚   β”‚   └── index.js                # Main MCP server
β”‚   └── pollinations-mcp.js         # Entry point
└── README.md                    # This file
```

## πŸ”§ Configuration

### Default Settings
- **Image Resolution**: 1024x1024 pixels
- **Image Quality**: Private=true, NoLogo=true, Enhance=true
- **Text Generation**: OpenAI-compatible models
- **Audio Format**: MP3 with Alloy voice
- **Vision Models**: GPT-4o for image analysis

### Environment Variables
The container automatically configures the MCP proxy without additional environment variables needed.

## 🎨 Usage Examples

### Image Generation
```bash
curl -X POST http://localhost:7777/api/generateImage \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A serene mountain landscape at sunset",
    "options": {
      "width": 1024,
      "height": 1024,
      "model": "flux"
    }
  }'
```

### Vision Analysis
```bash
curl -X POST http://localhost:7777/api/analyzeImageFromUrl \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/image.jpg",
    "prompt": "What do you see in this image?"
  }'
```

### Text-to-Speech
```bash
curl -X POST http://localhost:7777/api/sayText \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello, this is a test of text to speech",
    "voice": "alloy",
    "format": "mp3"
  }'
```

## 🀝 Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## πŸ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## πŸ™ Acknowledgments

- [Pollinations.AI](https://pollinations.ai) for the amazing AI APIs
- [Model Context Protocol](https://github.com/modelcontextprotocol) for the MCP standard
- [mcpo](https://github.com/mcpo-tools/mcpo) CLI tool for MCP to OpenAPI conversion

## πŸ”— Links

- [Pollinations API Documentation](https://github.com/pollinations/pollinations/blob/master/APIDOCS.md)
- [Docker Hub](https://hub.docker.com/)
- [Model Context Protocol](https://modelcontextprotocol.io/)

---

**Built with ❀️ using Docker, Node.js, and Python**

Maintenance

ActivityInactive
ResponsivenessNo issues