Skip to main content

create_prompt

Create a new prompt by its caller-relative name. A standalone personal credential uses a bare name. In organization scope, use me/name for the represented member's private space or <team>/name for a bound team the credential may manage. An unprefixed organization-scoped name denotes the shared organization catalogue, which is currently read-only over MCP. To change an existing prompt, use update_prompt.

Parameters​

ParameterTypeRequiredDescription
namestringYesCaller-relative address: bare with a standalone personal credential, me/name in private organization space, or <team>/name for a bound team. The stored bare name has no /.
contentstringYesThe prompt's text content (stored as the first version). Reference each declared argument as {{name}}. Content and arguments must agree (see the note below).
descriptionstringNoA human-readable description. Defaults to empty.
argumentsarrayNoDeclared parameters. Each item is { "name": string, "description"?: string, "required"?: boolean }. A name uses letters, digits, and _, and must be referenced in the content as {{name}} at least once.
version_limit_policystringNoWhat happens when the plan's version limit is later reached on update: reject (default) keeps history and fails; prune_oldest drops the oldest version.

Response​

FieldTypeDescription
namestringCanonical caller-relative address of the created prompt.
idstringThe new prompt's identifier.

Example​

{
"name": "marketing/launch-copy",
"content": "Write launch announcement copy for {{product}} aimed at {{audience}}.",
"description": "Standard product-launch announcement",
"arguments": [
{ "name": "product", "description": "The product being launched", "required": true },
{ "name": "audience", "required": false }
]
}

Result:

{
"name": "marketing/launch-copy",
"id": "018f...c2a1"
}

Errors​

Each failure carries a precise code in the response. A domain rejection — a not-found, a limit, or a permission denial — is returned as a tool result with isError: true, so the agent can read the code and self-correct; malformed arguments and server faults are JSON-RPC protocol errors.

CodeCauseDelivered as
prompt_name_takenA prompt with this name already exists in the target space.tool error (isError)
invalid_prompt_nameThe name is invalid (needs at least one alphanumeric character and no / in the bare name).tool error (isError)
field_too_longThe name, description, or content exceeds its maximum length.tool error (isError)
invalid_argument_nameA declared argument name is invalid (must start with a letter or _; letters, digits, and _ only).tool error (isError)
duplicate_argument_nameTwo declared arguments share the same name.tool error (isError)
too_many_argumentsMore arguments were declared than the per-prompt maximum.tool error (isError)
argument_field_too_longA declared argument's name or description exceeds its maximum length.tool error (isError)
undeclared_placeholderThe content references {{name}} for an argument that isn't declared.tool error (isError)
unused_argumentA declared argument is never referenced in the content.tool error (isError)
prompt_limit_reachedYour plan's prompt limit has been reached.tool error (isError)
invalid_version_policyversion_limit_policy is not reject or prune_oldest.tool error (isError)
forbiddenThe credential lacks create authority, uses me/ outside organization scope, or targets the read-only organization catalogue.tool error (isError)
team_not_foundNo team with that name is bound to this credential.tool error (isError)
empty_nameThe name is empty after removing the team prefix.tool error (isError)
personal_cannot_address_teamYou used a team/ prefix (or team field) with a personal credential.tool error (isError)
no_personal_spaceA userless organization credential used me/name; it has no represented member's private space.tool error (isError)
invalid_argumentsThe arguments are missing or don't match the input schema.protocol error (invalid_params)
internal_errorAn unexpected error occurred.protocol error (internal_error)

Notes​

  • Discover the team names you can use with bootstrap.
  • Reference a declared argument in the content as {{name}}; it is filled in when the prompt is fetched. Content and arguments must agree — every {{name}} must be declared and every declared argument must be used at least once. Braces that aren't a simple name (a JSON example, {{ not a name }}) aren't placeholders and are left as-is, so JSON and code examples in the content are safe. See Prompts → Arguments.
  • Creating a prompt counts as one tool call against your plan's tool-invocation allowance.