Skip to main content

A FastMCP-based MCP server for DevOps

Project description

DevOps MCP Server

A FastMCP-based MCP server providing DevOps tools and integrations.

This a conservative MCP server. It does not add, update or delete anything in your system, does not run any job. Basically, it is read-only. It only retrieves data for analysis, display the information.

So it is safe for DevOps.

Features

GitHub Integration

  • Repository search and management
  • File content retrieval from repositories
  • Issue tracking and management
  • Code search functionality
  • Commit history viewing

Jenkins Integration

  • Job listing and management
  • Build log retrieval
  • View management
  • Build parameter inspection
  • Recent failed builds monitoring

Installation

To install the package, use the following command:

pip install devops-mcps

Usage

Run the MCP server:

devops-mcps

Configuration

Environment Variables

GitHub Configuration

Set the required environment variable for GitHub API access:

export GITHUB_PERSONAL_ACCESS_TOKEN=your_token_here

Jenkins Configuration

Set the required environment variables for Jenkins API access:

export JENKINS_URL=your_jenkins_url
export JENKINS_USER=your_jenkins_username
export JENKINS_TOKEN=your_jenkins_token
export LOG_LENGTH=5120

Note: LOG_LENGTH means it will retrieve this length of jenkins log for analysis. It does not always the longer the better.

UVX Configuration

Install UVX tools:

uvx install

Run with UVX:

uvx devops-mcps

Transport Configuration

The MCP server supports two transport types:

  • stdio (default): Standard input/output communication
  • sse: Server-Sent Events for HTTP-based communication

Local Usage

# Default stdio transport
devops-mcps

# SSE transport
devops-mcps --transport sse

UVX Usage

# Default stdio transport
uvx run devops-mcps

# SSE transport
uvx run devops-mcps-sse

Docker Configuration

Build the Docker image:

docker build -t devops-mcps .

Run the container:

docker run -p 8000:8000 devops-mcps

GitHub Public and Enterprise Support

