Skip to main content
Glama

create_plan

Creates a content plan (a planned piece of content: what to write and with which inputs) for the user's active team. It does not write the content: use produce_plan to generate a plan's content, or create_content to write something now. title is the only required field.

Before you create:

  • Dedupe: call list_plans with a project_id filter before creating plans for a project. If a matching plan exists in Accepted or Suggested, offer to update it (update_plan) instead.

  • Source: "cora_requested" (default) when the user explicitly asked; "cora_proactive" for an unprompted suggestion. Never use "workflow" or "playbook" from an interactive session.

What the server decides:

  • Starting stage is automatic from source: cora_requested / playbook → Accepted (actionable now); user_added / cora_proactive / workflow → Suggested (needs the user to accept before it can be produced).

  • Visibility: "private" (default; the creator's ideas queue, invisible to teammates) or "team". Passing assigned_to for anyone other than the caller auto-promotes the plan to "team", even over an explicit "private".

  • assigned_to must be the NUMERIC user id of a current team member; emails and names are rejected.

  • source_metadata is immutable after creation.

Useful inputs: prompt (the actual content prompt used when the plan is produced), due_date (YYYY-MM-DD), blueprint_id (UUID from list_blueprints, or integer id), project_id, category_id, reference_document_ids, context_collection_ids, targeting_dimension_ids.

When creating several plans in one turn, set source_metadata.batch_id (a client-generated UUID) to correlate them, then link the user to the filtered plans view for that batch.

Present link_url exactly as returned.

Input roles:

  • title: required. The one-line summary of the content intent.

  • description: optional elaboration. Becomes a tooltip in the plans list.

  • due_date: ISO date YYYY-MM-DD.

  • prompt: the actual content prompt; pre-populates the content creation form when Generate is clicked.

  • blueprint_id: blueprint UUID (from list_blueprints) or integer blueprint id. UUIDs are resolved to the internal id server-side; an unknown UUID returns InputError naming list_blueprints.

  • project_id: project UUID to associate this plan with.

  • category_id: content category integer ID.

  • reference_document_ids: array of content UUID strings to associate as reference material.

  • context_collection_ids: array of integer collection IDs to pre-attach.

  • targeting_dimension_ids: array of integer dimension option IDs to pre-attach.

  • source: "cora_requested" | "cora_proactive" | "user_added" | "workflow" | "playbook".

  • source_metadata: object. Include {cora_session_id, cora_message_snippet} for cora_proactive / cora_requested. For workflow runs use {workflow_template_id, workflow_run_id, workflow_name, run_timestamp}.

  • assigned_to: optional NUMERIC user id. Defaults to the calling user.

  • visibility: "private" (default) | "team". Assignment is a communication act, hence the auto-promotion.

  • plan_uuid: optional client-supplied UUIDv4 for optimistic creates. The server validates format and uniqueness and rejects collisions with InputError; it generates one if omitted.

Note: create_plan echoes input reference docs without filtering. If you need the canonical filtered reference_documents array, call get_plan after create.

Errors:

  • InputError: title is required (omitted or empty).

  • InputError: source must be one of [user_added, cora_proactive, cora_requested, workflow, playbook].

  • InputError: plan_uuid already exists (a client-supplied UUID collides with an existing plan in this team).

  • InputError: invalid plan_uuid format (not a valid UUIDv4).

  • InputError: assigned_to is not a member of the team.

  • InputError: assigned_to must be the numeric user id of a team member (a non-numeric value was sent).

  • InputError: visibility must be one of [private, team].

  • AccessDenied: JWT does not resolve to a valid team context.

Links: copy link_url character for character. Never retype, shorten, or rebuild a link or the IDs inside it.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "title": "<title>"
    },
    "name": "create_plan"
  }
}

Input Schema

NameRequiredDescriptionDefault
titleYesRequired. The one-line summary of the content intent (1-200 chars).
promptNoThe actual content prompt — pre-populates the content creation form when the plan is acted on.
sourceNoPlan source. Default cora_requested for Marcora interactive callers. The cora_* values are legacy wire names that predate the Marcora rename and are unchanged — send them exactly as written. Allowed: user_added, cora_proactive, cora_requested, workflow, playbook. Immutable after creation.
due_dateNoOptional target completion date. ISO 8601 date string YYYY-MM-DD.
plan_uuidNoOptional client-supplied UUIDv4 for optimistic creates. Server validates format + uniqueness. Server generates if omitted.
project_idNoProject UUID string to associate with this plan.
visibilityNoOptional. Defaults to "private" (creator-only ideas queue). "team" makes the plan visible to all active teammates. Assigning to someone other than the calling user auto-promotes to "team".
assigned_toNoOptional integer user ID to assign this plan to. Defaults to creator. Must be a current team member.
category_idNoContent category integer ID.
descriptionNoOptional free-text description of what this plan is for.
blueprint_idNoBlueprint UUID (from list_blueprints) or integer blueprint id. UUIDs are resolved server-side; unknown UUIDs return InputError.
source_metadataNoOptional. Shape varies by source: {cora_session_id, cora_message_snippet} for cora_proactive; {workflow_template_id, workflow_run_id, workflow_name, run_timestamp} for workflow. Immutable after creation.
context_collection_idsNoArray of integer collection IDs to pre-attach.
reference_document_idsNoArray of content UUID strings to associate as reference material.
targeting_dimension_idsNoArray of integer dimension option IDs to pre-attach.

Output Schema

NameRequiredDescriptionDefault
idYesInternal integer PK; not exposed externally.
stageYes
titleYes
promptNo
sourceYes
team_idYes
due_dateNo
link_urlYesShareable deep-link that opens the plans screen with this plan's detail overlay. Give this to the user.
plan_uuidYesUUIDv4 — the external-facing identifier. Use this for all subsequent calls.
created_atYes
created_byYes
project_idNo
updated_atYes
visibilityNoprivate = creator-only; team = visible to all active teammates.
assigned_toYes
category_idNo
descriptionNo
blueprint_idNo
completed_atNo
dismissed_atNo
source_metadataNo
context_collectionsNo
produced_content_idNo
reference_documentsNo
targeting_dimensionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is a non-destructive, non-idempotent write; the description adds genuinely non-obvious server behavior: starting stage is derived from `source`, `assigned_to` for another user silently overrides an explicit "private" visibility, `source_metadata` is immutable after creation, and `create_plan` echoes unfiltered reference docs. The enumerated InputError/AccessDenied cases and the `plan_uuid` collision semantics further remove runtime surprises.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and well structured with bold headings and a strong opening paragraph that carries the routing decision. However, the "Input roles" section re-states the input schema nearly verbatim (title, description, due_date, project_id, category_id, and array params) and the error list partly duplicates rules already given in prose, so a meaningful share of the length does not earn its place at 100% schema coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter write tool with a mutation surface, the description covers prerequisites, defaults, silent server-side overrides, immutability constraints, batch correlation, link handling, and every documented error. An output schema exists, so the absence of return-value explanation is not a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the per-parameter descriptions: which `source` value to pick and why, that `assigned_to` must be a NUMERIC team-member id with emails/names rejected, and that `blueprint_id` UUIDs resolve server-side while unknown UUIDs raise InputError. The "Input roles" block does, however, largely restate the schema text for the remaining parameters rather than adding to it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Creates a content plan") and immediately defines what a plan is ("a planned piece of content: what to write and with which inputs"). It explicitly distinguishes itself from the two nearest siblings, `produce_plan` (generate the content) and `create_content` (write something now), so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a pre-creation dedupe procedure (call `list_plans` with a `project_id` filter; offer `update_plan` if a match exists in Accepted or Suggested) and explicit source-selection rules, including a negative rule ("Never use 'workflow' or 'playbook' from an interactive session"). It also names the follow-up tool (`get_plan`) when canonical filtered reference documents are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources