Server Control Guide
This guide explains how to start, stop, and manage the Ollama MCP Server.
Quick Start
Method 1: Using the Control Script (Recommended)
The easiest way to manage the server:
# Start the server
python server_control.py start
# Check server status
python server_control.py status
# Stop the server
python server_control.py stop
# Restart the server
python server_control.py restart
Method 2: Direct Execution
Run the server directly (blocks terminal):
# Using Poetry
py -m poetry run mcp-ollama-python
# Or directly with Python
python -m mcp_ollama_python
# Stop with Ctrl+C
Method 3: Programmatic Control
Control the server from Python code:
from mcp_ollama_python.main import run, stop
import threading
# Start server in background thread
server_thread = threading.Thread(target=run, daemon=True)
server_thread.start()
# ... do other work ...
# Stop the server
stop()
Server Lifecycle
Starting the Server
When you start the server, it will:
1. Initialize the Ollama client connection
2. Discover and load all tools from the /tools directory
3. Set up signal handlers for graceful shutdown
4. Start listening for MCP client connections via stdio
Output:
Starting Ollama MCP Server...
Press Ctrl+C to stop the server
Server started successfully!
Waiting for MCP client connections...
Stopping the Server
The server supports graceful shutdown through multiple methods:
Keyboard Interrupt (Ctrl+C): - Sends SIGINT signal - Server completes current operations - Closes Ollama client connections - Cleans up resources
Signal Termination: - SIGTERM signal for graceful shutdown - Used by the control script and system managers
Programmatic Stop:
- Call stop() function from Python
- Sets shutdown event to trigger cleanup
Server Status
Check if the server is running:
Output examples:
- ✓ Server is running (PID: 12345)
- ✗ Server is not running
Integration with Windsurf
The server works seamlessly with Windsurf using stdio protocol.
Windsurf Configuration:
Add to your Windsurf MCP settings (.windsurf/mcp_config.json):
{
"mcpServers": {
"ollama": {
"command": "py",
"args": ["-m", "poetry", "run", "mcp-ollama-python"],
"cwd": "C:\myCode/gitHub/mcp-ollama-python"
}
}
}
How it works: 1. Windsurf launches the server as a subprocess 2. Server communicates via stdin/stdout 3. Windsurf sends MCP protocol messages 4. Server responds with tool results 5. When Windsurf closes, server shuts down automatically
Troubleshooting
Server Won't Start
Check if already running:
Check Ollama connection:
Check for port conflicts: The server uses stdio, not ports, so this shouldn't be an issue.
Server Won't Stop
Force stop:
# Find the process
ps aux | grep mcp-ollama-python
# Kill it (replace PID)
kill -9 <PID>
# Or use the control script (includes force kill)
python server_control.py stop
Clean Up Stale PID File
If the control script reports a running server but it's not actually running:
Advanced Usage
Running as a Service
Linux (systemd):
Create /etc/systemd/system/mcp-ollama.service:
[Unit]
Description=Ollama MCP Server
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/mcp-ollama-python
ExecStart=/usr/bin/python3 -m mcp_ollama_python
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl enable mcp-ollama.service
sudo systemctl start mcp-ollama.service
sudo systemctl status mcp-ollama.service
Windows Service:
For Windows service installation, please use the separate d4-ollama-win-service project:
# See: https://github.com/pblagoje/d4-ollama-win-service
# This project provides scripts for running Ollama as a Windows service using NSSM
Custom Ollama Host
Set environment variable before starting:
# Linux/Mac
export OLLAMA_HOST="http://custom-host:11434"
python server_control.py start
# Windows
set OLLAMA_HOST=http://custom-host:11434
python server_control.py start
Logging
Redirect output to log file:
Server Signals
The server responds to the following signals:
- SIGINT (Ctrl+C): Graceful shutdown
- SIGTERM: Graceful shutdown (used by system managers)
- SIGKILL: Force kill (not graceful, use as last resort)
Exit Codes
0: Success1: Error or server not running130: Interrupted by user (Ctrl+C)
See Also
- Home - Main documentation
- Architecture - Server architecture details
- Available Tools - List of MCP tools