Skip to the content.

REST API Reference

All API endpoints require Bearer token authentication (except /api/health).

Authorization: Bearer <your-api-key>

Base URL: http://localhost:8000


Health Check

GET /api/health

Liveness check. No authentication required.

Response:

{"status": "ok"}

Datasources

POST /api/datasources/list

List all configured datasources.

Request Body:

{}

Response:

[
  {
    "name": "my-postgres",
    "type": "postgresql",
    "description": "Production PostgreSQL"
  }
]

POST /api/datasources/detail

Get detailed information about a datasource.

Request Body:

{
  "datasource_name": "my-postgres"
}

POST /api/datasources/test

Test connectivity to a datasource.

Request Body:

{
  "datasource_name": "my-postgres"
}

Response:

{
  "status": "ok",
  "message": "Connection successful"
}

POST /api/datasources/register

Register a new datasource at runtime (no restart required).

Request Body:

{
  "name": "new-db",
  "type": "mysql",
  "connection": {
    "host": "127.0.0.1",
    "port": 3306,
    "username": "root",
    "password": "secret",
    "default_database": "mydb"
  }
}

POST /api/datasources/unregister

Remove a datasource at runtime.

Request Body:

{
  "datasource_name": "new-db"
}

Databases

POST /api/databases/list

List databases available in a datasource.

Request Body:

{
  "datasource_name": "my-postgres"
}

Response:

[
  {"name": "mydb", "comment": "Main application database"},
  {"name": "analytics", "comment": ""}
]

Schema

POST /api/schema/get

Get full schema (tables and columns) for a database.

Request Body:

{
  "datasource_name": "my-postgres",
  "database": "mydb"
}

Response:

{
  "tables": [
    {
      "name": "users",
      "columns": [
        {"name": "id", "type": "INT4", "nullable": false, "comment": "Primary key"},
        {"name": "username", "type": "VARCHAR", "nullable": false, "comment": ""}
      ]
    }
  ]
}

POST /api/schema/table

Get detailed information about a specific table.

Request Body:

{
  "datasource_name": "my-postgres",
  "database": "mydb",
  "table": "users"
}

POST /api/schema/view

Get detailed information about a specific view.

Request Body:

{
  "datasource_name": "my-postgres",
  "database": "mydb",
  "view": "active_users_view"
}

Query

POST /api/query/execute

Execute a SQL query.

Request Body:

{
  "datasource_name": "my-postgres",
  "database": "mydb",
  "sql": "SELECT id, username FROM users LIMIT 10"
}

Response:

{
  "columns": ["id", "username"],
  "rows": [[1, "alice"], [2, "bob"]],
  "row_count": 2
}

POST /api/query/explain

Get the execution plan for a query.

Request Body:

{
  "datasource_name": "my-postgres",
  "database": "mydb",
  "sql": "SELECT * FROM users WHERE id = 1"
}

Async Query

POST /api/async/query/submit

Submit a long-running query for async execution.

Request Body:

{
  "datasource_name": "my-postgres",
  "database": "mydb",
  "sql": "SELECT * FROM large_table"
}

Response:

{
  "query_id": "abc123-def456"
}

POST /api/async/query/status

Check the status of an async query.

Request Body:

{
  "query_id": "abc123-def456"
}

Response:

{
  "query_id": "abc123-def456",
  "status": "completed"
}

POST /api/async/query/result

Retrieve the result of a completed async query.

Request Body:

{
  "query_id": "abc123-def456"
}

POST /api/async/query/cancel

Cancel a running async query.

Request Body:

{
  "query_id": "abc123-def456"
}

Tools

GET /api/tools

List all registered tools (built-in and dynamic).

Response:

[
  {
    "name": "get_user_orders",
    "description": "Get recent orders for a user",
    "parameters": [...]
  }
]

POST /api/tool/register

Register a new dynamic tool.

Request Body:

{
  "name": "get_user_orders",
  "description": "Get recent orders for a user",
  "datasource": "my-postgres",
  "database": "mydb",
  "sql": "SELECT * FROM orders WHERE user_id = :user_id LIMIT :limit",
  "parameters": [
    {"name": "user_id", "type": "integer", "required": true},
    {"name": "limit", "type": "integer", "default": 10}
  ]
}

POST /api/tool/unregister

Remove a dynamic tool.

Request Body:

{
  "tool_name": "get_user_orders"
}

POST /api/tool/{name}

Execute a registered tool by name.

Request Body:

{
  "user_id": 42,
  "limit": 5
}

MCP Endpoint

POST /mcp

JSON-RPC 2.0 endpoint for MCP protocol.

Request Body:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_datasources",
    "arguments": {}
  }
}

See MCP Tools for all available tool names and parameters.