Skip to content

API Reference: MCP Tools

Complete reference for all MCP tools including parameters, response formats, and error handling.

Database Tools

query_database

Execute read-only SQL queries against the database.

Description: Execute a read-only SQL SELECT query against the database

Parameters:

NameTypeRequiredDescription
querystringYesSQL SELECT query to execute. Only read-only SELECT queries are permitted.
explainbooleanNoIf true, runs EXPLAIN on the query instead of executing it. Useful for query optimization. Default: false

Example Request:

json
{
    "tool": "query_database",
    "arguments": {
        "query": "SELECT id, title, status FROM posts WHERE status = 'published' LIMIT 10"
    }
}

Success Response:

json
[
    {"id": 1, "title": "First Post", "status": "published"},
    {"id": 2, "title": "Second Post", "status": "published"}
]

With EXPLAIN:

json
{
    "tool": "query_database",
    "arguments": {
        "query": "SELECT * FROM posts WHERE status = 'published'",
        "explain": true
    }
}

EXPLAIN Response:

json
{
    "explain": [
        {
            "id": 1,
            "select_type": "SIMPLE",
            "table": "posts",
            "type": "ref",
            "key": "idx_status",
            "rows": 150,
            "Extra": "Using index"
        }
    ],
    "query": "SELECT * FROM posts WHERE status = 'published' LIMIT 1000",
    "interpretation": [
        {
            "table": "posts",
            "analysis": [
                "GOOD: Using index: idx_status"
            ]
        }
    ]
}

Error Response - Forbidden Query:

json
{
    "error": "Query rejected: Disallowed SQL keyword 'DELETE' detected"
}

Error Response - Invalid Structure:

json
{
    "error": "Query rejected: Query must begin with SELECT"
}

Security Notes:

  • Only SELECT queries are allowed
  • Blocked keywords: INSERT, UPDATE, DELETE, DROP, TRUNCATE, ALTER, CREATE, GRANT, REVOKE
  • UNION queries are blocked
  • System tables (information_schema, mysql.*) are blocked
  • Automatic LIMIT applied if not specified
  • Use read-only database connection

list_tables

List all database tables in the application.

Description: List all database tables

Parameters: None

Example Request:

json
{
    "tool": "list_tables",
    "arguments": {}
}

Success Response:

json
[
    "users",
    "posts",
    "comments",
    "tags",
    "categories",
    "media",
    "migrations",
    "jobs"
]

Security Notes:

  • Returns table names only, not structure
  • Some tables may be filtered based on configuration

Commerce Tools

get_billing_status

Get billing status for the authenticated workspace.

Description: Get billing status for your workspace including subscription, current plan, and billing period

Parameters: None (workspace from authentication context)

Requires: Workspace Context

Example Request:

json
{
    "tool": "get_billing_status",
    "arguments": {}
}

Success Response:

json
{
    "workspace": {
        "id": 42,
        "name": "Acme Corp"
    },
    "subscription": {
        "id": 123,
        "status": "active",
        "gateway": "stripe",
        "billing_cycle": "monthly",
        "current_period_start": "2024-01-01T00:00:00+00:00",
        "current_period_end": "2024-02-01T00:00:00+00:00",
        "days_until_renewal": 15,
        "cancel_at_period_end": false,
        "on_trial": false,
        "trial_ends_at": null
    },
    "packages": [
        {
            "code": "professional",
            "name": "Professional Plan",
            "status": "active",
            "expires_at": null
        }
    ]
}

Response Fields:

FieldTypeDescription
workspace.idintegerWorkspace ID
workspace.namestringWorkspace name
subscription.statusstringactive, trialing, past_due, canceled
subscription.billing_cyclestringmonthly, yearly
subscription.days_until_renewalintegerDays until next billing
subscription.on_trialbooleanCurrently in trial period
packagesarrayActive feature packages

Error Response - No Workspace Context:

json
{
    "error": "MCP tool 'get_billing_status' requires workspace context. Authenticate with an API key or user session."
}

list_invoices

List invoices for the authenticated workspace.

Description: List invoices for your workspace with optional status filter

Parameters:

NameTypeRequiredDescription
statusstringNoFilter by status: paid, pending, overdue, void
limitintegerNoMaximum invoices to return. Default: 10, Max: 50

Requires: Workspace Context

Example Request:

json
{
    "tool": "list_invoices",
    "arguments": {
        "status": "paid",
        "limit": 5
    }
}

Success Response:

