Business Central MCP Server

#!/bin/bash # Exit on error set -e # Variables - replace these with your values RESOURCE_GROUP="bc-mcp-group" LOCATION="westeurope" # Choose a location close to your team APP_NAME="bc-mcp-server" APP_SERVICE_PLAN="bc-mcp-plan" SKU="B1" # Basic tier, adjust as needed # Display banner echo "╔═══════════════════════════════════════════════════════╗" echo "║ ║" echo "║ BC-MCP Server Azure Deployment ║" echo "║ ║" echo "╚═══════════════════════════════════════════════════════╝" # Log in to Azure echo "Logging in to Azure..." az login # Check Azure CLI version az_version=$(az --version | head -1) echo "Using Azure CLI: $az_version" # Check for existing resources to prevent redeployment errors echo "Checking for existing resources..." existing_group=$(az group exists --name $RESOURCE_GROUP) if [ "$existing_group" = "true" ]; then echo "Resource group already exists: $RESOURCE_GROUP" else echo "Creating resource group (if it doesn't exist)..." az group create --name $RESOURCE_GROUP --location $LOCATION fi # Check for existing app service plan existing_plan=$(az appservice plan list --query "[?name=='$APP_SERVICE_PLAN'].name" -o tsv) if [ -z "$existing_plan" ]; then echo "Creating App Service Plan..." az appservice plan create --name $APP_SERVICE_PLAN --resource-group $RESOURCE_GROUP --sku $SKU else echo "App Service Plan already exists: $APP_SERVICE_PLAN" fi # Check for existing web app existing_app=$(az webapp list --query "[?name=='$APP_NAME'].name" -o tsv) if [ -z "$existing_app" ]; then echo "Creating Web App..." az webapp create --name $APP_NAME --resource-group $RESOURCE_GROUP --plan $APP_SERVICE_PLAN --runtime "NODE|16-lts" else echo "Web App already exists: $APP_NAME" fi # Configure environment variables echo "Configuring environment variables..." az webapp config appsettings set --name $APP_NAME --resource-group $RESOURCE_GROUP \ --settings \ MCP_SERVER_PORT=8080 \ MCP_SERVER_HOST=0.0.0.0 \ WEBSITE_NODE_DEFAULT_VERSION=~16 \ SCM_DO_BUILD_DURING_DEPLOYMENT=true # Configure correct startup command echo "Setting startup command..." az webapp config set --name $APP_NAME --resource-group $RESOURCE_GROUP --startup-file "node mcp-server.js" # Enable logging echo "Enabling detailed logging..." az webapp log config --name $APP_NAME --resource-group $RESOURCE_GROUP --application-logging filesystem --detailed-error-messages true --failed-request-tracing true --web-server-logging filesystem # Deploy code using local git or GitHub read -p "Deploy from (1) GitHub or (2) local zip deployment? (1/2): " deploy_type if [ "$deploy_type" = "1" ]; then read -p "Enter your GitHub repository URL: " github_repo read -p "Enter your GitHub branch (default: main): " github_branch github_branch=${github_branch:-main} echo "Setting up GitHub deployment..." az webapp deployment source config --name $APP_NAME --resource-group $RESOURCE_GROUP \ --repo-url $github_repo --branch $github_branch --manual-integration elif [ "$deploy_type" = "2" ]; then echo "Preparing for zip deployment..." # Create a zip file of the application zip -r deploy.zip ./* -x "node_modules/*" "*.git*" echo "Deploying code via zip upload..." az webapp deployment source config-zip --resource-group $RESOURCE_GROUP --name $APP_NAME --src deploy.zip # Clean up rm deploy.zip else echo "Invalid option. Skipping code deployment." fi # Display deployment information echo "╔═══════════════════════════════════════════════════════╗" echo "║ ║" echo "║ Deployment Complete! ║" echo "║ ║" echo "║ Your MCP server is now available at: ║" echo "║ https://$APP_NAME.azurewebsites.net ║" echo "║ ║" echo "║ Connection URL for Cursor: ║" echo "║ https://$APP_NAME.azurewebsites.net/cursorrules ║" echo "║ ║" echo "║ View logs: https://$APP_NAME.scm.azurewebsites.net ║" echo "║ ║" echo "╚═══════════════════════════════════════════════════════╝" # Check if deployment was successful echo "Checking deployment status..." sleep 10 # Give Azure some time to process response=$(curl -s -o /dev/null -w "%{http_code}" https://$APP_NAME.azurewebsites.net) if [ "$response" = "200" ] || [ "$response" = "302" ]; then echo "✅ Deployment verified successfully (HTTP Status: $response)" else echo "⚠️ Deployment might have issues (HTTP Status: $response)" echo "Check logs at: https://$APP_NAME.scm.azurewebsites.net/api/logs/docker" fi