---
title: "Mcp Publish Cdn"
method: POST
path: "/v1/mcp/projects/{project_id}/cdn/releases"
tags: ["mcp"]
---

# Mcp Publish Cdn

`POST /v1/mcp/projects/{project_id}/cdn/releases`

## Request

- Base URL: `https://api.sonenta.dev`
- URL: `https://api.sonenta.dev/v1/mcp/projects/{project_id}/cdn/releases`
- Auth: none declared

Trigger a CDN release from MCP — same orchestration as the user-JWT
`POST /v1/projects/{id}/cdn/releases`, but addressable via the MCP tool
`publish_cdn`. Plan-cap soft warns are surfaced via `soft_warn=true`;
hard caps still raise 403.

## Path parameters

- `project_id` string, required

## Request body

- McpCdnPublishIn
  - `language_code` string, nullable
  - `namespace` string, nullable
  - `version_slug` string, nullable: Project-version slug. Defaults to the production version.
  - `force` boolean: Currently a no-op: orchestrate_publish is already idempotent + content-addressed, so re-running with no changes returns reused releases. Reserved for V2 when we want to bypass dedup.
  - `allow_empty` boolean: By default a base bundle whose namespace has keys but ZERO publishable ones (all below 'translated', e.g. draft) is REFUSED (publishing it would serve an EMPTY bundle) and reported in `warnings`. Set true to force-publish the empty bundle anyway.

## Response `201`

Successful Response

- McpCdnPublishOut
  - `items` McpCdnReleaseItem[], required
    - `language_code` string, required
    - `namespace_slug` string, required
    - `version_hash` string, required
    - `content_hash` string, required
    - `public_url` string, required
    - `latest_url` string, required
    - `size_bytes` integer, required
    - `key_count` integer, required
    - `included_count` integer, required
  - `new_count` integer, required
  - `reused_count` integer, required
  - `soft_warn` boolean
  - `warnings` McpCdnEmptyBundleWarning[]
    - `language_code` string, required
    - `namespace` string, required
    - `key_count` integer, required
    - `included_count` integer, required
    - `excluded_count` integer, required
    - `skipped` boolean, required
    - `reason` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sonenta/apis/sonenta-api.md) · [All operations](https://skmtc.dev/sonenta/apis/sonenta-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sonenta/apis/sonenta-api/revisions/f853ea49fb05?raw)
