MCP RAN POC
An MCP server for querying databases and managing Kubernetes clusters.
MCP RAN POC
⚠️ WARNING: THIS IS A PROOF OF CONCEPT (POC) - NOT FOR PRODUCTION USE ⚠️
This repository contains MCP (Model Context Protocol) servers and an ADK agent for database querying and Kubernetes cluster management:
- TALM MCP Server - TALM (Topology Aware Lifecycle Manager) interface for Red Hat ACM
- PostgreSQL MCP Server - Natural language SQL query interface for PostgreSQL databases
- ADK Agent - Google ADK agent providing unified web-based natural language interface to both MCP servers
Architecture Overview
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ Web Browser │ │ Claude Desktop │ │ Other MCP │
│ + ADK Agent │ │ Client │ │ Clients │
│ :8000 │ │ │ │ │
└─────────┬───────────┘ └─────────┬───────────┘ └─────────┬───────────┘
│ │ │
└──────────────┬───────────┴────────────┬─────────────┘
│ │
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────────────┐
│ PostgreSQL MCP │ │ TALM MCP Server │
│ Server :3000 │ │ :3001 │
└─────────┬───────────────┘ └─────────┬───────────────────────┘
│ │
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────────────┐
│ PostgreSQL Database │ │ Kubernetes Clusters │
└─────────────────────────┘ └─────────────────────────────────┘
Deployment Options
Local Development
# Install dependencies
uv sync
# Run PostgreSQL MCP server (port 3000)
uv run python servers/ocloud-pg.py --transport streamable-http --port 3000
# Run TALM MCP server (port 3001)
uv run python servers/talm.py --transport streamable-http --port 3001
# Run ADK web interface (connects to both servers)
cd clients && adk web
OpenShift Container Platform (OCP) Deployment
Prerequisites
- OpenShift CLI (
oc
) installed and logged in - Docker/Podman for building images
- Access to a container registry (quay.io)
Quick Deploy
# 1. Setup environment variables
cp .env.example .env
# Edit .env with your PostgreSQL and OpenAI credentials
# 2. Build and push container image
make dev-build-push
# 3. Deploy to OpenShift
make deploy
# 4. Get application URL
oc get route mcp-app-route -n mcp-poc -o jsonpath='{.spec.host}'
Available Make Commands
make build
- Build Docker imagemake push
- Push image to registrymake dev-build-push
- Build and push with dev tagmake deploy
- Deploy to OpenShift using kustomizemake undeploy
- Remove deployment from OpenShift
Environment Configuration
Create .env
file with required variables:
# Multi-Database Configuration
# Alarms Database
ALARMS_DB_HOST=your-postgres-host
ALARMS_DB_PORT=5432
ALARMS_DB_NAME=alarms
ALARMS_DB_USER=alarms
ALARMS_DB_PASSWORD=your-password
# Resources Database
RESOURCES_DB_HOST=your-postgres-host
RESOURCES_DB_PORT=5432
RESOURCES_DB_NAME=resources
RESOURCES_DB_USER=resources
RESOURCES_DB_PASSWORD=your-password
# Clusters Database
CLUSTERS_DB_HOST=your-postgres-host
CLUSTERS_DB_PORT=5432
CLUSTERS_DB_NAME=clusters
CLUSTERS_DB_USER=clusters
CLUSTERS_DB_PASSWORD=your-password
# OpenAI API Configuration
OPENAI_API_KEY=your-openai-api-key-here
OPENAI_MODEL=openai/gpt-4.1
# MCP Server URLs (automatically configured in deployment)
POSTGRES_MCP_URL=http://localhost:3000/mcp
TALM_MCP_URL=http://localhost:3001/mcp
Deployment Architecture
- Single Pod Deployment: Three containers run in the same pod:
- PostgreSQL MCP server (port 3000)
- TALM MCP server (port 3001)
- ADK web interface (port 8000)
- Shared Networking: ADK client connects to both MCP servers via localhost
- External Access: Only the web interface (port 8000) is exposed via OpenShift Route
- Security: TLS termination at the edge, automatic HTTPS redirect
- RBAC: Uses dedicated ServiceAccount with admin ClusterRole for TALM operations
Local Client Options
Option 1: Google ADK Web Interface (Recommended)
cd clients && adk web
Access at http://localhost:8000
for unified natural language interface to both:
- PostgreSQL database querying and analysis
- Kubernetes cluster management via TALM
Option 2: Claude Desktop Client
Configure MCP servers in Claude Desktop config:
Configure Claude Desktop Client
Add these configurations to your Claude Desktop config:
TALM Server Configuration
{
"mcpServers": {
"talm": {
"command": "uv",
"args": [
"run",
"python", "servers/talm.py"
],
"cwd": "/path/to/mcp-ran-poc",
"env": {
"KUBECONFIG": "/path/to/your/kubeconfig.yaml"
}
}
}
}
PostgreSQL Server Configuration
{
"mcpServers": {
"postgres": {
"command": "uv",
"args": [
"run",
"python", "servers/ocloud-pg.py"
],
"cwd": "/path/to/mcp-ran-poc",
"env": {
"ALARMS_DB_HOST": "your-postgres-host",
"ALARMS_DB_PORT": "5432",
"ALARMS_DB_NAME": "alarms",
"ALARMS_DB_USER": "alarms",
"ALARMS_DB_PASSWORD": "your-password",
"RESOURCES_DB_HOST": "your-postgres-host",
"RESOURCES_DB_PORT": "5432",
"RESOURCES_DB_NAME": "resources",
"RESOURCES_DB_USER": "resources",
"RESOURCES_DB_PASSWORD": "your-password",
"CLUSTERS_DB_HOST": "your-postgres-host",
"CLUSTERS_DB_PORT": "5432",
"CLUSTERS_DB_NAME": "clusters",
"CLUSTERS_DB_USER": "clusters",
"CLUSTERS_DB_PASSWORD": "your-password"
}
}
}
}
Working Configuration Example
This format has been tested and works:
{
"mcpServers": {
"talm": {
"command": "/path/to/uv",
"args": [
"run",
"--directory", "/path/to/mcp-ran-poc/servers",
"python", "talm.py"
],
"env": {
"KUBECONFIG": "/path/to/your/kubeconfig.yaml"
}
},
"postgres": {
"command": "/path/to/uv",
"args": [
"run",
"--directory", "/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-password",
"RESOURCES_DB_HOST": "your-postgres-host",
"RESOURCES_DB_PORT": "5432",
"RESOURCES_DB_NAME": "resources",
"RESOURCES_DB_USER": "resources",
"RESOURCES_DB_PASSWORD": "your-password",
"CLUSTERS_DB_HOST": "your-postgres-host",
"CLUSTERS_DB_PORT": "5432",
"CLUSTERS_DB_NAME": "clusters",
"CLUSTERS_DB_USER": "clusters",
"CLUSTERS_DB_PASSWORD": "your-password"
}
}
}
}
Replace:
/path/to/mcp-ran-poc
with this repository's absolute path/path/to/your/kubeconfig.yaml
with your cluster's kubeconfig fileyour-postgres-host
with your PostgreSQL server hostnameyour-password
with your actual database passwords for each database
Server Features
TALM Server
- Resources: Access to managed clusters, policies, and cluster status
- Tools: Cluster remediation, health checks, and CGU management
- Prompts: Guided workflows for cluster lifecycle operations
PostgreSQL Server
- Tools:
execute_query(database, query)
- Execute read-only SQL queries safely - Security: Only SELECT and WITH queries allowed
- Response: JSON format with query results, metadata, and executed SQL
ADK Agent
- Unified Natural Language Interface: Handles both database and cluster operations
- Database Operations: Convert questions to SQL queries automatically
- Cluster Operations: Manage Kubernetes clusters via TALM commands
- Query Explanation: Shows SQL reasoning before execution
- Result Analysis: Provides insights and analysis of both database and cluster data
- Schema Exploration: Helps understand database structure and cluster topology
- Web Interface: User-friendly browser-based interaction at
http://localhost:8000
- Dual MCP Integration: Seamlessly connects to both PostgreSQL and TALM MCP servers
Related Servers
Snow Leopard BigQuery MCP
Interact with Google BigQuery databases using natural language queries and schema exploration.
Grist
Integrate with the Grist API to manage relational spreadsheets and data. Requires a Grist API key.
Pipedrive MCP Server by CData
A read-only MCP server for Pipedrive, enabling LLMs to query live data using the CData JDBC Driver.
JDBC Explorer
A server that enables LLMs to connect and interact with databases via JDBC, built using the Spring AI MCP framework.
Binance Cryptocurrency MCP
Access real-time Binance cryptocurrency market data, including prices, order books, and trading history.
Macrostrat
Access geologic data from the Macrostrat API, including units, columns, minerals, and timescales.
MCP Alchemy
Explore, query, and analyze SQLAlchemy-compatible databases directly from your desktop.
MongoDB
Interact with MongoDB databases using natural language. Query collections, inspect schemas, and manage data.
MCP Oracle Server
A server that provides tools to interact with an Oracle database.
LanceDB
A vector database server for storing, searching, and managing vector embeddings.