MSL Developer Guide

Complete guide to building AI-powered applications with MSL (Macincode Scripting Language) using .mcn files

Getting Started

Installation

git clone <repository>
cd msl
# No installation required - use immediately
python run_msl.py run script.mcn

Your First MSL Script

Create hello.mcn:

var name = "World"
log "Hello " + name + "!"

Run it:

python run_msl.py run hello.mcn

Language Syntax

Variables

var name = "Alice"
var age = 25
var is_active = true
var scores = [85, 92, 78]

Conditionals

if age >= 18
    log "Adult"
else
    log "Minor"

Loops

var counter = 0
while counter < 5
    log "Count: " + counter
    counter = counter + 1

Error Handling

try
    var result = risky_operation()
catch
    log "Error: " + error

Built-in Functions

Database Operations

// Query database
var users = query("SELECT * FROM users WHERE age > ?", (18,))

// Insert data
query("INSERT INTO users (name, email) VALUES (?, ?)", 
      ("Alice", "alice@example.com"))

API Calls

// HTTP request
var response = trigger("https://api.example.com/data", 
                      {"key": "value"}, "POST")

// Webhook
trigger("https://hooks.slack.com/webhook", 
        {"text": "Hello from MSL"})

AI Integration

// AI analysis
var summary = ai("Summarize this data: " + users)

// Context-aware AI
var user_name = "Alice"
var recommendation = ai("Suggest training for this user")

MSL 2.0 Features

Type Hints (Optional)

type "username" "string"
type "age" "number"
type "is_admin" "boolean"

var username = "alice"  // ✓ Valid
var age = 25           // ✓ Valid

Package System

// Load packages
use "db"
use "http"
use "ai"

// Use package functions
var data = get_json("https://api.example.com/users")
var result = batch_insert("users", data)

Parallel Tasks

// Create async tasks
task "email" "trigger" "https://mail.api.com/send" 
     {"to": "user@example.com"}
task "log" "query" "INSERT INTO logs VALUES (?)" 
     ("User registered")

// Wait for completion
var results = await "email" "log"

Package System

Database Package

use "db"

batch_insert("users", [
    {"name": "Alice"}, 
    {"name": "Bob"}
])
backup_table("users")

HTTP Package

use "http"

var data = get_json("https://api.example.com/data")
post_form("https://forms.example.com", 
          {"name": "Alice"})

AI Package

use "ai"

var sentiment = analyze_sentiment("I love this!")
var summary = summarize("Long text here...")
var trend = predict_trend([1, 2, 3, 4, 5])

Server Runtime

Deployment Commands

# Serve single script
python run_msl.py serve --file api_service.mcn --port 8000

# Serve directory
python run_msl.py serve --dir examples/ --port 8000

API Script Example

// api_endpoint.mcn
var user_id = request_data.user_id
var user = query("SELECT * FROM users WHERE id = ?", (user_id,))

if user
    var response = {"status": "success", "user": user[0]}
else
    var response = {"status": "error", "message": "User not found"}

response  // Automatically returned as JSON

Best Practices

Error Handling

try
    var api_result = trigger("https://external-api.com/data")
    log "Success: " + api_result.data
catch
    log "API call failed: " + error
    var api_result = {"data": "fallback_data"}

Database Security

// ✓ Good: Parameterized queries
var user_id = 123
var user = query("SELECT * FROM users WHERE id = ?", (user_id,))

// ✗ Bad: String concatenation
// query("SELECT * FROM users WHERE id = " + user_id)

AI Context

// Provide context for better AI responses
var context = "User: " + user_name + ", Role: " + user_role
var ai_response = ai("Generate welcome message. Context: " + context)