Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>ConnectMyAppsNew to Visual Studio Code? Get it now.
ConnectMyApps

ConnectMyApps

ConnectMyApps

| (0) | Free
Call Canvas application APIs and build new blocks. Download workflows for local debug in a simulated Canvas environment.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

ConnectMyApps Canvas for VS Code

Build, debug, and manage ConnectMyApps Canvas workflows locally using VS Code's full development environment. This extension provides a headless iPaaS experience — leveraging Canvas's cloud infrastructure while giving you local editing, debugging, diffing, and API testing tools.

Compatible with VS Code and forks such as Cursor and Kiro.

Features

  • Download workflows and edit block code locally with full IntelliSense
  • Debug workflows block-by-block or end-to-end in VS Code's debugger
  • Push code and configuration changes back to Canvas
  • Compare local code against Canvas using the native diff editor
  • Test application connector APIs without managing workflows
  • Load run results and webhook data from Canvas for local inspection
  • Search across workflow data (outputs, logs, sessions)
  • Scaffold AI coding assistant instructions for your preferred tool (Copilot, Cursor, Claude Code, etc.)

Prerequisites

Node.js 22.14.0 or higher is required for debugging and running block scripts.

node -v

If you need to install or upgrade, download the latest version from nodejs.org.

Installation

Install ConnectMyApps from the VS Code Marketplace:

  1. Open the Extensions view (Ctrl+Shift+X)
  2. Search for "ConnectMyApps"
  3. Click Install

Alternatively, install from a .vsix file: Extensions menu > ... > "Install from VSIX".

Getting Started

  1. Log in — Open the command palette (Ctrl+Shift+P) and run cma: Log In. Enter your Canvas consumer key and secret key. Credentials are stored securely in your OS keychain.
  2. Initialize workspace — Run cma: Init Workspace. Choose a folder (recommended: inside your user home directory to avoid permission issues). This creates the workspace structure, config files, and package.json.
  3. Install dependencies — Open a terminal in your workspace root and run:
    npm install
    
  4. Download a workflow — Run cma: Get Workflow, select an account and workflow. Local files are created for all blocks.
  5. Debug — Open a block .mjs file and press F5 to launch the VS Code debugger.

Workspace Structure

After initialization your workspace contains:

workspace/
  blocks/            — Standalone blocks you create locally
  workflows/         — Workflows downloaded from Canvas accounts
  requests/          — REST API request/response files for app connectors
  proxy_modules/     — Runtime modules that emulate Canvas functions locally (do not edit)
  package.json       — Dependencies managed by the extension
  .workspace-config.json — Configuration (see below)
  .gitignore         — Pre-configured ignore patterns

The package.json includes managed dependencies required for local execution: @cma/prism, @cma/util, axios, date-fns, jose, underscore, utf8, uuid, and xml-js. You can add your own dependencies — the extension will never remove them.

Commands

All commands are prefixed with cma: in the command palette (Ctrl+Shift+P / Cmd+Shift+P).

Setup & Authentication

Command Description
cma: Init Workspace Creates or upgrades the workspace. Safe to re-run: updates proxy modules, config, and dependencies without overwriting your code. Prompts for AI agent tool setup on first run.
cma: Log In Authenticates with Canvas using your consumer key and secret key.
cma: Log Out Removes stored credentials from the OS keychain. Does not delete workspace files.
cma: Set Port Number Sets the port for the local credentials bridge server. Run Init Workspace after changing.
cma: Help Opens this README in a read-only editor.

Workflows

Command Description
cma: Get Workflow Downloads a workflow from Canvas. Select account and workflow from a picker.
cma: Get Workflow (This Account) Same as above but auto-detects the account from the current file's path.
cma: Refresh Workflow Re-downloads the current workflow without account/workflow selection. Uses ID-based matching to handle renames.
cma: Run Workflow Runs all or selected blocks in sequence locally. Right-click a manifest.json to access.
cma: Cancel Workflow Stops the currently running local workflow execution.
cma: Deploy Workflow Deploys an undeployed workflow to Canvas (requires isDeployed: false in manifest).
cma: Clear Workflows Deletes all files from the workflows folder.

Pushing Changes to Canvas

