Propose or save an angle

Create an angle (omit angleId) or change one (pass angleId; only the fields you send change). From an agent this becomes a proposal a person accepts in Knowledge; from a person it saves. audienceIds and offerIds must already exist (see strategy_get).

angle_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).
angleIdstringOptionalNo additional description.
namestringOptionalTwo to five words.
thesisstringOptionalThe one-line claim the client argues.
whyItMattersstringOptionalNo additional description.
audienceIdsarrayOptionalNo additional description.
offerIdsarrayOptionalNo additional description.
hooksarrayOptionalExample hooks in the client’s voice.
storiesarrayOptionalStories the client tells on this angle.
proofarrayOptionalNumbers, cases or quotes the client can stand behind.
keywordsarrayOptionalSearch terms for creator research and idea matching.
statusstringOptionalNo 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)."
    },
    "angleId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "name": {
      "description": "Two to five words.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "thesis": {
      "description": "The one-line claim the client argues.",
      "type": "string",
      "maxLength": 300
    },
    "whyItMatters": {
      "type": "string",
      "maxLength": 1000
    },
    "audienceIds": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "offerIds": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "hooks": {
      "description": "Example hooks in the client’s voice.",
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 300
      }
    },
    "stories": {
      "description": "Stories the client tells on this angle.",
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 600
      }
    },
    "proof": {
      "description": "Numbers, cases or quotes the client can stand behind.",
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 600
      }
    },
    "keywords": {
      "description": "Search terms for creator research and idea matching.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      }
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused"
      ]
    },
    "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": "angle_upsert",
    "arguments": {}
  }
}