json
{
    "workspace_id": 42,
    "count": 5,
    "invoices": [
        {
            "id": 1001,
            "invoice_number": "INV-2024-001",
            "status": "paid",
            "subtotal": 99.00,
            "discount_amount": 0.00,
            "tax_amount": 19.80,
            "total": 118.80,
            "amount_paid": 118.80,
            "amount_due": 0.00,
            "currency": "GBP",
            "issue_date": "2024-01-01",
            "due_date": "2024-01-15",
            "paid_at": "2024-01-10T14:30:00+00:00",
            "is_overdue": false,
            "order_number": "ORD-2024-001"
        }
    ]
}

Response Fields:

FieldTypeDescription
invoice_numberstringUnique invoice identifier
statusstringpaid, pending, overdue, void
totalnumberTotal amount including tax
amount_duenumberRemaining amount to pay
is_overduebooleanPast due date with unpaid balance

upgrade_plan

Preview or execute a plan upgrade/downgrade.

Description: Preview or execute a plan upgrade/downgrade for your workspace subscription

Parameters:

NameTypeRequiredDescription
package_codestringYesCode of the new package (e.g., agency, enterprise)
previewbooleanNoIf true, only preview without executing. Default: true
immediatebooleanNoIf true, apply immediately; false schedules for period end. Default: true

Requires: Workspace Context

Example Request - Preview:

json
{
    "tool": "upgrade_plan",
    "arguments": {
        "package_code": "enterprise",
        "preview": true
    }
}

Preview Response:

json
{
    "preview": true,
    "current_package": "professional",
    "new_package": "enterprise",
    "proration": {
        "is_upgrade": true,
        "is_downgrade": false,
        "current_plan_price": 99.00,
        "new_plan_price": 299.00,
        "credit_amount": 49.50,
        "prorated_new_cost": 149.50,
        "net_amount": 100.00,
        "requires_payment": true,
        "days_remaining": 15,
        "currency": "GBP"
    }
}

Execute Response:

json
{
    "success": true,
    "immediate": true,
    "current_package": "professional",
    "new_package": "enterprise",
    "proration": {
        "is_upgrade": true,
        "net_amount": 100.00
    },
    "subscription_status": "active"
}

Error Response - Package Not Found:

json
{
    "error": "Package not found",
    "available_packages": ["starter", "professional", "agency", "enterprise"]
}

create_coupon

Create a new discount coupon code.

Description: Create a new discount coupon code

Parameters:

NameTypeRequiredDescription
codestringYesUnique coupon code (uppercase letters, numbers, hyphens, underscores)
namestringYesDisplay name for the coupon
typestringNoDiscount type: percentage or fixed_amount. Default: percentage
valuenumberYesDiscount value (1-100 for percentage, or fixed amount)
durationstringNoHow long discount applies: once, repeating, forever. Default: once
max_usesintegerNoMaximum total uses (null for unlimited)
valid_untilstringNoExpiry date in YYYY-MM-DD format

Example Request:

json
{
    "tool": "create_coupon",
    "arguments": {
        "code": "SUMMER25",
        "name": "Summer Sale 2024",
        "type": "percentage",
        "value": 25,
        "duration": "once",
        "max_uses": 100,
        "valid_until": "2024-08-31"
    }
}

Success Response:

json
{
    "success": true,
    "coupon": {
        "id": 42,
        "code": "SUMMER25",
        "name": "Summer Sale 2024",
        "type": "percentage",
        "value": 25.0,
        "duration": "once",
        "max_uses": 100,
        "valid_until": "2024-08-31",
        "is_active": true
    }
}

Error Response - Invalid Code:

json
{
    "error": "Invalid code format. Use only uppercase letters, numbers, hyphens, and underscores."
}

Error Response - Duplicate Code:

json
{
    "error": "A coupon with this code already exists."
}

Error Response - Invalid Percentage:

json
{
    "error": "Percentage value must be between 1 and 100."
}

System Tools

list_sites

List all sites managed by the platform.

Description: List all sites managed by Host Hub

Parameters: None

Example Request:

json
{
    "tool": "list_sites",
    "arguments": {}
}

Success Response:

json
[
    {
        "name": "BioHost",
        "domain": "link.host.uk.com",
        "type": "WordPress"
    },
    {
        "name": "SocialHost",
        "domain": "social.host.uk.com",
        "type": "Laravel"
    },
    {
        "name": "AnalyticsHost",
        "domain": "analytics.host.uk.com",
        "type": "Node.js"
    }
]