Command Description
cma: Push Block Code Pushes the current block's user code to Canvas. Only code within the user-code markers is sent. Mapper blocks are rejected.
cma: Push Block Config Pushes block metadata (name, variables, input links) to Canvas without affecting code.
cma: Push Workflow Code Pushes code for all or selected blocks in a workflow to Canvas in one operation.
cma: Push Workflow Config Pushes workflow metadata (name, description, workflow-level variables) to Canvas.

Comparing with Canvas

Command Description
cma: Compare Block with Canvas Opens a diff view comparing local block code against the Canvas version.
cma: Compare Workflow with Canvas Compares all blocks in a workflow, shows a status summary, and can open all diffs at once.

Blocks

Command Description
cma: New Block Creates a new custom block template for prototyping.
cma: Set Block Inputs Configure which preceding blocks feed into the current block's Datasource.
cma: Copy My Code Copies user code from the current block to the clipboard, ready to paste into Canvas.
cma: Clear Blocks Deletes all custom blocks from the workspace.

Requests (API Testing)

Command Description Shortcut
cma: New Request Creates a new API request file for an application connector.
cma: Execute Request Runs the current request file against the application API. Ctrl+Enter
cma: Duplicate Request Creates a copy of the current request file. Ctrl+Alt+D
cma: Clear Requests Deletes all files from the requests folder.

Webhooks

Command Description
cma: Browse Webhooks Opens a picker to select from available webhooks for the current workflow.
cma: Fetch Webhook by ID or Number Fetches a specific webhook by its ID or run number.
cma: Fetch Last Processed Webhook Fetches the most recently processed webhook for the current workflow.
cma: Refresh Pinned Webhook Re-fetches the pinned webhook data and updates the local webhook.json.

Run Results & History

Command Description
cma: Load Last Run Result (All Blocks) Fetches the latest run result for all blocks from Canvas.
cma: Load Last Run Result (This Block) Fetches the latest run result for the current block only.
cma: Load Run Result by Number (All Blocks) Fetches a specific run result by number for all blocks.
cma: Load Run Result by Number (This Block) Fetches a specific run result by number for the current block.
cma: Save Run to History Archives a workflow run result to local history.
cma: Save Block Run to History Archives a single block's run result to local history.
cma: Save Run Range to History Archives a range of run results to local history (max 50 runs).

Search & Utilities

Command Description
cma: Search Workflow Data Searches across workflow outputs, logs, and sessions. Results appear in the Explorer sidebar.
cma: Update FX Functions Re-fetches all fx functions from Canvas and regenerates the local fx.js.
cma: Pin/Unpin Account Toggles pinned state for an account (pinned accounts appear first in pickers).
cma: Configure AI Agent Tools Scaffolds instructions and type definitions for AI coding assistants.
cma: Restore Config Defaults Resets .workspace-config.json to defaults (preserves initialized timestamp).

Workspace Configuration

The .workspace-config.json file in your workspace root controls extension behavior. It is created automatically during initialization and can be edited manually.

{
    "version": "1.3.1",
    "initialized": "2026-07-01T10:00:00.000Z",
    "request": {
        "defaultNamingMode": "smart",
        "defaultBaseUrl": "https://canvas.connectmyapps.com/api/ApiSend",
        "defaultResponseCodes": [200, 201, 404],
        "requestBodyOverride": {},
        "smartNaming": {
            "maxPathLength": 20,
            "preserveNumericIds": true
        },
        "archiveOrphanedFiles": true
    },
    "runtime": {
        "outputCleanup": "canvas",
        "sessionCleanup": "canvas",
        "runResults": {
            "onWorkflowGet": "prompt",
            "includeOutput": true,
            "includeLog": true,
            "includeSession": true,
            "archiveOnCleanup": true
        }
    },
    "diff": {
        "viewMode": "active"
    }
}

Request Settings

Setting Description Default
request.defaultNamingMode Naming mode for new requests: single, new, or smart smart
request.defaultBaseUrl Base URL for API requests Canvas API URL
request.defaultResponseCodes Accepted HTTP response codes [200, 201, 404]
request.requestBodyOverride Override default request body properties {}
request.smartNaming.maxPathLength Maximum characters for URL path in filenames 20
request.smartNaming.preserveNumericIds Keep numeric IDs in path or replace with "id" true
request.archiveOrphanedFiles Archive orphaned responses (true) or delete them (false) true

