Propose or save a free asset

Create a free asset (omit freeAssetId) or change one (only the fields you send change). A free asset solves one exact problem and leads to an offer. It may be live only with a url and at least one offerId; otherwise keep it planned. Never invent a link. From an agent this becomes a proposal a person accepts.

freeasset_upsertOtherRead and write

Behavior

Read-only hint
Not declared
Destructive hint
Not declared
Idempotent hint
Not declared
Open-world hint
Not declared

Parameters

NameTypeRequirementDescription
workspaceIdstringRequiredThe workspace id or slug (from workspace_list).
freeAssetIdstringOptionalNo additional description.
namestringOptionalNo additional description.
formatstringOptionalNo additional description.
problemstringOptionalThe exact problem it solves, in the audience’s words.
promisestringOptionalNo additional description.
urlunionOptionalNo additional description.
statusstringOptionalNo additional description.
offerIdsarrayOptionalNo additional description.
angleIdsarrayOptionalNo additional description.
audienceIdsarrayOptionalNo additional description.
ctaLinestringOptionalA suggested line, e.g. “Grab the scale-readiness checklist”.
funnelPositionstringOptionalNo additional description.
proofarrayOptionalResults it produced.
notesstringOptionalNo additional description.
reasonstringRequiredWhy this change helps, in one or two sentences. Shown to the person who accepts it.

Input JSON Schema

Generated from the registered input schema
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "description": "The workspace id or slug (from workspace_list)."
    },
    "freeAssetId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "format": {
      "type": "string",
      "enum": [
        "guide",
        "checklist",
        "template",
        "video",
        "vsl",
        "webinar",
        "call",
        "audit",
        "tool",
        "course",
        "other"
      ]
    },
    "problem": {
      "description": "The exact problem it solves, in the audience’s words.",
      "type": "string",
      "maxLength": 400
    },
    "promise": {
      "type": "string",
      "maxLength": 600
    },
    "url": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "live",
        "planned",
        "retired"
      ]
    },
    "offerIds": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "angleIds": {
      "maxItems": 24,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "audienceIds": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "ctaLine": {
      "description": "A suggested line, e.g. “Grab the scale-readiness checklist”.",
      "type": "string",
      "maxLength": 200
    },
    "funnelPosition": {
      "type": "string",
      "enum": [
        "first_touch",
        "middle",
        "close"
      ]
    },
    "proof": {
      "description": "Results it produced.",
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 400
      }
    },
    "notes": {
      "type": "string",
      "maxLength": 2000
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "description": "Why this change helps, in one or two sentences. Shown to the person who accepts it."
    }
  },
  "required": [
    "workspaceId",
    "reason"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Call shape

Use an MCP client rather than sending this JSON directly. The client handles protocol negotiation, sessions, and authentication.

Protocol request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "freeasset_upsert",
    "arguments": {}
  }
}