Skip to main content
Glama
sites.py8.65 kB
""" Site management tools for SiteBay MCP Server """ from typing import Optional, Dict, Any, List from sitebay_mcp.client import SiteBayClient from sitebay_mcp.exceptions import SiteBayError async def sitebay_list_sites( client: SiteBayClient, team_id: Optional[str] = None ) -> str: """ List all WordPress sites for the authenticated user. Args: team_id: Optional team ID to filter sites by team Returns: Formatted string with site details """ try: # Normalize team_id to string (UUID4 expected by API) if team_id is not None: team_id = str(team_id) sites = await client.list_sites(team_id=team_id) if isinstance(sites, str): return f"Error listing sites: {sites}" if not isinstance(sites, list) or not all(isinstance(s, dict) for s in sites): return f"Unexpected response format when listing sites: {sites}" if not sites: return "No sites found for your account." result = f"Found {len(sites)} site(s):\n\n" for site in sites: result += f"• **{site.get('fqdn', 'Unknown')}**\n" result += f" - Active: {site.get('active', 'Unknown')}\n" result += f" - HTTP Auth Enabled: {site.get('http_auth_enabled', 'Unknown')}\n" result += f" - Is Free: {site.get('is_free', 'Unknown')}\n" result += f" - Created: {site.get('created_at', 'Unknown')}\n" result += "\n" return result except SiteBayError as e: return f"Error listing sites: {str(e)}" except ValueError as e: return f"Error listing sites: {str(e)}" async def sitebay_get_site( client: SiteBayClient, fqdn: str ) -> str: """ Get detailed information about a specific WordPress site. Args: fqdn: The fully qualified domain name of the site Returns: Formatted string with detailed site information """ try: site = await client.get_site(fqdn) result = f"**Site Details for {fqdn}**\n\n" result += f"• **Active**: {site.get('active', 'Unknown')}\n" result += f"• **HTTP Auth Enabled**: {site.get('http_auth_enabled', 'Unknown')}\n" result += f"• **Is Free**: {site.get('is_free', 'Unknown')}\n" result += f"• **Git URL**: {site.get('git_url', '—')}\n" result += f"• **Created**: {site.get('created_at', 'Unknown')}\n" result += f"• **Updated**: {site.get('updated_at', 'Unknown')}\n" if site.get('git_enabled'): result += f"• **Git Integration**: Enabled\n" if site.get('git_repo'): result += f"• **Git Repository**: {site.get('git_repo')}\n" return result except SiteBayError as e: return f"Error getting site details: {str(e)}" async def sitebay_create_site( client: SiteBayClient, team_id: str, fqdn: str, wordpress_blog_name: str, wordpress_first_name: str, wordpress_last_name: str, wordpress_email: str, wordpress_username: str, wordpress_password: str, git_url: Optional[str] = None, ready_made_site_name: Optional[str] = None, is_free: Optional[bool] = None, ) -> str: """ Create a new WordPress site (SiteLiveCreate schema). Args: team_id: Team UUID fqdn: New site domain wordpress_blog_name: Blog/site title wordpress_first_name: Admin first name wordpress_last_name: Admin last name wordpress_email: Admin email wordpress_username: Admin username wordpress_password: Admin password git_url: Optional repository URL ready_made_site_name: Optional ready-made site name is_free: Optional free plan flag Returns: Formatted string with new site details """ try: site_data: Dict[str, Any] = { "team_id": team_id, "fqdn": fqdn, "wordpress_blog_name": wordpress_blog_name, "wordpress_first_name": wordpress_first_name, "wordpress_last_name": wordpress_last_name, "wordpress_email": wordpress_email, "wordpress_username": wordpress_username, "wordpress_password": wordpress_password, } if git_url: site_data["git_url"] = git_url if ready_made_site_name: site_data["ready_made_site_name"] = ready_made_site_name if is_free is not None: site_data["is_free"] = is_free site = await client.create_site(site_data) result = f"✅ **Site Created Successfully!**\n\n" result += f"• **Domain**: {site.get('fqdn')}\n" result += f"• **Active**: {site.get('active', 'Unknown')}\n" result += f"• **HTTP Auth Enabled**: {site.get('http_auth_enabled', 'Unknown')}\n" result += f"• **Admin Username**: {wordpress_username}\n" result += f"• **Admin Email**: {wordpress_email}\n" if git_url: result += f"• **Git URL**: {git_url}\n" if ready_made_site_name: result += f"• **Ready-made**: {ready_made_site_name}\n" if is_free is not None: result += f"• **Plan**: {'Free' if is_free else 'Paid'}\n" result += "\n🚀 Your WordPress site is being deployed and will be ready shortly!" return result except SiteBayError as e: return f"Error creating site: {str(e)}" async def sitebay_update_site( client: SiteBayClient, fqdn: str, cf_dev_mode_enabled: Optional[bool] = None, new_fqdn: Optional[str] = None, git_url: Optional[str] = None, http_auth_enabled: Optional[bool] = None, team_id: Optional[str] = None, is_free: Optional[bool] = None, ) -> str: """ Update an existing SiteBay site configuration. Args: fqdn: The fully qualified domain name of the site to update cf_dev_mode_enabled: Enable/disable Cloudflare dev mode new_fqdn: New domain for the site git_url: Git repository URL http_auth_enabled: Enable/disable HTTP basic auth team_id: Move site to a different team is_free: Toggle free plan flag Returns: Formatted string with update confirmation """ try: site_data: Dict[str, Any] = {} if cf_dev_mode_enabled is not None: site_data["cf_dev_mode_enabled"] = cf_dev_mode_enabled if new_fqdn: site_data["new_fqdn"] = new_fqdn if git_url: site_data["git_url"] = git_url if http_auth_enabled is not None: site_data["http_auth_enabled"] = http_auth_enabled if team_id: site_data["team_id"] = team_id if is_free is not None: site_data["is_free"] = is_free if not site_data: return "No updates specified. Provide at least one supported field." site = await client.update_site(fqdn, site_data) result = f"✅ **Site Updated Successfully!**\n\n" result += f"• **Domain**: {site.get('fqdn')}\n" result += f"• **Status**: {site.get('status')}\n" if cf_dev_mode_enabled is not None: result += f"• **Cloudflare Dev Mode**: {'Enabled' if cf_dev_mode_enabled else 'Disabled'}\n" if new_fqdn: result += f"• **New Domain**: {new_fqdn}\n" if git_url: result += f"• **Git URL**: {git_url}\n" if http_auth_enabled is not None: result += f"• **HTTP Auth**: {'Enabled' if http_auth_enabled else 'Disabled'}\n" if team_id: result += f"• **Team ID**: Moved to {team_id}\n" if is_free is not None: result += f"• **Plan**: {'Free' if is_free else 'Paid'}\n" return result except SiteBayError as e: return f"Error updating site: {str(e)}" async def sitebay_delete_site( client: SiteBayClient, fqdn: str, ) -> str: """ Delete a WordPress site permanently. Args: fqdn: The fully qualified domain name of the site to delete Returns: Confirmation message or error """ try: await client.delete_site(fqdn) return ( "✅ **Site Deleted Successfully**\n\n" f"The site {fqdn} has been permanently deleted." ) except SiteBayError as e: return f"Error deleting site: {str(e)}"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sitebay/sitebay-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server