matrixcloud / api /openapi.yaml
github-actions[bot]
Deploy from 4dfd54f2
857a91b
Raw
History Blame Contribute Delete
20.2 kB
openapi: 3.0.3
info:
title: Matrix Runtime API
description: |
Execution plane for Matrix Cloud. Runs MCP sandboxes, inspects Hugging Face
models and (in future) agents/tools. Sandboxes are a thin alias over jobs of
type mcp.test.
version: 0.2.0
servers:
- url: http://localhost:8080
description: Local
security:
- bearerAuth: []
- {}
paths:
/v1/health:
get:
summary: Liveness and identity
security: []
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
status: { type: string, example: ok }
runtime_id: { type: string, example: rt_local }
mode: { type: string, example: local-dev }
version: { type: string, example: 0.1.0 }
/v1/capabilities:
get:
summary: Runtime capabilities and limits
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/Capabilities"
/v1/ready:
get:
summary: Readiness probe (checks + warnings)
security: []
responses:
"200": { description: Ready }
"503": { description: Not ready (a core check failed) }
/v1/version:
get:
summary: Build and version metadata
security: []
responses:
"200": { description: OK }
/v1/system/storage:
get:
summary: Data-directory storage usage and free disk
responses:
"200": { description: OK }
/v1/policies:
get:
summary: Enforced guardrails (limits + command allow/deny lists)
responses:
"200": { description: OK }
/v1/runtimes:
get:
summary: Runtimes connected to this control surface
responses:
"200": { description: OK }
/v1/catalog:
get:
summary: Curated catalog of MCP servers and models
responses:
"200": { description: OK }
/v1/auth/forgot:
post:
summary: Request a password-reset email (always 200)
security: []
responses:
"200": { description: OK }
/v1/auth/reset:
post:
summary: Set a new password from a reset token
security: []
responses:
"200": { description: OK }
"400": { description: Invalid or expired token }
/v1/auth/verify:
post:
summary: Confirm an email-verification token
security: []
responses:
"200": { description: OK }
/v1/matrixshell/status:
get:
summary: MatrixShell install status (403 when disabled)
responses:
"200": { description: OK }
"403": { description: MatrixShell disabled }
/v1/matrixshell/install:
post:
summary: Install MatrixShell into the local sandbox (job)
responses:
"202": { description: Job accepted }
"403": { description: MatrixShell disabled }
/v1/matrixshell/exec:
post:
summary: Run a command in the MatrixShell sandbox (denylisted)
responses:
"200": { description: OK }
"403": { description: Disabled or blocked by denylist }
/v1/cloud/runtimes:
get:
summary: List the workspace's registered runtimes
responses:
"200": { description: OK }
/v1/cloud/runtimes/register:
post:
summary: Register a runtime using a workspace join token
security: []
responses:
"201": { description: Registered (returns a runtime token) }
"401": { description: Invalid join token }
/v1/cloud/runtimes/heartbeat:
post:
summary: Runtime liveness heartbeat (runtime-token auth)
security: []
responses:
"200": { description: OK }
"401": { description: Invalid runtime token }
/v1/cloud/join-tokens:
get:
summary: List active join tokens
responses:
"200": { description: OK }
post:
summary: Mint a single/limited-use join token
responses:
"201": { description: Created (secret shown once) }
/v1/cloud/providers:
get:
summary: List BYO provider credentials (hints only)
responses:
"200": { description: OK }
post:
summary: Store a BYO provider token (encrypted at rest)
responses:
"201": { description: Created }
/v1/cloud/usage:
get:
summary: 30-day usage metering by kind
responses:
"200": { description: OK }
/v1/cloud/audit:
get:
summary: Recent audit events for the workspace
responses:
"200": { description: OK }
/v1/auth/signup:
post:
summary: Create a workspace + owner account (multitenant)
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [name, email, password]
properties:
name: { type: string }
email: { type: string, format: email }
password: { type: string, minLength: 6 }
workspace: { type: string }
responses:
"201":
description: Created
content:
application/json:
schema: { $ref: "#/components/schemas/AuthResult" }
"409": { $ref: "#/components/responses/Error" }
/v1/auth/login:
post:
summary: Authenticate and start a session
security: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [email, password]
properties:
email: { type: string, format: email }
password: { type: string }
responses:
"200":
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/AuthResult" }
"401": { $ref: "#/components/responses/Error" }
/v1/auth/me:
get:
summary: Current authenticated user
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
user: { $ref: "#/components/schemas/AuthUser" }
"401": { $ref: "#/components/responses/Error" }
/v1/auth/logout:
post:
summary: End the current session (?all=true ends every session)
responses:
"200": { description: OK }
/v1/model-sources/huggingface/search:
get:
summary: Search Hugging Face models (server-side proxy, sorted by downloads)
security: []
parameters:
- { name: q, in: query, schema: { type: string } }
- { name: task, in: query, schema: { type: string } }
- { name: limit, in: query, schema: { type: integer } }
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
live: { type: boolean }
items: { type: array, items: { type: object } }
/v1/model-sources/resolve:
post:
summary: Resolve a source into a model-profile preview (HF resolved live)
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sourceType: { type: string, example: huggingface }
externalId: { type: string }
model: { type: string }
sourceUri: { type: string }
provider: { type: string }
path: { type: string }
branch: { type: string }
private: { type: boolean }
responses:
"200": { description: Profile preview }
"502": { $ref: "#/components/responses/Error" }
/v1/model-profiles:
get:
summary: List model profiles for the workspace
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
profiles: { type: array, items: { $ref: "#/components/schemas/ModelProfile" } }
"401": { $ref: "#/components/responses/Error" }
post:
summary: Import (create) a model profile
requestBody:
required: true
content:
application/json:
schema: { $ref: "#/components/schemas/ModelProfileImport" }
responses:
"201":
description: Created
content:
application/json:
schema:
type: object
properties:
profile: { $ref: "#/components/schemas/ModelProfile" }
"401": { $ref: "#/components/responses/Error" }
/v1/model-profiles/{id}/attach:
post:
summary: Attach/install a profile onto a runtime (creates a model.attach job)
parameters:
- { name: id, in: path, required: true, schema: { type: string } }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [runtimeId]
properties:
runtimeId: { type: string }
installMode: { type: string, enum: [pull_from_source, mount_volume, external_endpoint] }
servingEngine: { type: string, example: vLLM }
responses:
"202":
description: Accepted
content:
application/json:
schema:
type: object
properties:
installation_id: { type: string }
profile_id: { type: string }
job_id: { type: string }
events_url: { type: string }
"404": { $ref: "#/components/responses/Error" }
/v1/model-installations:
get:
summary: List runtime-cache installations for the workspace (with progress)
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
installations: { type: array, items: { $ref: "#/components/schemas/ModelInstallation" } }
"401": { $ref: "#/components/responses/Error" }
/v1/jobs:
get:
summary: List jobs (newest first)
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
jobs:
type: array
items: { $ref: "#/components/schemas/Job" }
post:
summary: Create a job
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateJobRequest"
responses:
"202":
description: Accepted
content:
application/json:
schema:
$ref: "#/components/schemas/CreateJobResponse"
"400": { $ref: "#/components/responses/Error" }
"422": { $ref: "#/components/responses/Error" }
/v1/jobs/{job_id}:
parameters:
- $ref: "#/components/parameters/JobID"
get:
summary: Read a job
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/Job"
"404": { $ref: "#/components/responses/Error" }
delete:
summary: Cancel/delete a job
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
ok: { type: boolean }
status: { type: string }
"404": { $ref: "#/components/responses/Error" }
/v1/jobs/{job_id}/events:
parameters:
- $ref: "#/components/parameters/JobID"
get:
summary: Stream job events (SSE)
responses:
"200":
description: text/event-stream of Event objects
content:
text/event-stream:
schema:
$ref: "#/components/schemas/Event"
/v1/sandbox/sessions:
post:
summary: Create a sandbox session (alias over mcp.test)
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SandboxRequest"
responses:
"202":
description: Accepted
content:
application/json:
schema:
$ref: "#/components/schemas/SandboxResponse"
/v1/sandbox/sessions/{session_id}:
parameters:
- $ref: "#/components/parameters/SessionID"
get:
summary: Read a sandbox session
responses:
"200": { description: OK }
"404": { $ref: "#/components/responses/Error" }
delete:
summary: Delete a sandbox session
responses:
"200": { description: OK }
"404": { $ref: "#/components/responses/Error" }
/v1/sandbox/sessions/{session_id}/events:
parameters:
- $ref: "#/components/parameters/SessionID"
get:
summary: Stream sandbox events (SSE)
responses:
"200":
description: text/event-stream of Event objects
/v1/sandbox/sessions/{session_id}/tools:
parameters:
- $ref: "#/components/parameters/SessionID"
get:
summary: List tools advertised by the sandbox's MCP server
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
tools:
type: array
items: { $ref: "#/components/schemas/Tool" }
"409": { $ref: "#/components/responses/Error" }
/v1/sandbox/sessions/{session_id}/tools/call:
parameters:
- $ref: "#/components/parameters/SessionID"
post:
summary: Call a tool in the sandbox
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [name]
properties:
name: { type: string }
arguments: { type: object, additionalProperties: true }
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
properties:
ok: { type: boolean }
result: { type: object, additionalProperties: true }
"409": { $ref: "#/components/responses/Error" }
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
parameters:
JobID:
name: job_id
in: path
required: true
schema: { type: string }
SessionID:
name: session_id
in: path
required: true
schema: { type: string }
responses:
Error:
description: Error
content:
application/json:
schema:
type: object
properties:
error: { type: string }
status: { type: integer }
schemas:
ModelProfile:
type: object
properties:
id: { type: string }
source_type: { type: string }
source_uri: { type: string }
provider: { type: string }
external_id: { type: string }
display_name: { type: string }
task: { type: string }
library: { type: string }
license: { type: string }
tags: { type: array, items: { type: string } }
status:
type: string
enum: [profile_only, queued, downloading, installed, attached, ready, failed, gated, incompatible]
ModelProfileImport:
type: object
properties:
source_type: { type: string }
source_uri: { type: string }
provider: { type: string }
external_id: { type: string }
display_name: { type: string }
task: { type: string }
library: { type: string }
license: { type: string }
tags: { type: array, items: { type: string } }
metadata: { type: object, additionalProperties: true }
ModelInstallation:
type: object
properties:
id: { type: string }
model_profile_id: { type: string }
runtime_id: { type: string }
install_mode: { type: string }
serving_engine: { type: string }
status:
type: string
enum: [queued, checking, downloading, verifying, attached, ready, failed]
progress: { type: integer }
local_path: { type: string }
model_name: { type: string }
provider: { type: string }
job_id: { type: string }
AuthUser:
type: object
properties:
id: { type: string }
name: { type: string }
email: { type: string }
role: { type: string, example: Owner }
workspace: { type: string }
workspace_slug: { type: string }
workspace_id: { type: string }
AuthResult:
type: object
properties:
token: { type: string, description: Session bearer token }
user: { $ref: "#/components/schemas/AuthUser" }
Capabilities:
type: object
properties:
capabilities:
type: array
items: { type: string }
example: [mcp.test, mcp.run, model.inspect, model.pull, agent.run, tool.run]
runtimes:
type: object
properties:
node: { type: boolean }
python: { type: boolean }
ollama: { type: boolean }
vllm: { type: boolean }
sglang: { type: boolean }
limits:
type: object
properties:
max_ttl_seconds: { type: integer }
max_concurrent_jobs: { type: integer }
CreateJobRequest:
type: object
required: [type]
properties:
type:
type: string
enum: [mcp.test, mcp.run, model.inspect, model.pull, model.preload, agent.run, tool.run]
ttl_seconds: { type: integer, example: 600 }
payload:
type: object
additionalProperties: true
CreateJobResponse:
type: object
properties:
job_id: { type: string }
status: { type: string }
events_url: { type: string }
Job:
type: object
properties:
job_id: { type: string }
type: { type: string }
status:
type: string
enum: [queued, running, complete, error, expired, cancelled]
created_at: { type: string, format: date-time }
expires_at: { type: string, format: date-time }
result: { nullable: true }
error: { type: string }
Event:
type: object
properties:
step: { type: string }
status:
type: string
enum: [queued, start, ok, error, running, expired, cancelled, complete]
message: { type: string }
data: { type: object, additionalProperties: true }
SandboxRequest:
type: object
required: [start_command]
properties:
entity_id: { type: string }
ttl_seconds: { type: integer }
runtime: { type: string, example: node }
transport: { type: string, example: stdio }
start_command: { type: string }
env:
type: object
additionalProperties: { type: string }
SandboxResponse:
type: object
properties:
session_id: { type: string }
job_id: { type: string }
status: { type: string }
expires_at: { type: string, format: date-time }
events_url: { type: string }
Tool:
type: object
properties:
name: { type: string }
description: { type: string }
input_schema: { type: object, additionalProperties: true }