Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4cc5a6a
feat : mcp init (#1)
halucinor Jul 23, 2025
fca2085
feat: pytest settings (#4)
paikend Jul 29, 2025
80f8750
chore: add lock file (#2)
choieastsea Jul 29, 2025
63449ea
feat: add ruff (#3)
choieastsea Jul 29, 2025
24feb39
docs: Feature template
halucinor Jul 30, 2025
8f1f7a4
doc: bug report template
halucinor Jul 30, 2025
314fa51
fix: pytest settings (#5)
choieastsea Jul 30, 2025
b44c10c
feat : contribution baseline (#6)
halucinor Jul 31, 2025
d18cd10
Refactor: connection reuse (#12)
paikend Aug 3, 2025
93454fa
feat: adding exception handling middleware for mcp server (#13)
halucinor Aug 4, 2025
1110926
fix: server schema (#16)
choieastsea Aug 5, 2025
88d11c1
feat: Add get regions and create region tool (#18)
S0okJu Aug 5, 2025
555d7df
Remove S101 Ruff Rule in tests (#29)
paikend Aug 6, 2025
10a990f
feat: Add neutron network function tools (#27)
platanus-kr Aug 6, 2025
d1f7597
feat: Add region tools (#28)
S0okJu Aug 7, 2025
29a203d
feat: Change isort section for import sorting (#26)
S0okJu Aug 8, 2025
6a6e61c
feat(network): rename neutron to network package name (#33)
platanus-kr Aug 9, 2025
2833e55
fix: rename package (#35)
halucinor Aug 11, 2025
318d3d4
feat: add block_storage related tools/tests
caputdraconis050630 Aug 12, 2025
225f174
feat: Add get-domain, get-domains tool (#40)
S0okJu Aug 12, 2025
29ce13f
refactor: function naming convention
caputdraconis050630 Aug 12, 2025
09578a5
Merge pull request #39 from openstack-kr/feature/cinder-tools
caputdraconis050630 Aug 12, 2025
9fe7365
feat: create server (#41)
choieastsea Aug 12, 2025
62db145
feat: ruff, test pipline (#38)
halucinor Aug 12, 2025
baa5cb9
chore : ruff failure fix (#43)
halucinor Aug 13, 2025
c0d41dc
feat: get flavors (#42)
choieastsea Aug 14, 2025
efd7095
Fix: get_servers nullable field validation errors (#45)
paikend Aug 16, 2025
23cc339
feat : create image tool (#48)
halucinor Aug 17, 2025
b62a241
feat: server action (#47)
choieastsea Aug 18, 2025
e2c1dd2
Add domain-related tool (#49)
S0okJu Aug 18, 2025
dbae5c3
chore: update fastmcp (#51)
choieastsea Aug 18, 2025
1260b40
Fix: enforce singleton patten openstack connection (#44)
paikend Aug 18, 2025
65a7531
feat: release action (#52)
halucinor Aug 18, 2025
382f764
feat: rest server tools (#54)
choieastsea Aug 20, 2025
8804571
Fix: alignment network model field (#56)
platanus-kr Aug 20, 2025
4b6a89a
docs: first readme update (#57)
halucinor Aug 22, 2025
481dffd
feat: Add neutron function tools - subnet, port, floating ip (#46)
platanus-kr Aug 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
name: Bug report
about: Help us fix it by providing detailed information about the issue
title: "[BUG]"
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]

**Log file / Error Message:**
Paste any relevant logs or error messages here

**Additional context**
Add any other context about the problem here.
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[FEAT]"
labels: feature
assignees: ''

---

**Summary**
What change you think needs making.

**Motivation**
Please give examples of your use case, e.g. when would you use this.

**Proposal**
How do you think this should be implemented?

**Additional context**
Add any other context or screenshots about the feature request here.
14 changes: 14 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## Overview
<!-- Provide a brief description of what this PR does -->

## Key Changes
<!-- List the main changes made in this PR -->
-
-

## Related Issues
<!-- Link to related issues using "Fixes #123", "Closes #456", or "Relates to #789" -->
-

## Additional context
<!-- Any additional information that reviewers should know -->
56 changes: 56 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: CI

on:
pull_request:
branches: [ develop ]
push:
branches: [ develop ]

jobs:
lint-and-test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v3

- name: Set up Python
run: uv python install

- name: Install dependencies
run: uv sync --all-groups

- name: Run ruff check
run: uv run ruff check

- name: Run ruff format check
run: uv run ruff format --check .

- name: Run tests with pytest
run: uv run pytest


test-matrix:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v3

- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}

- name: Install dependencies
run: uv sync --all-groups

- name: Run tests
run: uv run pytest
39 changes: 39 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Release

on:
push:
tags:
- 'v*'

permissions:
contents: write
id-token: write

jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@v3

- name: Set up Python
run: uv python install

- name: Install dependencies
run: uv sync --group dev

- name: Build package
run: uv build

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ __pycache__/

# C extensions
*.so
.idea

# Distribution / packaging
.Python
Expand Down
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.12.7
hooks:
# Run the linter.
- id: ruff-check
args: [ --fix ]
# Run the formatter.
- id: ruff-format
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.10
91 changes: 91 additions & 0 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
==============================
Contributing to OpenStack MCP Server
==============================

About the Project
==================

OpenStack MCP Server is a project that integrates various OpenStack functionalities with the Model Context Protocol (MCP), enabling LLM-powered management of OpenStack resources.

How to Contribute
=================

First, thank you for reading this document to contribute to our OpenStack MCP Server project. The following content explains the guidelines for contributing to our project, how to set up the development environment, and coding style guidelines.

PR Guidelines
=============

Issue Report
------------

Before submitting code for new features (and this also applies to some complex bug fixes), please first raise a **Feature request** or **Bug report**.

Review Process
--------------

- This project currently uses main and develop branches as the base. PRs to the main branch are restricted to the develop branch.
- All patches must be first merged into the develop branch and require approval from at least 2 code reviewers to be merged into develop.

Commit Message
--------------

We use the `Conventional Commits <https://www.conventionalcommits.org/en/v1.0.0/>`_ convention for writing commit messages.

Format::

<type>[optional scope]: <description>
[optional body]
[optional footer(s)]

**Example**::

feat(compute): implement server management tools

Add Compute server listing and detail retrieval functionality
for MCP clients with proper error handling and OpenStack SDK integration.

- Add get_compute_servers tool
- Add get_server_details tool
- Implement server status filtering
- Add comprehensive error handling

Closes #123

Development Environment
=======================

The following content is a guide for contributors to set up a development environment in their local environment.

Prerequisites
=============

- This project uses uv to manage Python packages. Please set up an environment where you can use uv in your local environment for development environment setup. `Reference <https://docs.astral.sh/uv/getting-started/installation/>`_
- We use ``python3.10`` as the default version. This is to ensure compatibility with other OpenStack projects.

UV Package Build
----------------

.. code-block:: bash

uv sync --all-groups

Pre-commit
----------

Code style is managed uniformly through ruff. We recommend setting up pre-commit hooks so that auto-formatting is applied at the commit stage.

.. code-block:: bash

pre-commit install

Testing
=======

Unit Tests
----------

All patches related to feature additions must implement unit test code. This project uses Pytest as the testing library, and if the project has been built successfully, you can run tests with the following command:

.. code-block:: bash

uv run pytest
102 changes: 101 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,102 @@
# python-openstackmcp-server
openstack mcp server

Openstack mcp server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) server that provides an interface for AI assistants to interact with OpenStack services.

```mermaid
flowchart LR
AI[AI Assistant] <-->|MCP Protocol| Server[OpenStack MCP Server]
Server <-->|OpenStack SDK| SDK[OpenStack SDK]
SDK <-->|REST API| Cloud[OpenStack Cloud]
```

# Table of Contents
- [Table of Contents](#table-of-contents)
- [Features](#features)
- [Quick Start with Claude Desktop](#quick-start-with-claude-desktop)
- [Requirements](#requirements)
- [Using python](#using-python)
- [Using uvx](#using-uvx)
- [Contributing](#contributing)
- [License](#license)

# Features
- **MCP Protocol Support**: Implements the Model Context Protocol for AI assistants.
- **Compute Tools**: Manage OpenStack compute resources (servers, flavors).
- **Image Tools**: Manage OpenStack images.
- **Identity Tools**: Handle OpenStack identity and authentication.
- **Network Tools**: Manage OpenStack networking resources.
- **Block Storage Tools**: Manage OpenStack block storage resources.

# Quick Start with Claude Desktop

Get started quickly with the OpenStack MCP server using Claude Desktop

## Requirements
- Python 3.10 or higher
- OpenStack credentials configured in `clouds.yaml` file
- Claude Desktop installed

1. **Create or update your `clouds.yaml` file with your OpenStack credentials.**

Example `clouds.yaml`:
```yaml
clouds:
openstack:
auth:
auth_url: https://your-openstack-auth-url.com
username: your-username
password: your-password
project_name: your-project-name
user_domain_name: Default
project_domain_name: Default
region_name: your-region
interface: public
identity_api_version: 3
```

2. **Create or update your Claude Desktop configuration file**:
- **macOS**: Edit `$HOME/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: Edit `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux**: Edit `$HOME/.config/Claude/claude_desktop_config.json`

### Using python

```json
{
"mcpServers": {
"openstack-mcp-server": {
"command": "/path/to/your/python",
"args": [
"python-openstackmcp-server"
],
"env" : {
"OS_CLIENT_CONFIG_FILE": "/path/to/your/clouds.yaml"
}
}
}
}
```

### Using uvx

```json
{
"mcpServers": {
"openstack-mcp-server": {
"command": "uvx",
"args": [
"python-openstackmcp-server"
],
"env" : {
"OS_CLIENT_CONFIG_FILE": "/path/to/your/clouds.yaml"
}
}
}
}
```

# Contributing
Contributions are welcome! Please see the [CONTRIBUTING](CONTRIBUTING.rst) file for details on how to contribute to this project.

# License
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.
Loading