Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 26 additions & 0 deletions src/openstack_mcp_server/prompts/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from fastmcp import FastMCP


def register_prompt(mcp: FastMCP):
"""
Register Openstack MCP prompts.
"""

@mcp.prompt()
def get_servers_by_security_group(security_group_name: str) -> str:
"""
Get servers associated with a specific security group.

:param security_group_name: The name of the security group to filter servers by.
"""
return (
f"Find all compute servers that have the security group "
f"'{security_group_name}' attached.\n\n"
f"Steps:\n"
f"1. Call get_servers to list all servers.\n"
f"2. Check each server's security_groups field.\n"
f"3. Return only the servers where security_groups contains "
f"an entry with name '{security_group_name}'.\n"
f"4. For each matching server, show the server name, ID, "
f"status, and the full list of its security groups."
)
3 changes: 2 additions & 1 deletion src/openstack_mcp_server/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from fastmcp.server.middleware.error_handling import ErrorHandlingMiddleware
from fastmcp.server.middleware.logging import LoggingMiddleware

from openstack_mcp_server.prompts import register_prompt
from openstack_mcp_server.tools import register_tool


Expand All @@ -13,7 +14,7 @@ def serve(transport: str, **kwargs):

register_tool(mcp)
# resister_resources(mcp)
# register_prompt(mcp)
register_prompt(mcp)

# Add middlewares
mcp.add_middleware(ErrorHandlingMiddleware())
Expand Down
31 changes: 31 additions & 0 deletions tests/prompts/test_network_prompts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from unittest.mock import MagicMock

from fastmcp import FastMCP

from openstack_mcp_server.prompts import register_prompt


class TestPrompts:
"""Test cases for MCP prompts."""

def test_get_servers_by_security_group_prompt_registered(self):
"""Test that the prompt is registered with the MCP instance."""
mcp = MagicMock()
register_prompt(mcp)
mcp.prompt.assert_called()

def test_get_servers_by_security_group_prompt_content(self):
"""Test that the prompt returns expected content."""
mcp = FastMCP("test")
register_prompt(mcp)

prompts = mcp._prompt_manager._prompts
assert "get_servers_by_security_group" in prompts

prompt_obj = prompts["get_servers_by_security_group"]
assert prompt_obj.fn is not None

result = prompt_obj.fn(security_group_name="my-sg")
assert "my-sg" in result
assert "get_servers" in result
assert "security_groups" in result
Loading