ateam_upload_connector
Upload connector code to Core and restart — WITHOUT redeploying skills.
MERGES with the GitHub state at ref by default (default ref: 'dev'). Sending a partial file set ONLY overlays those files — the rest of the connector is preserved from GitHub. To fully replace the connector dir (historical behavior), pass replace:true.
Modes:
• github:true (no files) — deploy the GitHub state at ref as-is.
• github:true + files:[] — GitHub state at ref as BASE, your files overlay on top (incoming wins).
• files:[] (no github) — default MERGE with GitHub state at ref. Refuses if no GitHub base exists (no silent nuke).
• files:[] + replace:true — full replace. Wipes connector dir + writes only the provided files. Use deliberately.
Multi-file connectors (server.js + dashboard HTML + RN bundle + package/manifest): pass each file with content_base64 (a single-line, escape-safe base64 string) instead of content — so you don't hand-escape ~90KB of HTML/JS/JSON inside one tool call. This is the CANONICAL agent path for a full connector; do NOT hand-roll curl against the raw endpoint (that skips connector registration / PAT provisioning).
Common traps this design prevents:
• Pre-fix bug (2026-06-06): sending just ui-dist HTML wiped server.js + node_modules — connector broke until a full re-upload. Now: those files merge with the GitHub base.
• Pre-fix bug: github:true silently read from main even when patches were on dev. Now: defaults to dev; pass ref:'main' to opt into the legacy path.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | GitHub branch to read from for the BASE state. Default: 'dev' (matches ateam_github_patch). Pass 'main' to read from production. Pre-2026-06-05 callers that relied on the silent-main default must pass ref:'main' explicitly. | |
| files | No | Files to upload — each needs 'path' plus ONE of content (inline string) or content_base64 (escape-safe base64; preferred for multi-file connectors). By default merges with the GitHub state at `ref`. Set replace:true to wipe the connector dir and write only these files. | |
| force | No | RECOVERY: respawn the connector + re-inject its CURRENT env even when the source is UNCHANGED. Normally an unchanged-source upload no-ops (unchanged:true) and leaves the process running. But a connector spawned before a shared-secret rotation keeps the STALE secret — it still lists tools (looks healthy) yet 401s on every per-actor call, with no recovery short of a fake source edit. Use `ateam_upload_connector(solution_id, connector_id, github:true, force:true)` to pull the current source and force a fresh respawn (which picks up the current secret). Default: false. | |
| github | No | If true, pull connector files from GitHub repo at `ref`. Default: false. Combine with files:[] to use GitHub as the base and overlay your files. | |
| replace | No | Opt into FULL REPLACE: wipe the connector dir and write only the provided `files`. Default: false (= merge with GitHub state at `ref`). Use with intent — sending an incomplete file set with replace:true will break the connector. | |
| solution_id | Yes | The solution ID | |
| connector_id | Yes | The connector ID to upload (e.g. 'personal-assistant-ui-mcp') |