A Model Context Protocol (MCP) server for removing backgrounds from images using AI-powered segmentation models.
- Background Removal: Remove backgrounds from images using AI-powered segmentation
- Multiple model options optimized for different image types
- Outputs PNG with full alpha transparency
- Fast flood-fill algorithm for simple backgrounds (optional)
- Model Catalog: Access comprehensive information about all available background removal models
| Model | Size | Best For | Quality |
|---|---|---|---|
u2net |
176MB | General purpose (default) | Good |
u2netp |
4MB | Lightweight/mobile | Moderate |
silueta |
43MB | General, smaller footprint | Good |
isnet-general-use |
176MB | General, newer | Very Good |
isnet-anime |
176MB | Anime/illustrations | Excellent for art |
birefnet-general |
400MB | Best quality | Excellent |
birefnet-general-lite |
100MB | Balanced | Very Good |
sam |
400MB | Segment Anything | Excellent |
# Install directly from the repository
pipx install git+https://github.com/your-username/MCP-remove-background.git
# Or install from local directory
cd MCP-remove-background
pipx install .
# Run the server
mcp-remove-background# Clone the repository
git clone <repository-url>
cd MCP-remove-background
# Install dependencies with Poetry
just setup
# Run the server
poetry run mcp-remove-background
# Or
poetry run python -m MCP_remove_background.server# Install from the repository
pip install git+https://github.com/your-username/MCP-remove-background.git
# Or install from local directory
pip install .
# Run the server
mcp-remove-background# If installed with pipx or pip
mcp-remove-background
# If using Poetry (development)
poetry run mcp-remove-background
# Alternative: run as Python module
poetry run python -m MCP_remove_background.server
# With FastMCP CLI (more options)
poetry run fastmcp run MCP_remove_background/server.py --transport http --port 8000When using the fastmcp run command, you have additional options:
| Option | Description |
|---|---|
--transport, -t |
Transport protocol: stdio (default), http, sse, streamable-http |
--host |
Host to bind to (default: 127.0.0.1) |
--port, -p |
Port for HTTP/SSE transport (default: 8000) |
--log-level, -l |
Log level: DEBUG, INFO, WARNING, ERROR, CRITICAL |
--no-banner |
Don't show the server banner |
To use this MCP server with an AI agent, add the following configuration to your MCP client.
If you installed with pipx, add to your Claude Desktop configuration file (~/.config/claude/claude_desktop_config.json on Linux, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"remove-background": {
"command": "mcp-remove-background"
}
}
}If you're using Poetry for development:
{
"mcpServers": {
"remove-background": {
"command": "poetry",
"args": ["run", "mcp-remove-background"],
"cwd": "/path/to/MCP-remove-background"
}
}
}Add to your VS Code settings or Cline MCP configuration:
{
"mcpServers": {
"remove-background": {
"command": "mcp-remove-background"
}
}
}For pipx/pip installation:
{
"remove-background": {
"command": "mcp-remove-background"
}
}For Poetry installation:
{
"remove-background": {
"command": "poetry",
"args": ["run", "mcp-remove-background"],
"cwd": "/path/to/MCP-remove-background"
}
}Configuration Options:
| Field | Description |
|---|---|
command |
The command to run (poetry for Poetry-managed projects) |
args |
Command arguments to start the MCP server |
cwd |
Working directory - set to your MCP-remove-background installation path |
Important: Replace /path/to/MCP-remove-background with the actual path to your installation.
Remove the background from an image, replacing it with transparency.
Parameters:
image_path(required): Path to the image file to processoutput_path(optional): Path for the output PNG file (auto-generated if not specified)model(optional): Background removal model (default: "u2net")alpha_matting(optional): Enable alpha matting for smoother edges (default: false)try_floodfill_first(optional): Try fast flood-fill before ML (default: true)
Returns:
success: Whether background removal succeededinput_path: Path to the input fileoutput_path: Path to the output PNG file with transparencyfile_size_bytes: Size of the output file in bytesmethod_used: "floodfill" or model namemodel_used: The model that was configurederror: Error message if removal failed
Example:
result = await remove_background(
image_path="/path/to/image.png",
model="isnet-anime"
)
if result["success"]:
print(f"Transparent image saved to: {result['output_path']}")List all available background removal models with their descriptions.
Parameters: None
Returns:
models: List of available models with id, name, description, and sizetotal_count: Number of available modelsdefault_model: The default model used when not specifiedusage_hint: How to use the model parameter
Example Response:
{
"models": [
{
"id": "u2net",
"name": "U2-Net",
"description": "General purpose background removal model",
"size": "176MB"
},
...
],
"total_count": 8,
"default_model": "u2net",
"usage_hint": "Pass model='model_id' to remove_background tool"
}# Initialize the development environment
just setup# Run all tests with coverage
just test
# Run specific test file
poetry run pytest tests/unit/test_constants.py -v# Run formatting
just format
# Run all pre-commit hooks (includes formatting, linting, type-checking)
just validate
# Run type checking only
just typecheck# Build wheel package
just package
# Test the built package
just test-package
# Clean build artifacts
just clean| Command | Description |
|---|---|
just setup |
Initialize development environment (Poetry deps + pre-commit hooks) |
just test |
Run unit tests with coverage report |
just typecheck |
Run static type checking with pyright |
just format |
Run formatting hooks (ruff, etc.) |
just validate |
Run all pre-commit hooks on all files |
just package |
Build wheel package into dist/ |
just test-package |
Build, install, and smoke-test the package |
just clean |
Clean build artifacts and temporary files |
just recreate-venv |
Recreate virtual environment with specific Python version |
just serve-http |
Run MCP server with HTTP transport (shared mode) |
just mcp-status |
Check if MCP HTTP server is running |
MCP-remove-background/
├── MCP_remove_background/
│ ├── __init__.py # Package exports
│ ├── cli.py # CLI entry point
│ ├── config.py # Configuration management
│ ├── constants.py # Constants and type definitions
│ ├── exceptions.py # Custom exceptions
│ ├── server.py # FastMCP server definition
│ ├── services/
│ │ └── background_remover.py # Core background removal logic
│ ├── tools/
│ │ └── remove_background.py # MCP tool definitions
│ └── utils/
│ └── file_utils.py # File handling utilities
├── tests/
│ ├── conftest.py # Pytest fixtures
│ ├── pytest.ini
│ ├── unit/
│ │ ├── test_constants.py
│ │ ├── test_exceptions.py
│ │ ├── test_background_remover.py
│ │ └── test_tools.py
│ ├── integration/
│ │ └── test_server.py
│ └── mocks/
│ └── rembg_mock.py
├── docs/
│ └── background-removal-mcp-plan.md
├── scripts/
│ ├── spack-ensure.sh
│ └── test-package.sh
├── pyproject.toml
├── justfile
├── README.md
└── spack.yaml
This project uses Spack to manage system-level dependencies (like the Python interpreter). Spack is automatically installed to ~/.local/share/spack if not already available.
To manually activate the Spack environment:
source .spack-activate.shTo update Spack packages:
spack -e . concretize --fresh-roots --force
spack -e . installMIT License