aj-geddes/sailor
If you are the rightful owner of sailor and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Sailor is a Model Context Protocol (MCP) server designed to generate and render Mermaid diagrams through a web interface or integration with Claude Desktop.
๐งโโ๏ธ Sailor - Mermaid Diagram Generator
Get a picture of your Mermaid! ๐จ
Sailor combines a beautiful web interface with an MCP (Model Context Protocol) server for generating and rendering Mermaid diagrams. Use the web UI for interactive diagram creation, or integrate with Claude Desktop for AI-powered diagram generation through natural language.
โจ Features
๐ Web Interface
- ๐จ AI-Powered Generation: Generate diagrams using OpenAI or Anthropic APIs
- ๐ Live Preview: Real-time rendering with syntax highlighting
- ๐ Copy Functions: Copy both code and rendered images
- ๐ฏ Style Controls: Theme and appearance customization
- โ API Key Validation: Instant feedback on key validity
๐ค MCP Server
- ๐ All Mermaid Diagram Types: Flowcharts, sequence, gantt, class, state, ER, pie, mindmap, journey, timeline
- ๐จ Multiple Themes: Default, dark, forest, neutral
- โ๏ธ Hand-drawn Look: Optional sketch-style rendering
- ๐ผ๏ธ Flexible Output: PNG with transparent background support
- ๐ค LLM Integration: Works with Claude Desktop via MCP
- ๐ณ Fully Containerized: No dependencies needed except Docker
๐ Quick Start
Choose your preferred way to use Sailor:
Option A: Web Interface ๐
- Clone and Setup:
git clone https://github.com/aj-geddes/sailor.git
cd sailor
- Configure Environment (backend folder):
cd backend
cp .env.example .env
# Edit .env with your API keys
- Run with Docker:
docker-compose up -d
- Access: Open http://localhost:5000
Option B: Claude Desktop Integration ๐ค
Prerequisites: Docker Desktop + Claude Desktop
- Clone and Build:
git clone https://github.com/aj-geddes/sailor.git
cd sailor
docker build -f Dockerfile.mcp-stdio -t sailor-mcp .
- Configure Claude Desktop:
Add the following to your Claude Desktop configuration file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"sailor-mermaid": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"C:\\Users\\YourName\\Pictures:/output",
"sailor-mcp"
]
}
}
}
Note: Replace C:\\Users\\YourName\\Pictures
with your desired output directory.
4. Restart Claude Desktop
Completely close and reopen Claude Desktop to load the new configuration.
๐ Usage
๐ Web Interface
- Enter API Key: Provide your OpenAI or Anthropic API key
- Describe Your Diagram: Enter a natural language description
- Generate: Click "Generate Diagram" to create Mermaid code
- Customize: Use style controls to adjust appearance
- Export: Copy the code or image with the copy buttons
๐ค Claude Desktop Integration
Once configured, you can use natural language commands in Claude Desktop:
- "Use sailor-mermaid to create a flowchart showing a login process"
- "Generate a sequence diagram with sailor-mermaid showing API calls"
- "Create a Gantt chart for a project timeline using sailor-mermaid"
- "Show me examples of Mermaid diagrams with sailor-mermaid"
Images are automatically saved to your configured output directory.
๐ ๏ธ Available Tools
1. request_mermaid_generation
Request AI to generate Mermaid diagram code based on your description.
2. validate_and_render_mermaid
Validate and render existing Mermaid code as an image.
3. get_mermaid_examples
Get examples of different Mermaid diagram types.
๐จ Styling Options
- Themes:
default
,dark
,forest
,neutral
- Look:
classic
,handDrawn
- Background:
transparent
,white
- Direction:
TB
(top-bottom),LR
(left-right),BT
,RL
๐ Project Structure
sailor/
โโโ backend/ # Web UI Flask application
โ โโโ app.py # Main Flask server
โ โโโ static/ # Frontend files (HTML/CSS/JS)
โ โโโ requirements.txt # Web UI dependencies
โ โโโ .env.example # Environment template
โโโ src/
โ โโโ sailor_mcp/ # MCP server implementation
โ โโโ server.py # Main MCP server
โ โโโ stdio_wrapper.py # Claude Desktop communication
โ โโโ renderer.py # Mermaid rendering engine
โ โโโ validators.py # Syntax validation
โ โโโ prompts.py # AI prompt templates
โโโ tests/ # Comprehensive test suite
โโโ Dockerfile.mcp-stdio # MCP server container
โโโ docker-compose.yml # Multi-service setup
โโโ setup.py # Python package setup
โโโ requirements.txt # MCP dependencies
๐งช Development
Web UI Development
# Setup environment
cd backend
cp .env.example .env
# Edit .env with your API keys
# Install dependencies
pip install -r requirements.txt
# Run Flask development server
python app.py
# Access at http://localhost:5000
MCP Server Development
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -e .
# Install Playwright browsers
playwright install chromium
# Run tests
pytest
# Run MCP server directly
python -m sailor_mcp.stdio_wrapper
Full Stack Development
# Run everything with Docker Compose
docker-compose up --build
# Web UI: http://localhost:5000
# MCP Server: Available for Claude Desktop integration
๐ Troubleshooting
Server Not Appearing in Claude Desktop
- Ensure Docker Desktop is running
- Check the image exists:
docker images | grep sailor-mcp
- Verify config file location and JSON syntax
- Restart Claude Desktop completely
Connection Issues
Test the server manually:
docker run -i --rm sailor-mcp
View Logs
Check Docker logs:
docker logs $(docker ps -a | grep sailor-mcp | awk '{print $1}')
๐ License
MIT License - see file for details.
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
๐ Acknowledgments
- Built with MCP (Model Context Protocol)
- Powered by Mermaid.js for diagram rendering
- Uses Playwright for headless rendering
Made with โค๏ธ for Claude Desktop users