execute_queryLABSCO SUMMARY
Alarms, inventory and cluster lifecycle answered from one conversation.
The pairing is the point: asking which alarms fired and then acting on the affected clusters normally means two consoles and a context switch. The SQL side is deliberately read-only, so the risk lives entirely on the TALM side, where remediation and CGU management change real clusters. Treat it as a lab build — the authors say so plainly — and give it credentials scoped to a lab tenant.
What it is
A proof-of-concept repository holding a PostgreSQL MCP server, a TALM (Topology Aware Lifecycle Manager) MCP server for Red Hat ACM, and a Google ADK web agent that talks to both. The authors mark it clearly as not for production use.
What you get
execute_query(database, query)— read-only SQL against the alarms, resources or clusters database, returning JSON with the results, metadata and the SQL that ran- A safety rule on that tool: only SELECT and WITH statements are accepted
- TALM resources for managed clusters, policies and cluster status, with tools for cluster remediation, health checks and CGU management
- Guided prompts for cluster lifecycle operations, rather than raw calls
- Both servers run as streamable HTTP on ports 3000 and 3001, or as stdio commands in Claude Desktop
- A unified natural-language web interface on port 8000 that spans database and cluster questions
Requirements
uv, and uv sync in the checkout. TALM needs KUBECONFIG pointing at your cluster config. The PostgreSQL server needs host, port, name, user and password for each of the three databases, so ALARMS_DB_HOST, RESOURCES_DB_HOST and CLUSTERS_DB_HOST each come with their own port, name, user and password entries. An OpenShift deployment path exists too, running all three containers in one pod with only the web interface exposed through a route.
Setup effort
Build from source — get the source, then follow the project's own run instructions
USE CASES
Investigating an alarm
Query the alarms database in English, then follow the affected resources into the resources database.
Checking cluster health before a change window
Read the managed clusters and policy status through the TALM resources rather than paging through ACM.
Giving non-SQL colleagues a way in
Run the web interface and let people ask database and cluster questions in one place.
1 tool
Listed in project docs. Your client may show a different list.
BEFORE YOU INSTALL
What to know first
Tools you get
1 tool named in the project's documentation.
Requires
- uv on PATH
- PostgreSQL MCP server
- ALARMS_DB_PASSWORD in your environment
- RESOURCES_DB_PASSWORD in your environment
- CLUSTERS_DB_PASSWORD in your environment
INSTALLATION
Connect your client
Server setup
uv run python servers/talm.pyMCP Clients
Claude Desktop
{
"mcpServers": {
"talm": {
"command": "<YOUR_PATH_TO_UV>",
"args": [
"run",
"--directory",
"<YOUR_PATH_TO_MCP_RAN_POC_SERVERS>",
"python",
"talm.py"
],
"env": {
"KUBECONFIG": "<YOUR_KUBECONFIG>"
}
},
"postgres": {
"command": "<YOUR_PATH_TO_UV>",
"args": [
"run",
"--directory",
"<YOUR_PATH_TO_MCP_RAN_POC_SERVERS>",
"python",
"ocloud-pg.py"
],
"env": {
"ALARMS_DB_HOST": "<YOUR_POSTGRES_HOST>",
"ALARMS_DB_PORT": "5432",
"ALARMS_DB_NAME": "alarms",
"ALARMS_DB_USER": "alarms",
"ALARMS_DB_PASSWORD": "<YOUR_ALARMS_DB_PASSWORD>",
"RESOURCES_DB_HOST": "<YOUR_POSTGRES_HOST>",
"RESOURCES_DB_PORT": "5432",
"RESOURCES_DB_NAME": "resources",
"RESOURCES_DB_USER": "resources",
"RESOURCES_DB_PASSWORD": "<YOUR_RESOURCES_DB_PASSWORD>",
"CLUSTERS_DB_HOST": "<YOUR_POSTGRES_HOST>",
"CLUSTERS_DB_PORT": "5432",
"CLUSTERS_DB_NAME": "clusters",
"CLUSTERS_DB_USER": "clusters",
"CLUSTERS_DB_PASSWORD": "<YOUR_CLUSTERS_DB_PASSWORD>"
}
}
}
}Google ADK web UI
cd clients && adk web