cloud

Sync local tests with Shiplight cloud — push and pull YAML test cases, templates, and functions between your repo and the cloud. Requires a Shiplight cloud subscription.

By shiplightai · 585 installs

npx skills add shiplightai/agent-skills --skill cloud

Source repository · Upstream listing

Shiplight Cloud Sync local YAML test cases, templates, and TypeScript functions with the Shiplight cloud using MCP tools. Primarily used to push local tests up to the cloud (and pull cloud tests back down) so they can run on a schedule, be shared with your team, and integrate with CI. Also manages test runs, environments, folders, suites, and accounts via the REST API. Setup Requires a [Shiplight cloud subscription](https://www.shiplight.ai) and a SHIPLIGHT API TOKEN . If cloud MCP tools ( save test case , get test case , etc.) are not in the tool list, the token is missing. Tell the user: Cloud tools are not available. Get your API token from https://app.shiplight.ai/settings/api tokens, set SHIPLIGHT API TOKEN in your project's .env file, then reconnect MCP ( /mcp ). If the user provides a token, append it to the project's .env file (create if needed) and tell them: "Saved to <project /.env — make sure .env is in your .gitignore . Reconnect MCP ( /mcp ) to activate cloud tools." All REST API calls require: Error Handling Error Action 401 Unauthorized Token is invalid or expired — ask user to check SHIPLIGHT API TOKEN in .env 403 Forbidden Insufficient permissions — inform user 404 Not Found Resource not found — report to user 422 Validation Show validation message to user Tool not found Token is missing — guide user through setup above MCP Tools These tools are available when SHIPLIGHT API TOKEN is set. Prefer file path over passing content directly (saves tokens). Always use output format: 'yaml' for get test case . Upload: save test case , save test account , save template , save function Download: get test case , get template , get function Account: save test account — create/update test account with optional storage state path to upload local browser session to cloud ID Tracking After uploading, add the returned cloud ID to the local file so future saves update instead of creating duplicates: Artifact Local file ID field Test case .test.yaml test case id: 123 (top level YAML field) Template templates/ .yaml template id: 45 (top level YAML field) Function helpers/ .ts @function id 67 (JSDoc tag per export) REST API Base URL: https://api.shiplight.ai Test Cases List Test Cases Query parameters: Param Type Description ids string Comma separated test case IDs folderId number Filter by exact folder folderIdRecursive number Filter by folder and all descendants labelIds string Comma separated label IDs (OR logic — matches test cases with ANY of the labels) createdBy string Filter by creator user ID orderBy string Order by field (default: "id" ) order asc \ desc Order direction (default: "desc" ) limit number Max results to return Response: { data: [{ id, title, test flow, folder id, ... }], count: number } Get Test Case Response: { id, title, test flow, folder id } Delete Test Case (soft delete) Marks the test case and its results as deleted (soft delete — records are retained but hidden from queries). Response: { success: true, message: "Test case deleted" } Move Test Cases to Folder Batch update the folder assignment for multiple test cases. Set folder id to null to move to root. Body: { test ids: number[], folder id: number null } Response: { success: true, data: [/ updated test cases /], message: "Successfully updated 2 test cases" } Test Data List Test Data Use ids to fetch specific files: Response: array of { organization id, id, name, s3 path, created at, updated at, usage count? } Get Test Data Response: { organization id, id, name, s3 path, created at, updated at } Download Test Data File Streams the file from S3 as application/octet stream . Test Runs List Test Runs Query parameters: Param Type Description testPlanId number Filter by test plan trigger string Filter by trigger ( "API" , "MANUAL" ) result string Filter by result ( "PASSED" , "FAILED" ) limit number Max results to return Response: array of { id, status, result, trigger, start time, end time, duration, total test case count, passed test case count, failed test case count } Get Test Run Details Note: This endpoint has no /v1/ prefix . Response: Trigger Test Run Run a test case, test suite, or a combination in the cloud. By test case: By test suite: Generic (multiple test cases, suites, and/or labels): By labels (run all test cases with any of the specified labels): Body (all trigger endpoints): Field Type Description trigger string Required. Use "API" test case ids number[] Generic endpoint only — test case IDs to run test suite ids number[] Generic endpoint only — test suite IDs to run label ids number[] Generic endpoint only — label IDs; resolves to test cases with ANY of these labels (OR logic). Can be combined with test case ids and test suite ids environment { id?: string } Override environment Response (201): test run object with { id, status, result, ... } After triggering, poll GET /v1/test runs?limit=1 or GET /run results/<id to check status. Get Test Case Result Note: This endpoint has no /v1/ prefix . Response: { id, test case id, test run id, result, status, duration, environment name, environment url, video, trace, report s3 uri, report, error } The video , trace , and report s3 uri fields contain S3 URIs — use the Artifacts endpoint to download them. The report field contains step by step execution details in report[0].resultJson — each step has description , status , message , duration , and artifact S3 URIs ( screenshot s3 path , messages s3 path , etc.). Environments List Environments Response: array of { id, name, url } Get Environment Response: { id, name, url } Variables Environment scoped variables — the cloud equivalent of variables in playwright.config.ts . Use isSensitive: true for secrets (passwords, API keys) so they're masked in logs. List Variables Response: array of { id, name, value, environment id, is sensitive } Test Accounts List Test Accounts Query: environmentId (number, optional but recommended) — filter by environment. Response: array of { id, name, username, environmentId, loginConfig } Get Test Account Response: { id, name, username, password, environmentId, loginConfig } Forward Email Configs Forward email configs store the Mailgun forwarding address and extraction filters used by email based login and verification flows. All responses are scoped to the organization associated with SHIPLIGHT API TOKEN . List Forward Email Configs Returns all forward email configs for the organization, ordered by created at descending. Response: array of { id, organization id, name, forward email, extraction type, prompt, filter from email, filter to email, filter subject, filter body contains, created at, updated at } Get Forward Email Config Response: { id, organization id, name, forward email, extraction type, prompt, filter from email, filter to email, filter subject, filter body contains, created at, updated at } Fields: Field Type Description id number Forward email config ID organization id string Organization that owns the config name string Human readable config name forward email string Mailgun forwarding inbox address extraction type string Extraction mode, such as verification code , activation link , or custom prompt string Optional custom extraction prompt filter from email string Optional sender filter filter to email string Optional recipient filter filter subject string Optional subject filter filter body contains string Optional body text filter created at string ISO timestamp updated at string ISO timestamp Folders List All Folders Optional query: ?search=keyword Response: array of { id, name, description, parentId, pathIds } List Folders by Parent Omit parentId entirely for root level folders. Response: array of { id, name, description, parentId } Get Folder Response: { id, name, description, parentId, pathIds } Create Folder Body: { name: string, description?: string, parentId?: number null } Response (201): { success: true, data: { id, name, description, parentId } } Update Folder Body: { name?: string, description?: string } Response: { success: true, data: { id, name, description } } Delete Folder Response: { success: true } Move Folder Move a folder to a different parent. Set parentId to null to move to root. Body: { parentId: number null } Response: { success: true } Test Suites Test suites group test cases for organized execution. Use suites to manage which test cases run together. List All Suites Response: array of { id, title, description, testCount, createdAt, updatedAt } Get Suite Returns suite metadata and its test cases. Always use ?fields= to select only the columns you need — without it, the endpoint returns full test case entities which is too expensive. ?fields= accepts a comma separated list of columns: id , title , description , status , folder id , test type , created at , updated at , url Response: Create Suite Body: { title: string, description?: string } Response (201): { id, title, description, createdAt, updatedAt } Update Suite Body: { title?: string, description?: string } Response: { success: true, message: "Test suite updated successfully" } Delete Suite Response: { success: true, message: "Test suite deleted" } Add Test Cases to Suite Body: { testCaseIds: number[] } Response: { success: true, message: "Test cases added to suite successfully" } Remove Test Cases from Suite Body: { testCaseIds: number[] } Response: { success: true, message: "Test cases removed from suite successfully" } Labels Labels let you tag test cases (e.g., daily regression , pre merge ) and trigger runs by label instead of manually managing suites. List Labels Response: { success: true, data: [{ id, name, color, organizationId, createdAt, updatedAt }] } Create Label Body: { name: string, color: string } Response (201): { success: true, data: { id, name, color } } Update Label Body: { name?: string, color?: string } Delete Label Add Labels to Test Case Body: { labelIds: number[] } Remove Labels from Test Case Body: { labelIds: number[] } Get Labels for Test Case Response: { success: true, data: [{ id, name, color }] } Get Test Case IDs by Label Response: { success: true, data: [101, 102, 103] } Templates (Reusable Steps) Reusable test step sequences that can be referenced from test cases via template: in YAML or reference id in the cloud. The API uses the legacy name "reusable steps". Get Template Response: { id, name, description, statements } Test Functions Custom TypeScript functions that can be called from test cases via call: "file export" in YAML. Get Test Function Response: { id, name, description, code, status } Artifacts Download S3 File Download test artifacts (videos, traces, reports) referenced by S3 URIs in test case results. Query: uri (string, required) — S3 URI from test result fields ( video , trace , repo