739 lines
15 KiB
Markdown
739 lines
15 KiB
Markdown
# 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:**
|
|
|
|
| Name | Type | Required | Description |
|
|
|------|------|----------|-------------|
|
|
| `query` | string | Yes | SQL SELECT query to execute. Only read-only SELECT queries are permitted. |
|
|
| `explain` | boolean | No | If 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:**
|
|
|
|
| Field | Type | Description |
|
|
|-------|------|-------------|
|
|
| `workspace.id` | integer | Workspace ID |
|
|
| `workspace.name` | string | Workspace name |
|
|
| `subscription.status` | string | active, trialing, past_due, canceled |
|
|
| `subscription.billing_cycle` | string | monthly, yearly |
|
|
| `subscription.days_until_renewal` | integer | Days until next billing |
|
|
| `subscription.on_trial` | boolean | Currently in trial period |
|
|
| `packages` | array | Active 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:**
|
|
|
|
| Name | Type | Required | Description |
|
|
|------|------|----------|-------------|
|
|
| `status` | string | No | Filter by status: paid, pending, overdue, void |
|
|
| `limit` | integer | No | Maximum 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:**
|
|
|
|
| Field | Type | Description |
|
|
|-------|------|-------------|
|
|
| `invoice_number` | string | Unique invoice identifier |
|
|
| `status` | string | paid, pending, overdue, void |
|
|
| `total` | number | Total amount including tax |
|
|
| `amount_due` | number | Remaining amount to pay |
|
|
| `is_overdue` | boolean | Past 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:**
|
|
|
|
| Name | Type | Required | Description |
|
|
|------|------|----------|-------------|
|
|
| `package_code` | string | Yes | Code of the new package (e.g., agency, enterprise) |
|
|
| `preview` | boolean | No | If true, only preview without executing. Default: `true` |
|
|
| `immediate` | boolean | No | If 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:**
|
|
|
|
| Name | Type | Required | Description |
|
|
|------|------|----------|-------------|
|
|
| `code` | string | Yes | Unique coupon code (uppercase letters, numbers, hyphens, underscores) |
|
|
| `name` | string | Yes | Display name for the coupon |
|
|
| `type` | string | No | Discount type: percentage or fixed_amount. Default: percentage |
|
|
| `value` | number | Yes | Discount value (1-100 for percentage, or fixed amount) |
|
|
| `duration` | string | No | How long discount applies: once, repeating, forever. Default: once |
|
|
| `max_uses` | integer | No | Maximum total uses (null for unlimited) |
|
|
| `valid_until` | string | No | Expiry 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:**
|
|
|
|
| Code | Description |
|
|
|------|-------------|
|
|
| `VALIDATION_ERROR` | Invalid parameters |
|
|
| `FORBIDDEN_QUERY` | SQL query blocked by security |
|
|
| `MISSING_WORKSPACE_CONTEXT` | Workspace authentication required |
|
|
| `QUOTA_EXCEEDED` | Usage limit reached |
|
|
| `NOT_FOUND` | Resource not found |
|
|
| `DEPENDENCY_NOT_MET` | Tool prerequisites not satisfied |
|
|
| `INTERNAL_ERROR` | Unexpected server error |
|
|
|
|
---
|
|
|
|
## Learn More
|
|
|
|
- [Creating MCP Tools](/packages/mcp/creating-mcp-tools) - Build custom tools
|
|
- [SQL Security](/packages/mcp/sql-security) - Query security rules
|
|
- [Workspace Context](/packages/mcp/workspace) - Multi-tenant isolation
|
|
- [Quotas](/packages/mcp/quotas) - Usage limits
|
|
- [Analytics](/packages/mcp/analytics) - Usage tracking
|