* docs(plugins): mark generated reference pages and fix their shared template Two generator files change; the other 153 files are their regenerated output from `pnpm plugins:inventory:gen`. - Emit a "generated, do not edit" banner naming the regeneration command and the manual-block markers. None of the 151 reference pages said they were generated, so a contributor edit was silently overwritten. - Give generated reference titles a `reference` suffix. Eight of them collided with a hand-written guide title (beam, geolocation, google-meet, logbook, teams-meetings, webhooks, workboard, zoom-meetings). Duplicate frontmatter titles across docs/ now total 0. - Render the surface list as a list instead of a semicolon-joined sentence, and use plain conjunctions for install routes. Strict STE hard violations across docs/plugins/reference/ drop from 178 to 20. - Drop the body H1, which duplicated the frontmatter title Mintlify already renders. - Fix a generator bug found while testing: the marker-less fallback in `extractManualReferenceSections` matched only the first line under `## Surface`, so a second `--write` run captured later bullets into a fabricated manual block. `--write` is now idempotent and `--check` passes across repeated runs. All 12 hand-written manual blocks are preserved. * test(scripts): follow resolvePluginSurface to its list contract resolvePluginSurface now returns one string per surface item instead of a semicolon-joined sentence, so the generator can render a list. The four assertions move from toBe(<joined string>) to toEqual(<array>) and pick up the capitalised labels. The "generic fallback" case changes meaning rather than disappearing. The empty manifest now yields [], and renderSurface() prints "This plugin declares no channels, providers, commands, or contracts." for an empty list, which tells a reader more than the old "plugin". The test is renamed to say what it now checks, with a comment pointing at the new home of the fallback. No generated page has an empty Surface section, so no page changes because of this.
4.3 KiB
| summary | read_when | title | |
|---|---|---|---|
| Adds Microsoft Foundry model provider support to OpenClaw. |
|
Microsoft Foundry plugin reference |
Adds Microsoft Foundry model provider support to OpenClaw.
Distribution
- Package:
@openclaw/microsoft-foundry - Install route: included in OpenClaw
Surface
- Providers:
microsoft-foundry - Contracts:
imageGenerationProviders
- Image-generation provider:
microsoft-foundry
Requirements
- A Microsoft Foundry or Azure AI Foundry resource with deployments.
- API-key auth through
AZURE_OPENAI_API_KEYor a configured provider API key. - For Entra ID auth, install the Azure CLI and run
az loginbefore onboarding. OpenClaw refreshes Microsoft Foundry runtime tokens throughaz account get-access-token.
Chat models
Microsoft Foundry chat deployments use the provider model ref
microsoft-foundry/<deployment-name>. Onboarding discovers Foundry resources
and deployments with the Azure CLI, then writes the selected deployment name to
the model config.
OpenClaw uses the Foundry /openai/v1 endpoint for supported OpenAI-compatible
chat APIs:
- GPT,
o*,computer-use-preview, and DeepSeek-V4 model families default toopenai-responses. - MAI-DS-R1 and other chat-completion deployments use
openai-completionsunless an explicit supported API is configured. - MAI-DS-R1 is recorded as reasoning-capable through reasoning content, not
through
reasoning_effort. Its context and output token metadata are 163,840 tokens.
Anthropic Claude deployments in Microsoft Foundry use the Anthropic Messages
API shape, not the OpenAI-compatible /openai/v1 shape. Configure those as a
custom anthropic-messages provider until the Microsoft Foundry plugin grows a
native Anthropic runtime. When the Foundry deployment name differs from the
Claude model ID, set params.canonicalModelId on the model entry so OpenClaw
can apply model-specific wire contracts, map /think off correctly, and
preserve signed thinking safely.
MAI image generation
The plugin registers microsoft-foundry for image_generate with the current
Microsoft AI image models:
MAI-Image-2.5-FlashMAI-Image-2.5MAI-Image-2eMAI-Image-2
Use a deployed MAI image deployment name as the model ref. The provider does
not declare a default image model because the MAI API requires your deployment
name in the request model field:
{
agents: {
defaults: {
mediaModels: {
image: {
primary: "microsoft-foundry/<deployment-name>",
timeoutMs: 600000,
},
},
},
},
}
Prompt-only generation calls Microsoft Foundry's MAI generations endpoint:
/mai/v1/images/generations. Reference-image edits call
/mai/v1/images/edits and are limited to MAI-Image-2.5-Flash and
MAI-Image-2.5 deployments.
Prompt-only generation can use a custom deployment name with just the Foundry
endpoint configured. For image edits with a custom deployment name, select the
deployment through onboarding or include model metadata so OpenClaw can verify
that the deployment is backed by MAI-Image-2.5-Flash or MAI-Image-2.5.
MAI image constraints:
- Output: one PNG image per request.
- Size: default
1024x1024; both width and height must be at least 768 px. - Total pixels: width × height must be at most 1,048,576.
- Edits: one PNG or JPEG input image.
- Unsupported shared hints such as
aspectRatio,resolution,quality,background, and non-PNGoutputFormatare not sent to Microsoft Foundry.
Troubleshooting
az: command not found: install the Azure CLI or use API-key auth.Microsoft Foundry endpoint missing for MAI image generation: select a Foundry deployment through onboarding or addmodels.providers.microsoft-foundry.baseUrl.supports MAI image deployments only: the selected image model points at a non-MAI deployment. Use a deployed MAI image model forimage_generate.