list_routes

List all web routes in the application.

Description: List all web routes in the application

Parameters: None

Example Request:

json
{
    "tool": "list_routes",
    "arguments": {}
}

Success Response:

json
[
    {
        "uri": "/",
        "methods": ["GET", "HEAD"],
        "name": "home"
    },
    {
        "uri": "/login",
        "methods": ["GET", "HEAD"],
        "name": "login"
    },
    {
        "uri": "/api/posts",
        "methods": ["GET", "HEAD"],
        "name": "api.posts.index"
    },
    {
        "uri": "/api/posts/{post}",
        "methods": ["GET", "HEAD"],
        "name": "api.posts.show"
    }
]

get_stats

Get current system statistics.

Description: Get current system statistics for Host Hub

Parameters: None

Example Request:

json
{
    "tool": "get_stats",
    "arguments": {}
}

Success Response:

json
{
    "total_sites": 6,
    "active_users": 128,
    "page_views_30d": 12500,
    "server_load": "23%"
}

Common Error Responses

Missing Workspace Context

Tools requiring workspace context return this when no API key or session is provided:

json
{
    "error": "MCP tool 'tool_name' requires workspace context. Authenticate with an API key or user session."
}

HTTP Status: 403

Missing Dependency

When a tool's dependencies aren't satisfied:

json
{
    "error": "dependency_not_met",
    "message": "Dependencies not satisfied for tool 'update_task'",
    "missing": [
        {
            "type": "tool_called",
            "key": "create_plan",
            "description": "A plan must be created before updating tasks"
        }
    ],
    "suggested_order": ["create_plan", "update_task"]
}

HTTP Status: 422

Quota Exceeded

When workspace has exceeded their tool usage quota:

json
{
    "error": "quota_exceeded",
    "message": "Daily tool quota exceeded for this workspace",
    "current_usage": 1000,
    "limit": 1000,
    "resets_at": "2024-01-16T00:00:00+00:00"
}

HTTP Status: 429

Validation Error

When parameters fail validation:

json
{
    "error": "Validation failed",
    "code": "VALIDATION_ERROR",
    "details": {
        "query": ["The query field is required"]
    }
}

HTTP Status: 422

Internal Error

When an unexpected error occurs:

json
{
    "error": "An unexpected error occurred. Please try again.",
    "code": "INTERNAL_ERROR"
}

HTTP Status: 500


Authentication

API Key Authentication

Include your API key in the Authorization header:

bash
curl -X POST https://api.example.com/mcp/tools/call \
    -H "Authorization: Bearer sk_live_xxxxx" \
    -H "Content-Type: application/json" \
    -d '{"tool": "get_billing_status", "arguments": {}}'

Session Authentication

For browser-based access, use session cookies:

javascript
fetch('/mcp/tools/call', {
    method: 'POST',
    credentials: 'include',
    headers: {
        'Content-Type': 'application/json',
        'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
    },
    body: JSON.stringify({
        tool: 'list_invoices',
        arguments: { limit: 10 }
    })
});

MCP Session ID

For tracking dependencies across tool calls, include a session ID:

bash
curl -X POST https://api.example.com/mcp/tools/call \
    -H "Authorization: Bearer sk_live_xxxxx" \
    -H "X-MCP-Session-ID: session_abc123" \
    -H "Content-Type: application/json" \
    -d '{"tool": "update_task", "arguments": {...}}'

Tool Categories

Query Tools

  • query_database - Execute SQL queries
  • list_tables - List database tables

Commerce Tools

  • get_billing_status - Get subscription status
  • list_invoices - List workspace invoices
  • upgrade_plan - Change subscription plan
  • create_coupon - Create discount codes

System Tools

  • list_sites - List managed sites
  • list_routes - List application routes
  • get_stats - Get system statistics

Response Format

All tools return JSON responses. Success responses vary by tool, but error responses follow a consistent format:

json
{
    "error": "Human-readable error message",
    "code": "ERROR_CODE",
    "details": {}  // Optional additional information
}

Common Error Codes:

CodeDescription
VALIDATION_ERRORInvalid parameters
FORBIDDEN_QUERYSQL query blocked by security
MISSING_WORKSPACE_CONTEXTWorkspace authentication required
QUOTA_EXCEEDEDUsage limit reached
NOT_FOUNDResource not found
DEPENDENCY_NOT_METTool prerequisites not satisfied
INTERNAL_ERRORUnexpected server error

Learn More

Released under the EUPL-1.2 License.