Runtime Settings

Setting Description Default
runtime.outputCleanup How to handle output files: canvas, none, or all canvas
runtime.sessionCleanup How to handle session files: canvas, none, or all canvas
runtime.runResults.onWorkflowGet Fetch run results on Get Workflow: none, prompt, or all prompt
runtime.runResults.includeOutput Include block output in fetched results true
runtime.runResults.includeLog Include block logs in fetched results true
runtime.runResults.includeSession Include session data in fetched results true
runtime.runResults.archiveOnCleanup Archive results before cleanup vs delete true

Diff Settings

Setting Description Default
diff.viewMode Where diff tabs open: active (current group) or split (side-by-side group) active

Other Settings

Setting Description
canvasApiBaseUrl Optional override to point at a different Canvas environment (e.g. test server)
aiAgents Managed by the Configure AI Agent Tools command. Do not edit manually.

Smart Request Naming

When using "resultsPage": "smart" in request files, the extension generates descriptive filenames based on request content.

Filename Format

{APP}_{verb}_{urlPath}_{hash}_req.json
{APP}_{verb}_{urlPath}_{hash}_res.json

Examples:

  • QUIN_get_employees_a1b2_req.json
  • MYST_post_orders_c3d4_res.json
  • FTP_get_files_documents_e5f6_req.json

How It Works

  1. On execute: The extension generates a filename from the request content (verb, URL path). If it differs from the current filename, the request file is renamed and any orphaned responses are archived.
  2. Duplicate detection: If the generated filename matches an existing file, the existing file is replaced and your editor tab stays open with the renamed file.
  3. Archiving: Orphaned responses are combined with their originating request into an archive/ subfolder as a single { request, response } JSON file. A hidden archive/.pending/ record captures the request at execution time so pairing is always correct. Set archiveOrphanedFiles: false to delete instead.

URL Path Truncation

Long URL paths are intelligently truncated to fit within maxPathLength:

  • First and last path segments are prioritized
  • Middle segments are removed if needed
  • Numeric IDs can be preserved or replaced with "id" based on settings

Important Concepts

dateLastRun

The dateLastRun variable represents the timestamp of the last successful workflow execution.

Local behavior:

  • Updated in manifest.json when a workflow run "completes" — either by running the last block, or by any block calling fx.stopAfterThisBlock(true).
  • Loaded into the global dateLastRun variable when blocks execute, enabling incremental sync patterns.
  • You can manually edit the value in manifest.json for testing.

Canvas sync (optional):

  • By default, local runs do NOT update dateLastRun on Canvas (prevents local debugging from affecting production).
  • Set "syncDateLastRun": true in manifest.json to enable syncing after successful local runs.

Renaming Blocks and Workflows

Edit names directly in manifest.json:

  • Block name: Edit the name property of the block in the blocks array.
  • Workflow name: Edit the name property at the root level.

When you push code or config, updated names are sent to Canvas and local folders are automatically renamed (sanitized for filesystem-safe characters).

Changing Block Order

Add or reorder blocks in the Canvas web UI, then use cma: Get Workflow to re-download. Local block order changes are not synced.

Known Limitations

Workflows

  • Schedule management: No commands for changing or toggling a workflow's schedule. Use the Canvas web UI.

Workflow and Block Templates (Workbench)

  • Workflow and block templates cannot be fetched or updated via the extension. Only registered (deployed) workflows are accessible.
  • Pushing code to a block created from a workbench template will mark it as "customized" and it will no longer receive template updates.

Functions (fx)

  • Functions cannot be created or modified through the extension. Use cma: Update FX Functions to pull the latest function definitions from Canvas into your local fx.js.

Webhooks

  • The extension cannot actively listen for incoming webhooks — they must be fetched manually.
  • Only one webhook can be loaded at a time (not the full queue).
  • Queue items cannot be moved to history via the extension.

Feedback

Send feedback and feature requests to support@connectmyapps.com.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft