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
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Caller-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 /. |
content | string | Yes | The prompt's text content (stored as the first version). Reference each declared argument as {{name}}. Content and arguments must agree (see the note below). |
description | string | No | A human-readable description. Defaults to empty. |
arguments | array | No | Declared 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_policy | string | No | What 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
| Field | Type | Description |
|---|---|---|
name | string | Canonical caller-relative address of the created prompt. |
id | string | The 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.
| Code | Cause | Delivered as |
|---|---|---|
prompt_name_taken | A prompt with this name already exists in the target space. | tool error (isError) |
invalid_prompt_name | The name is invalid (needs at least one alphanumeric character and no / in the bare name). | tool error (isError) |
field_too_long | The name, description, or content exceeds its maximum length. | tool error (isError) |
invalid_argument_name | A declared argument name is invalid (must start with a letter or _; letters, digits, and _ only). | tool error (isError) |
duplicate_argument_name | Two declared arguments share the same name. | tool error (isError) |
too_many_arguments | More arguments were declared than the per-prompt maximum. | tool error (isError) |
argument_field_too_long | A declared argument's name or description exceeds its maximum length. | tool error (isError) |
undeclared_placeholder | The content references {{name}} for an argument that isn't declared. | tool error (isError) |
unused_argument | A declared argument is never referenced in the content. | tool error (isError) |
prompt_limit_reached | Your plan's prompt limit has been reached. | tool error (isError) |
invalid_version_policy | version_limit_policy is not reject or prune_oldest. | tool error (isError) |
forbidden | The credential lacks create authority, uses me/ outside organization scope, or targets the read-only organization catalogue. | tool error (isError) |
team_not_found | No team with that name is bound to this credential. | tool error (isError) |
empty_name | The name is empty after removing the team prefix. | tool error (isError) |
personal_cannot_address_team | You used a team/ prefix (or team field) with a personal credential. | tool error (isError) |
no_personal_space | A userless organization credential used me/name; it has no represented member's private space. | tool error (isError) |
invalid_arguments | The arguments are missing or don't match the input schema. | protocol error (invalid_params) |
internal_error | An 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.