Nexus MCP Server
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.
Features
- HTTP streaming transport - Modern SSE-based transport with header authentication
- Per-request authentication - Credentials passed via HTTP headers (no hardcoded secrets)
- Maven support - Search artifacts, list versions, get metadata
- Python support - Search packages, list versions, get metadata
- Docker support - List images, get tags, image metadata
- FastMCP framework - Fast, modern Python implementation
Compatibility
Supported Nexus versions:
- ✅ Nexus Repository Manager 3.x OSS (Open Source)
- ✅ Nexus Repository Manager 3.x Pro
This server uses the standard Nexus REST API v1 (/service/rest/v1), which is available in both OSS and Pro editions.
Available Tools
This MCP server provides 6 read-only tools for querying Nexus repositories:
📦 Maven Tools
| 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 |
🐍 Python/PyPI Tools
| 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 |
🐳 Docker Tools
| 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.
Installation
From Source
# 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
Using Docker
# 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.
Configuration
Server Configuration
The server can be configured using environment variables:
| Variable | Description | Default |
|---|---|---|
NEXUS_MCP_HOST |
Host to bind to | 0.0.0.0 |
NEXUS_MCP_PORT |
Port to listen on | 8000 |
Authentication via HTTP Headers
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.
MCP Client Configuration (Claude Desktop)
Add to your Claude Desktop configuration (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"nexus": {
"url": "http://localhost:8000/sse",
"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/sse",
"headers": {
"X-Nexus-Url": "https://nexus.company.com",
"X-Nexus-Username": "admin",
"X-Nexus-Password": "secret123",
"X-Nexus-Verify-SSL": "false"
}
}
}
}
MCP Client Configuration (Other Clients)
For other MCP clients that support HTTP transport:
{
"url": "http://localhost:8000/sse",
"headers": {
"X-Nexus-Url": "https://nexus.company.com",
"X-Nexus-Username": "your-username",
"X-Nexus-Password": "your-password"
}
}
MCP Tools
Maven Tools
| 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"]
)
Python Tools
| 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.
Docker Tools
| Tool | Description | Parameters |
|---|---|---|
list_docker_images |
List images in a repository | repository |
get_docker_tags |
Get tags for an image | repository, image_name |
Development
Running Tests
pytest tests/ -v
Type Checking
mypy src/
Linting
ruff check src/ tests/
Project Structure
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
Troubleshooting
Connection Errors
- Verify the MCP server is running (
python -m nexus_mcp) - Check that port 8000 is accessible
- Verify
X-Nexus-Urlheader is correct and accessible - Check network connectivity to your Nexus instance
- Ensure HTTPS certificates are valid (or use HTTP for local instances)
Authentication Errors
- Verify
X-Nexus-UsernameandX-Nexus-Passwordheaders are correct - Ensure the user has read permissions on the repositories
- Check if the Nexus instance requires specific authentication methods
Missing Credentials Error
- Ensure all three headers are set:
X-Nexus-Url,X-Nexus-Username,X-Nexus-Password - Check that your MCP client supports HTTP headers
Empty Results
- Verify the repository name is correct
- Check that the package/artifact exists in Nexus
- For Python packages, try both hyphen and underscore naming
License
MIT
Contributing
Contributions welcome! Please run tests and linting before submitting PRs.
Metadata
Release files for nexus-mcp-server 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| nexus_mcp_server-0.1.1.tar.gz | 39.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nexus_mcp_server-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 53.7 kB
Release files / nexus_mcp_server-0.1.1.tar.gz
| Download URL | nexus_mcp_server-0.1.1.tar.gz |
|---|---|
| Size | 39.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2bbfa65e055c8f29c92adfd0ea0e792a110203036c1ee400bcc32e34adb26be8
|
|
BLAKE2b-256 checksum How to use checksums |
c8c88a5e5557572786895313d150644a9476b19a84cc37b94c623527554237b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / nexus_mcp_server-0.1.1-py3-none-any.whl
| Download URL | nexus_mcp_server-0.1.1-py3-none-any.whl |
|---|---|
| Size | 14.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1062331a4509095bf840c94e6388e4b60bc2cd111efd1f38fde5e8bbaf3ba130
|
|
BLAKE2b-256 checksum How to use checksums |
9bd63b8cbb3d4d35a1274a9effe39919b62ccfc9b727935dab6434bd516974ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for nexus-mcp-server 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.