Skip to content

Commit c0b37c3

Browse files
committed
Add get_queue_info and delete_queue
1 parent d9249db commit c0b37c3

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

src/mcp_server_rabbitmq/handlers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,9 @@ def handle_list_queues(rabbitmq_admin: RabbitMQAdmin) -> List[str]:
2121
def handle_list_exchanges(rabbitmq_admin: RabbitMQAdmin) -> List[str]:
2222
result = rabbitmq_admin.list_exchanges()
2323
return [exchange['name'] for exchange in result]
24+
25+
def handle_get_queue_info(rabbitmq_admin: RabbitMQAdmin, queue: str, vhost: str = "/") -> dict:
26+
return rabbitmq_admin.get_queue_info(queue, vhost)
27+
28+
def handle_delete_queue(rabbitmq_admin: RabbitMQAdmin, queue: str, vhost: str = "/") -> None:
29+
rabbitmq_admin.delete_queue(queue, vhost)

src/mcp_server_rabbitmq/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,11 @@ class ListQueues(BaseModel):
1414

1515
class ListExchanges(BaseModel):
1616
pass
17+
18+
class GetQueueInfo(BaseModel):
19+
queue: Annotated[str, Field(description="The name of the queue to get info about")]
20+
vhost: Annotated[str, Field(description="The virtual host where the queue exists")] = "/"
21+
22+
class DeleteQueue(BaseModel):
23+
queue: Annotated[str, Field(description="The name of the queue to delete")]
24+
vhost: Annotated[str, Field(description="The virtual host where the queue exists")] = "/"

src/mcp_server_rabbitmq/server.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,17 @@
55
Tool,
66
)
77
import ssl
8-
from .models import Enqueue, Fanout, ListQueues, ListExchanges
8+
from .models import Enqueue, Fanout, ListQueues, ListExchanges, GetQueueInfo, DeleteQueue
99
from .logger import Logger, LOG_LEVEL
1010
from .connection import RabbitMQConnection, validate_rabbitmq_name
11-
from .handlers import handle_enqueue, handle_fanout, handle_list_queues, handle_list_exchanges
11+
from .handlers import (
12+
handle_enqueue,
13+
handle_fanout,
14+
handle_list_queues,
15+
handle_list_exchanges,
16+
handle_get_queue_info,
17+
handle_delete_queue
18+
)
1219
from .admin import RabbitMQAdmin
1320

1421

@@ -48,6 +55,16 @@ async def list_tools() -> list[Tool]:
4855
name="list_exchanges",
4956
description="""List all the exchanges in the broker""",
5057
inputSchema=ListExchanges.model_json_schema(),
58+
),
59+
Tool(
60+
name="get_queue_info",
61+
description="""Get detailed information about a specific queue""",
62+
inputSchema=GetQueueInfo.model_json_schema(),
63+
),
64+
Tool(
65+
name="delete_queue",
66+
description="""Delete a specific queue""",
67+
inputSchema=DeleteQueue.model_json_schema(),
5168
)
5269
]
5370

@@ -103,6 +120,28 @@ async def call_tool(
103120
except Exception as e:
104121
logger.error(f"{e}")
105122
return [TextContent(type="text", text=str("failed"))]
123+
elif name == "get_queue_info":
124+
try:
125+
admin = RabbitMQAdmin(rabbitmq_host, api_port, username, password, use_tls)
126+
queue = arguments["queue"]
127+
vhost = arguments.get("vhost", "/")
128+
validate_rabbitmq_name(queue, "Queue name")
129+
result = handle_get_queue_info(admin, queue, vhost)
130+
return [TextContent(type="text", text=str(result))]
131+
except Exception as e:
132+
logger.error(f"{e}")
133+
return [TextContent(type="text", text=str("failed"))]
134+
elif name == "delete_queue":
135+
try:
136+
admin = RabbitMQAdmin(rabbitmq_host, api_port, username, password, use_tls)
137+
queue = arguments["queue"]
138+
vhost = arguments.get("vhost", "/")
139+
validate_rabbitmq_name(queue, "Queue name")
140+
handle_delete_queue(admin, queue, vhost)
141+
return [TextContent(type="text", text=str("succeeded"))]
142+
except Exception as e:
143+
logger.error(f"{e}")
144+
return [TextContent(type="text", text=str("failed"))]
106145
raise ValueError(f"Tool not found: {name}")
107146

108147
options = server.create_initialization_options()

0 commit comments

Comments
 (0)