Releases: microsoft/agent-host-protocol
AHP Swift Package v0.3.0
[0.3.0] — 2026-06-05
Implements AHP 0.3.0.
Added
McpServerCustomizationnow exposes the full MCP lifecycle:enabled,
the discriminatedMcpServerStateenum
(.starting/.ready/.authRequired/.error/.stopped), optional
channelURI for themcp://side-channel, and optionalmcpApp
block carryingAhpMcpUiHostCapabilitiesfor MCP Apps.McpServerAuthRequiredStatecarriesProtectedResourceMetadata
plusreason/requiredScopes/descriptionso the existing
authenticatecommand can drive per-server auth.Customization.mcpServertop-level case — hosts MAY surface bare
MCP servers directly rather than only inside a plugin or directory.SessionMcpServerStateChangedActionand matching reducer arm —
narrow upsert ofstate+channelon an existing MCP
server customization by id. Wired through bothReducers.swiftand
the protocol-basedNativeReducer.swift.ClientCapabilitiesstruct onInitializeParams.capabilitieswith
first entrymcpApps.changeKindfield onChangeset(well-known values:'session',
'branch','uncommitted','turn','compare-turns').statusanderrorfields onChangesetOperationand the
changeset/operationStatusChangedaction, tracking the
idle → running → errorlifecycle of a changeset operation.AgentCustomization._metaprovider metadata field.- Optional
changesfield onSessionSummary(ChangesSummarywith optionaladditions,deletions, andfilescounts) summarising a session's file-change footprint.
Changed
- Renamed the
ChangesetSummarytype toChangeset. The on-the-wire shape is unchanged. - Moved the
changesetscatalogue fromSessionSummarytoSessionState. Thesession/changesetsChangedaction now updatesstate.changesetsdirectly instead ofstate.summary.changesets.
Removed
- Removed the
additions,deletions, andfilesfields fromChangesetSummary. Aggregate counts now live onSessionSummary.changes; per-changeset views derive their own totals fromChangesetState.files.
Changed
ToolCallBase.toolClientId: String?replaced by
ToolCallBase.contributor: ToolCallContributor?(enum with
.client(ToolCallClientContributor)and.mcp(ToolCallMcpContributor)
cases).SessionToolCallStartActioncarries the newcontributor
field as well.Reducers.swift,NativeReducer.swift, and
ToolCallStateExtensions.swiftfollow the rename.
AHP Spec v0.3.0
[0.3.0] — 2026-06-05
Spec version: 0.3.0
Added
McpServerCustomizationnow models MCP servers as first-class session
customizations:enabled,state(a discriminated
McpServerStateunion coveringstarting,ready,authRequired,
error,stopped), an optionalchannelURI for anmcp://
side-channel into the upstream server, and an optionalmcpAppblock
carryingAhpMcpUiHostCapabilitiesso clients can render
MCP Apps.McpServerAuthRequiredStatecarriesProtectedResourceMetadataplus
reason/requiredScopes/description, letting clients drive the
existingauthenticatecommand for per-MCP-server auth challenges.Customizationnow includesMcpServerCustomizationat the top level
(hosts MAY surface globally-configured MCP servers directly rather
than only inside a plugin or directory). MCP servers remain valid as
children of a container.- New
session/mcpServerStateChangedaction — narrow upsert of
state+channelon an existingMcpServerCustomization
by id, intended for the high-frequency
starting/ready/authRequiredtransitions. Other customization
fields stay insession/customizationUpdatedterritory. InitializeParams.capabilities— optional client-capability bag
declared during the handshake. First entry ismcpApps?: {}; hosts
SHOULD only populateMcpServerCustomization.mcpApp/channelfor
clients that declared it.- New guide page
docs/guide/mcp.md(with an MCP Apps subsection) and
new spec pagedocs/specification/mcp-channel.md. - Added
changeKindtoChangeset(well-known values:'session',
'branch','uncommitted','turn','compare-turns') so clients can
group, sort, or pick an icon without parsinguriTemplate. - Added
statusanderrortoChangesetOperationand a new
changeset/operationStatusChangedaction so servers can reflect an
operation's execution lifecycle (idle → running → error) back into
changeset state.
Changed
-
Replaced
ToolCallBase.toolClientId?: stringwith a discriminated
ToolCallBase.contributor?: ToolCallContributorunion
(ToolCallClientContributor/ToolCallMcpContributor) so MCP-served
tool calls can be attributed back to their originating
McpServerCustomization.session/toolCallStartcarries the new
contributor?field in place oftoolClientId?. -
Added optional
_metaprovider metadata toAgentCustomization. -
Added optional
changesfield of typeChangesSummarytoSessionSummary,
carrying optionaladditions,deletions, andfilescounts so servers
can advertise an at-a-glance view of a session's file-change footprint. -
Removed the
additions,deletions, andfilesfields from
ChangesetSummary. Aggregate counts now live onSessionSummary.changes;
per-changeset views derive their own totals fromChangesetState.files. -
Moved the
changesetscatalogue fromSessionSummaryto
SessionState. Thesession/changesetsChangedaction now updates
state.changesetsdirectly instead ofstate.summary.changesets. -
Renamed the
ChangesetSummaryinterface toChangeset. The
on-the-wire shape is unchanged. -
Renamed the
UserMessagetype toMessageand surfaced it consistently
across turn state (Turn.message,ActiveTurn.message,PendingMessage.message)
and the actions that carry it (session/turnStarted,
session/pendingMessageSet). The type now carries anoriginfield and an
optional_metaobject.
AHP Spec v0.2.0
[0.2.0] — 2026-05-28
Spec version: 0.2.0
This is the first version released through the unified spec release pipeline
(spec/v* git tags → GitHub Release with attached schema artifacts). Changes
to the protocol shape that landed under this version are tracked in the
commits between spec/v0.1.0 (not yet tagged) and spec/v0.2.0. Highlights:
- Channels reorganization — every command and notification carries a top-level
channel: URI; per-channel state types and action unions live under
types/channels-*/(see PR #97 and PR #152). - New
otlp/*notifications for telemetry export
(exportLogs/exportTraces/exportMetrics). - New
session/agentChanged,session/customizationRemoved,
session/changesetsChanged, and thechangeset/*action family. - Customizations redesigned as a typed two-level tree.
- New
resourceResolve(stat + realpath; throwsNotFoundfor the
existence check) andresourceMkdir(mkdir -psemantics) requests. - New
createResourceWatchrequest plus theahp-resource-watch:/<id>
channel with theresourceWatch/changedaction — long-lived file-change
streams over the standard subscription mechanism. resourceWriteextended withmode(truncate|append|insert),
position, andifMatchfor optimistic concurrency. New
Conflict(-32011) error code for staleifMatchwrites.- The entire content-bearing
resource*family is now formally
bidirectional — the methods appear inServerCommandMapand may be
initiated by either peer (matches VS Code's existing implementation). UserMessage._metaoptionalRecord<string, unknown>field for
provider-specific message metadata, mirroring the MCP_metaconvention
already used onMessageAttachmentBase,ToolDefinition,ToolCallBase,
UsageInfo, andSessionState.