Configuration
Every setting here is operator-controlled and read from the environment at startup. None of it is reachable from caller input or model output — that separation is the point, not an implementation detail.
Configuration is validated at startup and fails closed. A feature enabled without its backing store does not degrade quietly; the server refuses to start and tells you which variable is missing. Treat a startup failure as the design working.
Authentication
| Variable | Required | Notes |
|---|---|---|
SQUAD_MCP_AUDIENCE | yes | The resource-server token audience. No default — an audience-less server would accept tokens minted for anything. |
SQUAD_MCP_ALLOWED_ISSUERS | — | Comma-separated issuer allow-list. |
SQUAD_MCP_ALLOWED_TENANTS | — | Comma-separated tenant allow-list. |
SQUAD_MCP_ALLOWED_ORIGINS | — | Strict allow-list. A literal * is rejected at startup. |
Model backend
| Variable | Default | Notes |
|---|---|---|
SQUAD_MCP_MODEL_ENDPOINT | — | Must also appear in the allow-list below, or startup fails. |
SQUAD_MCP_ALLOWED_MODEL_ENDPOINTS | — | The endpoints this server may ever call. Exfiltration defence. |
SQUAD_MCP_MODEL_DEPLOYMENT | — | The Azure OpenAI deployment name. |
SQUAD_MCP_MODEL_API_VERSION | 2024-10-21 | |
SQUAD_MCP_TENANT_CONCURRENCY | built-in | Per-tenant concurrent run cap. |
SQUAD_MCP_TENANT_COST_CEILING_USD | built-in | Per-tenant spend ceiling. Set this before real users. |
SQUAD_MCP_SESSION_IDLE_MS | built-in | Idle session eviction. |
The async pipeline
| Variable | Default | Notes |
|---|---|---|
SQUAD_MCP_REMOTE_PIPELINE_ENABLED | false | Off by default. The default remote surface is the advisory tools. |
SQUAD_MCP_RUN_STATE_BACKEND | file | file (single replica) or table (Azure Table, cross-replica CAS). |
SQUAD_MCP_RUN_STATE_DIR | — | Required for the file backend. |
SQUAD_MCP_STORAGE_ACCOUNT | — | Required for the table backend, renders, memory, and overflow. |
SQUAD_MCP_RUN_TABLE_NAME | squadruns | |
SQUAD_MCP_WORKER_ENABLED | false | Background worker for runs over ~4 minutes. Requires the table backend. |
SQUAD_MCP_RUN_ENCRYPTION_KEY_B64 | — | Base64 key. When set, per-stage artifacts, the Council Verdict, and caller request/context are AES-256-GCM encrypted at rest. |
SQUAD_MCP_ADVISORY_AUTOPILOT_ENABLED | false | Lets advisory-only runs proceed unattended. Narrows the gate; never removes it for impactful roles. |
SQUAD_MCP_ADVISORY_AUTOPILOT_ENABLED is not a gate override. It is scoped to runs whose roles land
no impactful action. A run that touches a backlog executor, a deployer, an IaC author, or Azure diagnostics still
holds for an operator regardless of this setting.
Squad memory
The server writes the same .copilot-tracking/squad/ tree the squad produces locally — research notes,
plans, verdicts, the run ledger — so a remote run leaves the same durable trail as a local one, and history can be
read back automatically on the next run instead of being retyped into the prompt.
| Variable | Default | Notes |
|---|---|---|
SQUAD_MCP_ENABLE_MEMORY | false | Master switch for the memory broker tools. |
SQUAD_MCP_MEMORY_BACKEND | table | table, file, or graph. |
SQUAD_MCP_MEMORY_TABLE_NAME | squadmemory | |
SQUAD_MCP_MEMORY_DIR | — | Required for the file backend. |
SQUAD_MCP_MEMORY_GRAPH_DRIVE_ID | — | Required for graph: the SharePoint or OneDrive document library. |
SQUAD_MCP_MEMORY_GRAPH_ROOT_PATH | — | Folder path within that library. |
SQUAD_MCP_MEMORY_GRAPH_ENCRYPT | false | Field-level encryption before content leaves for Graph. |
SQUAD_MCP_MEMORY_AUTO_ENABLED | false | Write memory automatically as a run progresses, rather than on an explicit tool call. |
SQUAD_MCP_MEMORY_DEFAULT_PROJECT | default | Lower-kebab-case; it is a store partition segment. |
SQUAD_MCP_ENABLE_ARTIFACTS | false | Persist the squad ledger — team.md, routing.md, state.json, and the append-only logs. Requires memory. |
Several destinations at once
SQUAD_MCP_MEMORY_TARGETS takes a JSON array of named destinations, and
SQUAD_MCP_MEMORY_DEFAULT_TARGET names the one used when the caller does not choose. Target names are
lower-kebab-case because they are the caller-facing selector. This is how one deployment serves, say, an
engineering SharePoint library and a separate customer-facing one without the caller being able to reach across.
Overflow to blob
Table entities have a size ceiling, so a large artifact would otherwise fail the write. With
SQUAD_MCP_MEMORY_OVERFLOW_ENABLED, anything past
SQUAD_MCP_MEMORY_OVERFLOW_THRESHOLD_BYTES (default 32 KiB) spills into
SQUAD_MCP_MEMORY_OVERFLOW_CONTAINER with a pointer left in the entity.
Deterministic render
| Variable | Default | Notes |
|---|---|---|
SQUAD_MCP_ENABLE_RENDER_PPTX | false | Enables squad_render_pptx. |
SQUAD_MCP_RENDER_PYTHON_PATH | — | Required when enabled — the in-image python-pptx interpreter. |
SQUAD_MCP_RENDER_SCRIPTS_DIR | — | Required when enabled. |
SQUAD_MCP_RENDER_BLOB_CONTAINER | renders | |
SQUAD_MCP_RENDER_SAS_TTL_MINUTES | 60 | User-delegation SAS lifetime. The SAS is never logged. |
SQUAD_MCP_RENDER_BRAND_TEMPLATE_PATH | — | Optional branded .pptx template. |
Business tools
| Variable | Default | Notes |
|---|---|---|
SQUAD_MCP_ENABLE_BUSINESS_TOOLS | false | Enables squad_business_plan and squad_backlog. Requires a model endpoint. |
This list is the shape of the surface, not the deployment procedure. Exact parameter wiring, Key Vault references, and the Bicep parameters live in host/RUNBOOK.md.