---
title: "Publish an app - freeze current state and make it live at a URL"
method: POST
path: "/api/mcp/tools/publish_app"
tags: ["tools"]
---

# Publish an app - freeze current state and make it live at a URL

`POST /api/mcp/tools/publish_app`

## Request

- Base URL: `https://finestructure.ai`
- URL: `https://finestructure.ai/api/mcp/tools/publish_app`
- Auth: HTTP bearer

Publish an app - freeze current state and make it live at a URL. Also configures whether the public URL is open, app-login gated, private, or inferred from the app.

## Request body

- object
  - `app_id` string, required: The app ID to publish
  - `access_mode` 'infer' | 'public_open' | 'public_auth' | 'private' | 'keep': Live access policy. public_open = anyone can view. public_auth = public URL opens but app login is required. private = published snapshot remains owner/collaborator-only. keep = preserve current visibility/auth settings. infer = choose from existing settings and obvious app structure.
  - `auth_required` boolean: Optional explicit override for generated-app login requirement. Prefer access_mode when possible.
  - `make_public` boolean: Optional explicit override for whether published URLs are publicly reachable. Prefer access_mode when possible.

## Response `200`

Tool executed successfully

- ToolResult
  - `ok` boolean, required
  - `tool` string, required
  - `result` object, required

## Other responses

- `400`: Invalid arguments for this tool
- `401`: Missing or invalid bearer token
- `402`: Not enough credits on the account
- `403`: Token scope does not permit this tool
- `404`: Unknown tool name
- `429`: Rate limit exceeded, retry after the indicated delay
- `500`: Internal error while executing the tool

---

[API](https://skmtc.dev/finestructure/apis/fine-structure-api.md) · [All operations](https://skmtc.dev/finestructure/apis/fine-structure-api/llms.txt) · [OpenAPI document](https://skmtc.dev/finestructure/apis/fine-structure-api/revisions/02c50ed5fd70?raw)
