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

VariableRequiredNotes
SQUAD_MCP_AUDIENCEyesThe resource-server token audience. No default — an audience-less server would accept tokens minted for anything.
SQUAD_MCP_ALLOWED_ISSUERSComma-separated issuer allow-list.
SQUAD_MCP_ALLOWED_TENANTSComma-separated tenant allow-list.
SQUAD_MCP_ALLOWED_ORIGINSStrict allow-list. A literal * is rejected at startup.

Model backend

VariableDefaultNotes
SQUAD_MCP_MODEL_ENDPOINTMust also appear in the allow-list below, or startup fails.
SQUAD_MCP_ALLOWED_MODEL_ENDPOINTSThe endpoints this server may ever call. Exfiltration defence.
SQUAD_MCP_MODEL_DEPLOYMENTThe Azure OpenAI deployment name.
SQUAD_MCP_MODEL_API_VERSION2024-10-21
SQUAD_MCP_TENANT_CONCURRENCYbuilt-inPer-tenant concurrent run cap.
SQUAD_MCP_TENANT_COST_CEILING_USDbuilt-inPer-tenant spend ceiling. Set this before real users.
SQUAD_MCP_SESSION_IDLE_MSbuilt-inIdle session eviction.

The async pipeline

VariableDefaultNotes
SQUAD_MCP_REMOTE_PIPELINE_ENABLEDfalseOff by default. The default remote surface is the advisory tools.
SQUAD_MCP_RUN_STATE_BACKENDfilefile (single replica) or table (Azure Table, cross-replica CAS).
SQUAD_MCP_RUN_STATE_DIRRequired for the file backend.
SQUAD_MCP_STORAGE_ACCOUNTRequired for the table backend, renders, memory, and overflow.
SQUAD_MCP_RUN_TABLE_NAMEsquadruns
SQUAD_MCP_WORKER_ENABLEDfalseBackground worker for runs over ~4 minutes. Requires the table backend.
SQUAD_MCP_RUN_ENCRYPTION_KEY_B64Base64 key. When set, per-stage artifacts, the Council Verdict, and caller request/context are AES-256-GCM encrypted at rest.
SQUAD_MCP_ADVISORY_AUTOPILOT_ENABLEDfalseLets 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.

VariableDefaultNotes
SQUAD_MCP_ENABLE_MEMORYfalseMaster switch for the memory broker tools.
SQUAD_MCP_MEMORY_BACKENDtabletable, file, or graph.
SQUAD_MCP_MEMORY_TABLE_NAMEsquadmemory
SQUAD_MCP_MEMORY_DIRRequired for the file backend.
SQUAD_MCP_MEMORY_GRAPH_DRIVE_IDRequired for graph: the SharePoint or OneDrive document library.
SQUAD_MCP_MEMORY_GRAPH_ROOT_PATHFolder path within that library.
SQUAD_MCP_MEMORY_GRAPH_ENCRYPTfalseField-level encryption before content leaves for Graph.
SQUAD_MCP_MEMORY_AUTO_ENABLEDfalseWrite memory automatically as a run progresses, rather than on an explicit tool call.
SQUAD_MCP_MEMORY_DEFAULT_PROJECTdefaultLower-kebab-case; it is a store partition segment.
SQUAD_MCP_ENABLE_ARTIFACTSfalsePersist 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

VariableDefaultNotes
SQUAD_MCP_ENABLE_RENDER_PPTXfalseEnables squad_render_pptx.
SQUAD_MCP_RENDER_PYTHON_PATHRequired when enabled — the in-image python-pptx interpreter.
SQUAD_MCP_RENDER_SCRIPTS_DIRRequired when enabled.
SQUAD_MCP_RENDER_BLOB_CONTAINERrenders
SQUAD_MCP_RENDER_SAS_TTL_MINUTES60User-delegation SAS lifetime. The SAS is never logged.
SQUAD_MCP_RENDER_BRAND_TEMPLATE_PATHOptional branded .pptx template.

Business tools

VariableDefaultNotes
SQUAD_MCP_ENABLE_BUSINESS_TOOLSfalseEnables 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.