Claude-skill-registry insightpulse-connection-manager
Supabase-style connection UI for managing InsightPulse AI infrastructure (Supabase, Odoo, Superset, MCP servers, PostgreSQL, APIs). Self-hosted connection manager module for Odoo 19 that provides unified connection management, auto-generated configurations, connection testing, and beautiful Kanban interface.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/insightpulse-connection-manager" ~/.claude/skills/majiayu000-claude-skill-registry-insightpulse-connection-manager && rm -rf "$T"
manifest:
skills/data/insightpulse-connection-manager/SKILL.mdsource content
InsightPulse Connection Manager
When to Use This Skill
Use this skill when you need to:
- Manage multiple database and API connections for Finance SSC operations
- Generate connection strings, .env files, or Docker Compose configs
- Test and monitor connection health across infrastructure
- Integrate Supabase, Odoo, Superset, MCP servers, and PostgreSQL
- Build self-hosted connection management without vendor lock-in
- Create unified connection dashboard for multi-agency operations
Core Capabilities
Connection Management
- Unified interface for all connections (Supabase, Odoo, Superset, MCP, PostgreSQL, APIs)
- Pre-configured connections for InsightPulse AI stack
- Support for 8 agencies: RIM, CKVC, BOM, JPAL, JLI, JAP, LAS, RMQB
- Color-coded connection types with visual status indicators
Auto-Generated Configuration
- Connection string generation (PostgreSQL, MySQL, MongoDB formats)
- Environment variables in .env format with copy-to-clipboard
- Docker Compose service definitions
- Kubernetes ConfigMap snippets
Connection Testing & Monitoring
- One-click connection testing
- Real-time connection health monitoring
- Active connection count tracking
- Connection latency measurement
Beautiful UI
- Supabase-inspired Kanban interface
- Color-coded by connection type
- Visual status indicators (green/yellow/red)
- Quick-access copy buttons
Prerequisites
Required Software
- Odoo 19 Community Edition
- PostgreSQL 16+ (for connection testing)
- Python 3.11+ with psycopg2
Optional Integrations
- Supabase project (ref: spdtwktxdalcfigzeqrz)
- Apache Superset instance
- MCP servers (Notion, Google Drive)
- DigitalOcean PostgreSQL cluster
Access Requirements
- Odoo administrator access
- Database credentials for systems being managed
- API keys for external services
Implementation Patterns
Module Structure
insightpulse_connection_manager/ ├── __init__.py ├── __manifest__.py ├── models/ │ ├── __init__.py │ └── connection_endpoint.py # Main model ├── views/ │ ├── connection_endpoint_views.xml │ └── connection_endpoint_kanban.xml ├── security/ │ ├── ir.model.access.csv │ └── connection_security.xml ├── data/ │ └── default_endpoints.xml # Pre-configured connections └── static/ ├── description/ │ └── index.html └── src/ └── scss/ └── connection_manager.scss
Model Definition
# models/connection_endpoint.py from odoo import models, fields, api import psycopg2 class ConnectionEndpoint(models.Model): _name = 'insightpulse.connection.endpoint' _description = 'Connection Endpoint' _order = 'sequence, name' name = fields.Char(required=True) connection_type = fields.Selection([ ('supabase', 'Supabase'), ('postgresql', 'PostgreSQL'), ('odoo', 'Odoo Database'), ('superset', 'Apache Superset'), ('mcp', 'MCP Server'), ('api', 'REST API'), ], required=True) base_url = fields.Char(string='Server/Host') port = fields.Integer(default=5432) database_name = fields.Char() username = fields.Char() password = fields.Char() api_key = fields.Char() connection_string = fields.Text(compute='_compute_connection_string') env_vars = fields.Text(compute='_compute_env_vars') docker_compose = fields.Text(compute='_compute_docker_compose') status = fields.Selection([ ('draft', 'Not Tested'), ('success', 'Connected'), ('failed', 'Failed'), ], default='draft') @api.depends('connection_type', 'base_url', 'port', 'database_name', 'username', 'password') def _compute_connection_string(self): for rec in self: if rec.connection_type in ['supabase', 'postgresql', 'odoo']: rec.connection_string = ( f"postgresql://{rec.username}:{rec.password}@" f"{rec.base_url}:{rec.port}/{rec.database_name}" ) elif rec.connection_type == 'superset': rec.connection_string = f"http://{rec.base_url}:{rec.port}" else: rec.connection_string = f"{rec.base_url}" @api.depends('name', 'connection_string') def _compute_env_vars(self): for rec in self: safe_name = rec.name.upper().replace(' ', '_').replace('-', '_') rec.env_vars = ( f"{safe_name}_URL={rec.connection_string}\n" f"{safe_name}_USER={rec.username}\n" f"{safe_name}_PASSWORD={rec.password}" ) def action_test_connection(self): """Test database connection""" for rec in self: try: if rec.connection_type in ['supabase', 'postgresql', 'odoo']: conn = psycopg2.connect(rec.connection_string) conn.close() rec.status = 'success' return { 'type': 'ir.actions.client', 'tag': 'display_notification', 'params': { 'message': f'✅ Connected to {rec.name}', 'type': 'success', 'sticky': False, } } except Exception as e: rec.status = 'failed' return { 'type': 'ir.actions.client', 'tag': 'display_notification', 'params': { 'message': f'❌ Connection failed: {str(e)}', 'type': 'danger', 'sticky': True, } }
View Definition (Kanban)
<!-- views/connection_endpoint_kanban.xml --> <record id="view_connection_endpoint_kanban" model="ir.ui.view"> <field name="name">insightpulse.connection.endpoint.kanban</field> <field name="model">insightpulse.connection.endpoint</field> <field name="arch" type="xml"> <kanban class="o_kanban_mobile" sample="1"> <field name="id"/> <field name="name"/> <field name="connection_type"/> <field name="status"/> <field name="connection_string"/> <templates> <t t-name="kanban-box"> <div class="oe_kanban_global_click o_kanban_record_has_image_fill"> <div class="o_kanban_record_top"> <div class="o_kanban_record_headings"> <strong class="o_kanban_record_title"> <field name="name"/> </strong> <span class="badge badge-pill" t-attf-class="badge-{{status == 'success' and 'success' or status == 'failed' and 'danger' or 'secondary'}}"> <field name="status"/> </span> </div> </div> <div class="o_kanban_record_body"> <field name="connection_type" widget="badge"/> <div class="text-muted"> <i class="fa fa-server"/> <field name="base_url"/>:<field name="port"/> </div> </div> <div class="o_kanban_record_bottom"> <div class="oe_kanban_bottom_left"> <button type="object" name="action_test_connection" class="btn btn-sm btn-secondary"> <i class="fa fa-plug"/> Test </button> </div> <div class="oe_kanban_bottom_right"> <button type="object" name="action_copy_connection_string" class="btn btn-sm btn-link"> <i class="fa fa-clipboard"/> Copy </button> </div> </div> </div> </t> </templates> </kanban> </field> </record>
Default Data
<!-- data/default_endpoints.xml --> <odoo> <data noupdate="1"> <!-- Supabase Production --> <record id="endpoint_supabase_prod" model="insightpulse.connection.endpoint"> <field name="name">Supabase Production</field> <field name="connection_type">supabase</field> <field name="base_url">db.spdtwktxdalcfigzeqrz.supabase.co</field> <field name="port">5432</field> <field name="database_name">postgres</field> <field name="username">postgres</field> <field name="sequence">10</field> </record> <!-- Odoo Database --> <record id="endpoint_odoo_db" model="insightpulse.connection.endpoint"> <field name="name">Odoo 19 Database</field> <field name="connection_type">odoo</field> <field name="base_url">localhost</field> <field name="port">5432</field> <field name="database_name">odoo19</field> <field name="username">odoo</field> <field name="sequence">20</field> </record> <!-- Apache Superset --> <record id="endpoint_superset" model="insightpulse.connection.endpoint"> <field name="name">Apache Superset Dashboard</field> <field name="connection_type">superset</field> <field name="base_url">localhost</field> <field name="port">8088</field> <field name="username">admin</field> <field name="sequence">30</field> </record> <!-- MCP Server - Notion --> <record id="endpoint_mcp_notion" model="insightpulse.connection.endpoint"> <field name="name">MCP Server - Notion</field> <field name="connection_type">mcp</field> <field name="base_url">http://localhost:3000</field> <field name="sequence">40</field> </record> </data> </odoo>
Integration Points
With Odoo Finance Modules
# Access connections from other modules connection = self.env['insightpulse.connection.endpoint'].search([ ('name', '=', 'Supabase Production') ], limit=1) if connection: # Use connection string for external API calls import requests response = requests.get( f"{connection.connection_string}/rest/v1/bir_forms", headers={'apikey': connection.api_key} )
With Superset Dashboards
# Auto-configure Superset database connections superset_conn = self.env['insightpulse.connection.endpoint'].search([ ('connection_type', '=', 'superset') ], limit=1) # Generate Superset database URI db_uri = f"postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}"
With MCP Servers
# Manage MCP server endpoints mcp_servers = self.env['insightpulse.connection.endpoint'].search([ ('connection_type', '=', 'mcp') ]) for server in mcp_servers: # Register MCP server URL for bridge connections mcp_config[server.name] = { 'url': server.base_url, 'api_key': server.api_key, }
Output Formats
Connection String
postgresql://postgres:password@db.spdtwktxdalcfigzeqrz.supabase.co:5432/postgres
Environment Variables
SUPABASE_PRODUCTION_URL=postgresql://postgres:password@db.spdtwktxdalcfigzeqrz.supabase.co:5432/postgres SUPABASE_PRODUCTION_USER=postgres SUPABASE_PRODUCTION_PASSWORD=password
Docker Compose
services: app: environment: - DATABASE_URL=postgresql://postgres:password@db.spdtwktxdalcfigzeqrz.supabase.co:5432/postgres
BIR Compliance Integration
Connection for BIR Systems
<record id="endpoint_bir_portal" model="insightpulse.connection.endpoint"> <field name="name">BIR eFPS Portal API</field> <field name="connection_type">api</field> <field name="base_url">https://efps.bir.gov.ph</field> <field name="api_key">YOUR_BIR_API_KEY</field> </record>
Usage in BIR Module
# Fetch BIR connection for form submission bir_conn = self.env['insightpulse.connection.endpoint'].search([ ('name', 'ilike', 'BIR') ], limit=1) # Submit Form 1601-C via API import requests response = requests.post( f"{bir_conn.base_url}/api/submit/1601-c", headers={'Authorization': f'Bearer {bir_conn.api_key}'}, json=form_data )
Security Best Practices
Access Control
<!-- security/connection_security.xml --> <record id="group_connection_manager" model="res.groups"> <field name="name">Connection Manager</field> <field name="category_id" ref="base.module_category_administration"/> </record> <record id="group_connection_admin" model="res.groups"> <field name="name">Connection Administrator</field> <field name="category_id" ref="base.module_category_administration"/> <field name="implied_ids" eval="[(4, ref('group_connection_manager'))]"/> </record>
Password Encryption
from cryptography.fernet import Fernet def _encrypt_password(self, password): """Encrypt sensitive credentials""" key = self.env['ir.config_parameter'].sudo().get_param('connection.encryption.key') f = Fernet(key.encode()) return f.encrypt(password.encode()).decode() def _decrypt_password(self, encrypted_password): """Decrypt credentials for use""" key = self.env['ir.config_parameter'].sudo().get_param('connection.encryption.key') f = Fernet(key.encode()) return f.decrypt(encrypted_password.encode()).decode()
Examples
Example 1: Multi-Agency Database Connections
# Create connections for 8 agencies agencies = ['RIM', 'CKVC', 'BOM', 'JPAL', 'JLI', 'JAP', 'LAS', 'RMQB'] for agency in agencies: self.env['insightpulse.connection.endpoint'].create({ 'name': f'{agency} Database', 'connection_type': 'postgresql', 'base_url': 'db.spdtwktxdalcfigzeqrz.supabase.co', 'port': 5432, 'database_name': f'{agency.lower()}_db', 'username': 'postgres', 'password': os.getenv(f'{agency}_DB_PASSWORD'), })
Example 2: Connection Health Dashboard
def get_connection_health_dashboard(self): """Generate health metrics for all connections""" connections = self.env['insightpulse.connection.endpoint'].search([]) health_data = { 'total': len(connections), 'active': len(connections.filtered(lambda c: c.status == 'success')), 'failed': len(connections.filtered(lambda c: c.status == 'failed')), 'not_tested': len(connections.filtered(lambda c: c.status == 'draft')), 'by_type': {} } for conn_type in ['supabase', 'postgresql', 'odoo', 'superset', 'mcp', 'api']: type_conns = connections.filtered(lambda c: c.connection_type == conn_type) health_data['by_type'][conn_type] = len(type_conns) return health_data
Example 3: Auto-Generate .env File
def generate_env_file(self): """Generate complete .env file for deployment""" connections = self.env['insightpulse.connection.endpoint'].search([]) env_content = "# InsightPulse AI - Connection Configuration\n" env_content += "# Auto-generated from Connection Manager\n\n" for conn in connections: safe_name = conn.name.upper().replace(' ', '_').replace('-', '_') env_content += f"# {conn.name}\n" env_content += f"{safe_name}_URL={conn.connection_string}\n" env_content += f"{safe_name}_USER={conn.username}\n" env_content += f"{safe_name}_PASSWORD={conn.password}\n" if conn.api_key: env_content += f"{safe_name}_API_KEY={conn.api_key}\n" env_content += "\n" return env_content
Cost Savings
By using this self-hosted connection manager:
- No vendor lock-in: Own your infrastructure
- Zero licensing costs: Open-source solution
- Integrated workflow: All connections in one place
- Replaces: Paid connection management tools ($50-200/month)
Annual Savings: $600-2,400
Production Deployment
Installation
# Copy module to Odoo addons cp -r insightpulse_connection_manager /odoo/addons/ # Update module list in Odoo # Apps → Update Apps List # Install module # Apps → Search "InsightPulse Connection Manager" → Install
Docker Deployment
# docker-compose.yml services: odoo: image: odoo:19 volumes: - ./insightpulse_connection_manager:/mnt/extra-addons/insightpulse_connection_manager
Kubernetes Deployment
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: odoo spec: template: spec: containers: - name: odoo volumeMounts: - name: addons mountPath: /mnt/extra-addons/insightpulse_connection_manager
Troubleshooting
Connection Test Fails
# Check psycopg2 is installed pip install psycopg2-binary # Verify firewall rules # Ensure port 5432 is open for PostgreSQL connections # Check credentials # Verify username/password in Supabase/Odoo settings
Permission Denied
# Add user to connection manager group # Settings → Users → Select User → Groups → Add "Connection Manager"
License
LGPL-3.0 (required for Odoo modules)
References
Built for Finance Shared Service Centers managing multi-agency operations with self-hosted infrastructure.