Connects to Sonatype Nexus Repository Manager 3 (OSS or Pro) through the standard REST API v1, exposing six read-only tools for querying Maven, Python, and Docker repositories. You get artifact search, version listing with pagination via continuation tokens, and Docker image/tag enumeration. Built on FastMCP with SSE transport by default, though it supports streamable-http as well. Authentication happens per-request through HTTP headers, so no hardcoded credentials in your config. Useful when you need an AI assistant to search for specific artifact versions, check what's published in your private registries, or answer questions about package availability without opening a browser.
English | 简体中文
MCP (Model Context Protocol) server for Sonatype Nexus Repository Manager 3 (OSS and Pro), enabling AI assistants to query Maven, Python (PyPI), and Docker repositories.
Supported Nexus versions:
This server uses the standard Nexus REST API v1 (/service/rest/v1), which is available in both OSS and Pro editions.
This MCP server provides 6 read-only tools for querying Nexus repositories:
| Tool | Description | Parameters |
|---|---|---|
search_maven_artifact | Search for Maven artifacts | group_id, artifact_id, version, repository |
get_maven_versions | Get all versions of a Maven artifact (paginated) | group_id, artifact_id, repository, page_size, continuation_token |
| Tool | Description | Parameters |
|---|---|---|
search_python_package | Search for Python packages | name, repository |
get_python_versions | Get all versions of a Python package (paginated) | package_name, repository, page_size, continuation_token |
| Tool | Description | Parameters |
|---|---|---|
list_docker_images | List all Docker images in a repository | repository |
get_docker_tags | Get all tags for a Docker image | repository, image_name |
Note: All tools are read-only and safe to use. No write operations (create/update/delete) are supported.
# Clone the repository
git clone https://github.com/your-org/nexus-mcp-server.git
cd nexus-mcp-server
# Create virtual environment
python -m venv venv
source venv/bin/activate # or venv/bin/activate.fish
# Install in development mode
pip install -e ".[dev]"
# Run the server (defaults to http://0.0.0.0:8000)
python -m nexus_mcp
# Quick start
docker run -p 8000:8000 addozhang/nexus-mcp-server:latest
# Or use docker-compose
docker-compose up
# See DOCKER.md for detailed deployment guide
For detailed deployment guide, see DOCKER.md.
The server can be configured using command line arguments or environment variables:
| Variable | CLI Argument | Description | Default |
|---|---|---|---|
NEXUS_MCP_HOST | --host | Host to bind to | 0.0.0.0 |
NEXUS_MCP_PORT | --port | Port to listen on | 8000 |
NEXUS_MCP_TRANSPORT | --transport | Transport mode (sse or streamable-http) | sse |
Priority: CLI arguments > Environment variables > Default values
Transport Modes:
sse (default) - Server-Sent Events transport, compatible with most MCP clientsstreamable-http - Streamable HTTP transport for clients that prefer this protocol# SSE mode (default)
python -m nexus_mcp
# Streamable-HTTP mode
python -m nexus_mcp --transport streamable-http
# Custom port
python -m nexus_mcp --port 9000
# Custom host and port
python -m nexus_mcp --host 127.0.0.1 --port 9000
# SSE mode (default)
docker run -p 8000:8000 addozhang/nexus-mcp-server:latest
# Streamable-HTTP mode
docker run -e NEXUS_MCP_TRANSPORT=streamable-http -p 8000:8000 addozhang/nexus-mcp-server:latest
# Custom port
docker run -e NEXUS_MCP_PORT=9000 -p 9000:9000 addozhang/nexus-mcp-server:latest
# Or use docker-compose
docker-compose up
# See DOCKER.md for detailed deployment guide
For detailed deployment guide, see DOCKER.md.
Credentials are passed as HTTP headers with each request:
| Header | Description | Example | Required |
|---|---|---|---|
X-Nexus-Url | Nexus instance URL | https://nexus.company.com | Yes |
X-Nexus-Username | Username | admin | Yes |
X-Nexus-Password | Password | secret123 | Yes |
X-Nexus-Verify-SSL | Verify SSL certificates | false | No (default: true) |
Note: Set X-Nexus-Verify-SSL: false when connecting to self-hosted Nexus instances with self-signed certificates.
Add to your Claude Desktop configuration (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"nexus": {
"url": "http://localhost:8000/mcp",
"headers": {
"X-Nexus-Url": "https://nexus.company.com",
"X-Nexus-Username": "admin",
"X-Nexus-Password": "secret123"
}
}
}
}
For self-signed certificates:
{
"mcpServers": {
"nexus": {
"url": "http://localhost:8000/mcp",
"headers": {
"X-Nexus-Url": "https://nexus.company.com",
"X-Nexus-Username": "admin",
"X-Nexus-Password": "secret123",
"X-Nexus-Verify-SSL": "false"
}
}
}
}
For other MCP clients that support HTTP transport:
{
"url": "http://localhost:8000/mcp",
"headers": {
"X-Nexus-Url": "https://nexus.company.com",
"X-Nexus-Username": "your-username",
"X-Nexus-Password": "your-password"
}
}
| Tool | Description | Parameters |
|---|---|---|
search_maven_artifact | Search Maven repositories | group_id, artifact_id, version, repository |
get_maven_versions | Get versions of an artifact (paginated) | group_id, artifact_id, repository, page_size (default 50), continuation_token |
Pagination example:
# First page
response = get_maven_versions("com.example", "myapp")
# response contains: versions, hasMore, continuationToken (if hasMore is true)
# Next page
if response["hasMore"]:
next_response = get_maven_versions(
"com.example",
"myapp",
continuation_token=response["continuationToken"]
)
| Tool | Description | Parameters |
|---|---|---|
search_python_package | Search Python packages | name, repository |
get_python_versions | Get versions of a package (paginated) | package_name, repository, page_size (default 50), continuation_token |
Pagination: Same pattern as Maven - check hasMore and use continuationToken for subsequent pages.
| Tool | Description | Parameters |
|---|---|---|
list_docker_images | List images in a repository | repository |
get_docker_tags | Get tags for an image | repository, image_name |
pytest tests/ -v
mypy src/
ruff check src/ tests/
nexus-mcp-server/
├── specs/ # Requirements documents
│ ├── authentication.md
│ ├── maven-support.md
│ ├── python-support.md
│ ├── docker-support.md
│ ├── mcp-architecture.md
│ └── http-streaming.md
├── src/nexus_mcp/ # Source code
│ ├── __init__.py # Package init with version
│ ├── __main__.py # CLI entry point
│ ├── server.py # FastMCP server with tools
│ ├── nexus_client.py # Nexus REST API client
│ ├── auth.py # Authentication types
│ ├── dependencies.py # Credential extraction from headers
│ └── tools/ # Tool implementations
│ ├── __init__.py
│ └── implementations.py
├── tests/ # Test suite
│ ├── conftest.py # Fixtures and sample data
│ ├── test_nexus_client.py # Client unit tests
│ ├── test_tools.py # Tool integration tests
│ └── test_http_transport.py # HTTP transport tests
├── AGENTS.md # Operational guide
├── IMPLEMENTATION_PLAN.md # Task tracking
└── pyproject.toml # Python project metadata
python -m nexus_mcp)X-Nexus-Url header is correct and accessibleX-Nexus-Username and X-Nexus-Password headers are correctX-Nexus-Url, X-Nexus-Username, X-Nexus-PasswordConnection timeout with streamable-http:
python -m nexus_mcp --transport sseTools not appearing:
MIT
Contributions welcome! Please run tests and linting before submitting PRs.
NEXUS_BASE_URL*Base URL of your Nexus Repository Manager instance (e.g., https://nexus.example.com)
NEXUS_USERNAMENexus username for authentication
NEXUS_PASSWORDsecretNexus password or token for authentication
silenceper/mcp-k8s
azure/containerization-assist
io.github.evozim/aws-builder
reza-gholizade/k8s-mcp-server
flux159/mcp-server-kubernetes