This project supports both public GitHub and GitHub Enterprise automatically.

  • By default, it connects to public GitHub (https://api.github.com).
  • To use with GitHub Enterprise, set the GITHUB_API_URL environment variable to your enterprise API endpoint (e.g., https://github.mycompany.com/api/v3).

Example:

# For public GitHub (default)
export GITHUB_PERSONAL_ACCESS_TOKEN=your_token_here

# For GitHub Enterprise
export GITHUB_PERSONAL_ACCESS_TOKEN=your_token_here
export GITHUB_API_URL=https://github.mycompany.com

The server will detect the correct API endpoint at runtime.

VSCode Configuration

To use this MCP server in vs code copilot, there are 2 ways to configure it in VSCode settings.json with different transport types:

UVX Configuration

stdio Transport (default)

"devops-mcps": {
  "type": "stdio",
  "command": "uvx",
  "args": ["devops-mcps"],
  "env": {
    "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxCe",
    "GITHUB_API_URL": "https://github.mycompany.com",
    "JENKINS_URL": "jenkins_url_here",
    "JENKINS_USER": "jenkins_username_here",
    "JENKINS_TOKEN": "jenkins_password_here"
  }
}

SSE Transport

"devops-mcps": {
  "type": "sse",
  "command": "uvx",
  "args": ["devops-mcps-sse"],
  "env": {
    "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxCe",
    "GITHUB_API_URL": "https://github.mycompany.com",
    "JENKINS_URL": "jenkins_url_here",
    "JENKINS_USER": "jenkins_username_here",
    "JENKINS_TOKEN": "jenkins_password_here"
  }
}

Docker Configuration

stdio Transport (default)

"devops-mcps": {
  "command": "docker",
  "args": [
    "run",
    "-i",
    "huangjien/devops-mcps:latest"
  ],
  "env": {
    "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxx2Ce",
    "GITHUB_API_URL": "https://github.mycompany.com",
    "JENKINS_URL": "jenkins_url_here",
    "JENKINS_USER": "jenkins_username_here",
    "JENKINS_TOKEN": "jenkins_password_here"
  }
}

SSE Transport (MCP Server Deployed in Remote Docker Container)

"devops-mcps": {
  "type": "sse",
  "url": "http://[remote ip address]:8000/sse",
  "env": {
    "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxx2Ce",
    "GITHUB_API_URL": "https://github.mycompany.com",
    "JENKINS_URL": "jenkins_url_here",
    "JENKINS_USER": "jenkins_username_here",
    "JENKINS_TOKEN": "jenkins_password_here"
  }
}

Note: The docker should start like:

docker run -p 8000:8000 -e TRANSPORT_TYPE=sse -i huangjien/devops-mcps:latest

Development

Install development dependencies:

uv pip install -e .[dev]

or

uv sync

Recommend to install vs code extension: ruff

Or do it in command line:

To lint (check):

uvx ruff check

To format:

uvx ruff format

Run mcp inspector to test or debug:

npx @modelcontextprotocol/inspector uv run devops-mcps

Test and Coverage

pytest --cov=src/devops_mcps --cov-report=html tests/

CI/CD Pipeline

GitHub Actions workflow will automatically:

  1. Build and publish Python package to PyPI
  2. Build and push Docker image to Docker Hub

Required Secrets

Set these secrets in your GitHub repository:

  • PYPI_API_TOKEN: Your PyPI API token
  • DOCKER_HUB_USERNAME: Your Docker Hub username
  • DOCKER_HUB_TOKEN: Your Docker Hub access token

Workflow triggers on push to main branch.

Packaging and Publishing

Install tools

pip install -U twine build  

Build the package

python -m build

Upload to PyPI

  1. Create a ~/.pypirc file with your API token:

    [pypi]
    username = __token__
    password = your_pypi_api_token_here
    
  2. Upload the package:

    twine upload dist/*
    

Important Notes

  • Ensure all classifiers in pyproject.toml are valid PyPI classifiers
  • Remove deprecated license classifiers in favor of SPDX license expressions
  • The package will be available at: https://pypi.org/project/devops-mcps/
  • Update the version everytime, or when you push, it will show an error: already exists.

License

MIT

Appendix (Query in Github)

For Repository Search (gh_search_repositories):

  • in:: Search only in specific fields (name, description, readme, or combinations). query="fastapi in:name" (Find repos with "fastapi" in their name) query="web framework in:readme,description"

  • user: or org:: Search within a specific user's or organization's repositories. query="user:tiangolo fastapi"

  • language:: Filter by programming language. query="http client language:python"

  • stars:, forks:: Filter by number of stars or forks (use ranges like >100, <50, 10..50). query="language:javascript stars:>1000"

  • created:, pushed:: Filter by creation or last push date (use ranges). query="data science pushed:>2024-03-01"

  • topic:: Filter by repository topic. query="topic:docker topic:python"

  • license:: Filter by license (e.g., mit, apache-2.0). query="language:go license:mit"

For Code Search (gh_search_code):

  • in:: Search within file content (default), path, or both. q='"import requests" in:file'

  • user: or org:: Search code within a specific user's or organization's repositories. q='"BaseSettings" user:tiangolo'

  • repo:/: Search code within a specific repository. q='"JenkinsAPIException" repo:devops-mcps/devops-mcps'

  • language:: Filter by the language of the file containing the code. q='def main language:python'

  • path:, path:/: Search within specific paths or the root directory. q='"GithubException" path:src/devops_mcps'

  • filename:: Search within specific filenames. q='TODO filename:core.py'

  • extension:: Search within files having a specific extension. q='class Settings extension:py'

This query syntax provides a flexible and powerful way to find exactly what you need on GitHub directly through your MCP tools. You can find the full, official documentation here:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

devops_mcps-0.6.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

devops_mcps-0.6.0-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file devops_mcps-0.6.0.tar.gz.

File metadata

  • Download URL: devops_mcps-0.6.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for devops_mcps-0.6.0.tar.gz
Algorithm Hash digest
SHA256 9adabab1a0952e4f7832e99994e15335b6182d41cba8550e067c0694fb1c9871
MD5 48e0f80bf62cefe2df696d1955912267
BLAKE2b-256 8dd860af44221df6a42682f173bf42f2d8c1c227fd8e7e3bc98eacd4405a77e9

See more details on using hashes here.

File details

Details for the file devops_mcps-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: devops_mcps-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for devops_mcps-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a094650cc0c2b595a21af443d805c17629bbfc890051e052933e373846bf2832
MD5 d91a4e32dbbfaa3a87a28026dd96ff70
BLAKE2b-256 0f6706b2a5f4ea912a3a90f314e8c988e0e71213db99678b53230d0233d64184

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page