Skip to content

Formalize status-change-resource-type enum for MCP Resources subscription #3412

Description

@bokelley

Summary

The spec doesn't ship a closed enum for status-change `resource_type` values. Implementers inventing event-bus status changes have to guess which resource categories are first-class. The SDK shipping the v6 `DecisioningPlatform` runtime needed this taxonomy and currently uses an SDK-defined union:

```ts
type StatusChangeResourceType =
| 'media_buy'
| 'creative'
| 'audience'
| 'signal'
| 'proposal'
| 'plan'
| 'rights_grant'
| 'delivery_report'
| 'property_list'
| 'collection_list';
```

These are the resource categories adopters publish status changes against today (`publishStatusChange({ resource_type, resource_id, payload })`). They map to the URI scheme `adcp://{account_id}/{resource_type}/{resource_id}` that the framework projects to MCP Resources subscribers.

Why this matters

When MCP Resources subscription wiring lands in the AdCP spec — projecting status changes to `notifications/resources/updated` — the `resource_type` becomes a wire string buyers parse. Without a normative spec enum:

  • Different SDKs invent different sets, breaking interop. A salesagent (Python) and adcp-client (TypeScript) implementation could both ship `audience` lifecycle events but use different naming.
  • Buyers can't enumerate "all subscribable resource types" without inspecting capability declarations from each agent.
  • Adding a new lifecycle channel (e.g., `pcim_session` for sponsored intelligence) requires every implementer to coordinate.

Proposed fix

Add `schemas/v3/enums/status-change-resource-type.json`:

```json
{
"$schema": "http://json-schema.org/draft-07/schema#\",
"$id": "/schemas/v3/enums/status-change-resource-type.json",
"title": "Status Change Resource Type",
"description": "Resource categories whose lifecycle changes can be subscribed to via MCP Resources / push-notification webhooks.",
"type": "string",
"enum": [
"media_buy", "creative", "proposal", "delivery_report",
"audience", "signal", "plan", "rights_grant",
"property_list", "collection_list"
]
}
```

Reference from `mcp-webhook-payload.json` and the MCP Resources subscription URI scheme spec.

Open question — `x-` prefix for SDK extensions?

If the spec ships a tighter set, SDKs that ship more resource categories than the spec lists would need either (a) a spec follow-up to add the missing values, or (b) an `x-` prefix convention for SDK-extended values. The proposed enum above includes everything the v6 SDK ships today; if any of these are deemed out-of-scope for the wire-level enum, the SDK would x-prefix them. Worth documenting the convention either way.

Reference

Context

Filing on behalf of the v6 SDK preview (PR #1005) which centralized the status-change taxonomy for the first time. Other implementations will hit this when they wire MCP Resources subscription on top of AdCP.

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions