MCP Tools
The Marcora MCP Server exposes a set of tools that your AI assistant can call directly to interact with your workspace. Each tool maps to a specific action — from generating content to retrieving context — and can be invoked naturally through conversation.
The tools below are available to any connected AI assistant once the Marcora MCP Server is configured.
Tools
Content
ask_content_assistant
Send a natural-language request to Marcora's in-document Content Assistant to edit, extend, or ideate on an existing document. It runs asynchronously and streams its reply and any edits into the document's sidebar in Marcora.
Input Schema
{
"type": "object",
"required": [
"content_id",
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"description": "The request, in natural language."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "The canvas or deliverable to act on (from list_content, get_content, or get_project). Canvas vs. deliverable is detected automatically."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Project UUID (from list_projects) whose context to include."
},
"ai_provider": {
"type": "string",
"description": "Model family: anthropic (default) or openai."
},
"selected_text": {
"type": "string",
"description": "Text the user has highlighted in the document, to focus the request on."
},
"thinking_mode": {
"type": "boolean",
"description": "Enable extended reasoning for harder requests."
},
"chat_only_mode": {
"type": "boolean",
"description": "Force a reply-only response with no document edit."
},
"collection_ids": {
"type": "array",
"description": "Context Collection IDs (from list_context_collections) to include."
}
}
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Always pending on dispatch."
},
"generation_id": {
"type": "string",
"format": "uuid",
"description": "Identifies this run. Poll get_generation_status with it for the result."
}
}
}create_content
Create a content document from an AI prompt, your own supplied text, or a blueprint template. It automatically pulls in all relevant brand and reference context, so there is no need to fetch context first. When generating from `instructions`, you can also pass `reference_content_ids` to fold specific existing documents into the prompt as reference material.
Input Schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Your own text to save directly as a document. Cannot be used with blueprint_uuid."
},
"plan_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Plan UUID (from create_plan / list_plans / get_plan — use plan_uuid, not integer id). Associates the new content with the plan and triggers an automatic stage transition to In_Process. Only auto-links when used with blueprint_uuid. Do NOT pass if the plan is in Complete stage."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Project to associate this content with."
},
"category_id": {
"type": "integer",
"description": "Optional. Content category ID."
},
"instructions": {
"type": "string",
"description": "Detailed instructions describing what to create (AI will generate it)."
},
"blueprint_uuid": {
"type": "string",
"format": "uuid",
"description": "Optional. Blueprint UUID to generate from. Makes the call async. Only works with instructions."
},
"collection_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Optional. Context collection IDs."
},
"dimension_option_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Optional. Targeting dimension option IDs."
},
"reference_content_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "Optional. Array of existing content UUIDs (content_id from list_content or get_content) to fold into the generation prompt as reference material. Only valid on a generation path (instructions, with or without blueprint_uuid); INVALID with the verbatim content path. A bad or inaccessible id fails loud, naming the id."
},
"use_extended_thinking": {
"type": "boolean",
"description": "Optional. Enable extended thinking for complex content (sync mode only, with instructions)."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "Content record ID (only present without blueprint)."
},
"title": {
"type": "string",
"description": "Document title (only present without blueprint)."
},
"content": {
"type": "string",
"description": "Document content in markdown (only present without blueprint)."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view/open this content in Marcora (only present without blueprint)."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "Unique identifier — use as content_id in get_content and share tools (only present without blueprint)."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation (only present without blueprint)."
},
"generation_id": {
"type": "integer",
"description": "ID to track async generation — pass to get_generation_status (only present WITH blueprint)."
}
},
"description": "When content is provided, returns the saved content object. When instructions are provided without blueprint, returns the AI-generated content object. When blueprint_uuid IS provided, returns only generation_id."
}get_generation_status
Check the status of an asynchronous content generation started by create_content (with a blueprint) or by ask_content_assistant. Poll it with the generation_id until the run completes; once finished it returns the current document and the latest Content Assistant reply.
Input Schema
{
"type": "object",
"required": [
"generation_id"
],
"properties": {
"generation_id": {
"type": "string",
"format": "uuid",
"description": "The generation ID returned by create_content (with blueprint_uuid) or ask_content_assistant."
}
}
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Status of this run. Blueprint flow terminates at completed; Content Assistant flow terminates at complete; failed on error. Intermediate: pending, processing, streaming."
},
"content": {
"type": [
"object",
"null"
],
"description": "null until the run completes. Shape depends on flow_type."
},
"flow_type": {
"type": "string",
"description": "ai_assistant for ask_content_assistant runs, otherwise a blueprint/content generation."
},
"generation_id": {
"type": "string",
"format": "uuid",
"description": "The generation ID being checked."
}
}
}list_content
List all content documents visible to you as a single unified array, whether created from scratch or from a blueprint. Use a content_id to fetch full content or to create a share link. Pass a `search` query to rank results by semantic relevance instead of recency.
Input Schema
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Optional natural-language query. When provided, results are ranked by SEMANTIC relevance to this query instead of recency, and each item gains a relevance_score. Omit or leave empty for the normal recency-ordered list."
}
}
}Output Schema
{
"type": "object",
"required": [
"content"
],
"properties": {
"content": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"content_id"
],
"properties": {
"name": {
"type": "string",
"description": "Content name."
},
"stage": {
"type": "string",
"description": "in_progress or ready."
},
"web_url": {
"type": "string",
"description": "Direct URL to view this content in Marcora."
},
"category": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"description": "{id, name} or null if uncategorized."
},
"projects": {
"type": "array",
"items": {
"type": "string"
},
"description": "Project names this content belongs to."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "Content identifier."
},
"created_by": {
"type": "string",
"description": "Name of the creator."
},
"visibility": {
"type": "string",
"description": "private or team."
},
"relevance_score": {
"type": [
"number",
"null"
],
"description": "Present only when a `search` query was given. A number (cosine similarity 0–1; higher = more relevant) when the item was scored against embeddings, or null when the item is not embedded yet and could not be scored (sorts last). Absent entirely when no search was provided. Cross-comparable with list_context_items relevance_score."
}
}
}
}
}
}get_content
Retrieve the full markdown body of a content document by its content_id. Use it when you need to read a document's text to answer a question about it — not to show the user content they can already open in Marcora.
Input Schema
{
"type": "object",
"required": [
"content_id"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"description": "The UUID of the content to retrieve."
}
}
}Output Schema
{
"type": "object",
"required": [
"content_id",
"name",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "Content name."
},
"stage": {
"type": "string",
"description": "Enumeration of in_progress or ready."
},
"content": {
"type": "string",
"description": "Full document content in markdown format."
},
"category": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"description": "Content category, or null if not categorized."
},
"link_url": {
"type": "string",
"description": "Direct URL to view this content in Marcora."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "Content identifier."
},
"visibility": {
"type": "string",
"description": "Visibility setting (e.g. private, team)."
}
}
}update_content
Update a content document by its content_id — edit the body, rename it, or change its stage, visibility, category, or project. Only the fields you supply change, and body updates replace the entire text, so read it first when splicing into existing content.
Input Schema
{
"type": "object",
"required": [
"content_id"
],
"properties": {
"stage": {
"enum": [
"in_progress",
"ready"
],
"type": "string",
"description": "in_progress or ready."
},
"content": {
"type": "string",
"description": "New full markdown body. Omit to leave body unchanged."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the content to update. From list_content, get_content, get_generation_status, or get_project."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Project UUID to associate with this content. Replaces any existing project association."
},
"visibility": {
"enum": [
"private",
"team"
],
"type": "string",
"description": "private or team."
},
"category_id": {
"type": "integer",
"description": "Category ID from list_content_categories."
},
"name_override": {
"type": "string",
"description": "Custom document name. Setting this locks the name (won't auto-resync from content header on future edits)."
},
"change_summary": {
"type": "string",
"description": "Summary of what changed and why, shown in the document's AI-assistant history sidebar. Size it to the change (a sentence to a few paragraphs); markdown supported. Recommended on every call; omitted or blank falls back to a generic \"Content updated via MCP.\" label. Only recorded when the call also changes `content`."
}
}
}Output Schema
{
"type": "object",
"required": [
"content_id",
"name",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "Document name (post-update)."
},
"stage": {
"type": "string",
"description": "in_progress or ready."
},
"content": {
"type": "string",
"description": "Full document content in markdown."
},
"category": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"description": "{id, name} or null if uncategorized."
},
"link_url": {
"type": "string",
"description": "Direct URL to view this content in Marcora."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "Content identifier."
},
"visibility": {
"type": "string",
"description": "private or team."
}
}
}Workflows
create_workflow
Create a new reusable, multi-step workflow template for the team, optionally scheduled. Workflows start as drafts and require an explicit list of allowed tools; activate them with update_workflow once confirmed.
Input Schema
{
"type": "object",
"required": [
"name",
"steps",
"allowed_tools"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Human-readable workflow name."
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"description"
],
"properties": {
"name": {
"type": "string"
},
"agent_hint": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": true
},
"minItems": 1,
"description": "Ordered step objects. The runner executes these sequentially."
},
"inputs": {
"type": "object",
"description": "Declared input schema. Keys are input names; values describe type/label/required (free-form).",
"additionalProperties": true
},
"description": {
"type": "string",
"description": "One- or two-sentence description of what this workflow accomplishes."
},
"allowed_tools": {
"type": "array",
"items": {
"type": "string"
},
"description": "Required, non-empty. The exact set of tools the workflow runner is permitted to use. A workflow cannot be created without an explicit allowlist — an empty list would let the runner inherit the full tool set. Prefer tight allowlists, especially for scheduled runs."
},
"schedule_config": {
"type": "object",
"description": "Optional. Creates an accompanying workflow_trigger with is_enabled=false. Shape: frequency (daily/weekly/hourly), interval_hours, timezone (UTC).",
"additionalProperties": true
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"required": [
"id",
"name",
"status",
"link_url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Workflow UUID. Use as workflow_id in other workflow tools."
},
"name": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array"
},
"inputs": {
"type": "object"
},
"status": {
"enum": [
"draft"
],
"type": "string"
},
"team_id": {
"type": "string",
"format": "uuid"
},
"link_url": {
"type": "string",
"format": "uri"
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"description": {
"type": "string"
},
"allowed_tools": {
"type": "array"
},
"created_by_user_id": {
"type": "string"
}
}
}get_workflow
Fetch one workflow's full definition along with its triggers and latest run. Always call it before update_workflow so you can preserve the fields you are not changing.
Input Schema
{
"type": "object",
"required": [
"workflow_id"
],
"properties": {
"workflow_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the workflow template."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "object",
"required": [
"id",
"name",
"status",
"link_url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"steps": {
"type": "array"
},
"inputs": {
"type": "object"
},
"status": {
"enum": [
"draft",
"active",
"archived"
],
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri"
},
"_triggers": {
"type": "array",
"description": "Schedule/trigger configs. Inspect _triggers[0].schedule_config and .is_enabled."
},
"_latest_run": {
"type": [
"object",
"null"
],
"description": "Most recent run (carries its own link_url), or null if never run."
},
"allowed_tools": {
"type": "array"
}
}
}
}
}get_workflow_runs
Inspect a workflow's run history — either a paginated list of runs, or the detailed step and tool-call logs for a single run. Useful for checking whether a workflow ran and for troubleshooting failures.
Input Schema
{
"type": "object",
"required": [
"workflow_id"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1
},
"run_id": {
"type": "string",
"format": "uuid",
"description": "UUID of a specific run. Omit to list all runs for the workflow."
},
"status": {
"enum": [
"pending",
"running",
"succeeded",
"failed",
"skipped"
],
"type": "string",
"description": "Filter by run status (list mode only)."
},
"per_page": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"workflow_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the workflow template."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Single-run mode only. Run UUID."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri"
},
"workflow_template_id": {
"type": "string",
"format": "uuid"
}
}
},
"description": "List mode only. Array of run summaries."
},
"status": {
"type": "string",
"description": "Single-run mode only. Run status."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Single-run mode only. Direct URL to view this run."
},
"_step_logs": {
"type": "array",
"description": "Single-run mode only. Step execution logs."
},
"itemsTotal": {
"type": "integer",
"description": "List mode only. Total number of matching runs."
},
"_tool_call_logs": {
"type": "array",
"description": "Single-run mode only. Tool call logs."
},
"workflow_template_id": {
"type": "string",
"format": "uuid",
"description": "Single-run mode only."
}
},
"description": "Shape depends on mode. List mode (run_id omitted): items + itemsTotal. Single-run mode (run_id supplied): id, workflow_template_id, status, _step_logs, _tool_call_logs, link_url."
}list_workflows
List the team's workflows, with optional status filter and name search. Use it to see existing workflows or to check for duplicate names before creating one.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1
},
"search": {
"type": "string"
},
"status": {
"enum": [
"draft",
"active",
"archived"
],
"type": "string"
},
"per_page": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"required": [
"items",
"itemsTotal"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Workflow ID. Use as workflow_id in get_workflow, update_workflow, run_workflow, and get_workflow_runs."
},
"name": {
"type": "string"
},
"status": {
"enum": [
"draft",
"active",
"archived"
],
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view the workflow in Marcora."
}
}
}
},
"curPage": {
"type": "integer"
},
"nextPage": {
"type": [
"integer",
"null"
]
},
"prevPage": {
"type": [
"integer",
"null"
]
},
"itemsTotal": {
"type": "integer"
}
}
}run_workflow
Manually run a workflow, dispatching a live agent session. Returns the run record; check its status to see whether the run started, failed, or was skipped.
Input Schema
{
"type": "object",
"required": [
"workflow_id"
],
"properties": {
"workflow_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the workflow template to run."
},
"input_values": {
"type": "object",
"description": "Values for the workflow's declared inputs, if any.",
"additionalProperties": true
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"required": [
"id",
"workflow_template_id",
"status",
"link_url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Workflow run UUID. Use as run_id in get_workflow_runs (single mode)."
},
"status": {
"enum": [
"running",
"failed",
"skipped"
],
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri"
},
"error_reason": {
"type": [
"string",
"null"
],
"description": "Failure cause when status is failed, else null."
},
"trigger_type": {
"type": "string",
"description": "How the run was triggered. manual for this tool."
},
"error_summary": {
"type": "string"
},
"runner_session_id": {
"type": "string"
},
"workflow_template_id": {
"type": "string",
"format": "uuid"
}
}
}update_workflow
Make a partial update to a workflow template; only the fields you send change. Commonly used to activate, rename, archive, or edit a workflow's steps — call get_workflow first to see the current state.
Input Schema
{
"type": "object",
"required": [
"workflow_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"tags": {
"type": "array"
},
"steps": {
"type": "array"
},
"inputs": {
"type": "object"
},
"status": {
"enum": [
"draft",
"active",
"archived"
],
"type": "string"
},
"description": {
"type": "string"
},
"workflow_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the workflow to update."
},
"allowed_tools": {
"type": "array"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"required": [
"id",
"name",
"status",
"link_url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"steps": {
"type": "array"
},
"inputs": {
"type": "object"
},
"status": {
"enum": [
"draft",
"active",
"archived"
],
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri"
},
"updated_at": {
"type": "string"
},
"allowed_tools": {
"type": "array"
}
}
}Account
get_current_user_info
Return profile and subscription information for the current user, including their active team, plan, and remaining AI credits. Use it to personalize responses or check limits before creating content.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"name",
"email",
"active_team_name",
"active_team_role",
"plan_name",
"plan_slug",
"subscription_status",
"ai_credits_available",
"ai_credits_max"
],
"properties": {
"name": {
"type": "string",
"description": "User's display name."
},
"email": {
"type": "string",
"description": "User's email address."
},
"plan_name": {
"type": "string",
"description": "Subscription plan display name."
},
"plan_slug": {
"type": "string",
"description": "Subscription plan identifier."
},
"ai_credits_max": {
"type": "integer",
"description": "AI credit limit for this billing period."
},
"active_team_name": {
"type": "string",
"description": "Name of the user's active team."
},
"active_team_role": {
"type": "string",
"description": "User's role on the active team."
},
"subscription_status": {
"type": "string",
"description": "Current subscription status."
},
"ai_credits_available": {
"type": "integer",
"description": "AI credits remaining this billing period (limit minus used)."
}
}
}get_team_info
Always call when the user asks what team accounts they have, which teams they belong to / are on, or wants to switch teams — do NOT answer from memory or session context, which knows only the single currently-active team and will undercount. This tool is the only way to enumerate the full list. Returns every team you belong to, each with its full member roster. Read-only, no inputs.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"teams"
],
"properties": {
"teams": {
"type": "array",
"items": {
"type": "object",
"required": [
"team_id",
"team_name",
"is_active",
"your_role",
"members"
],
"properties": {
"members": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"role",
"status"
],
"properties": {
"name": {
"type": "string",
"description": "Member name (or the invited email for pending invites)."
},
"role": {
"type": "string",
"description": "Member's role."
},
"email": {
"type": [
"string",
"null"
],
"description": "Member email."
},
"status": {
"type": "string",
"description": "active or invited."
},
"user_id": {
"type": [
"integer",
"null"
],
"description": "Numeric user id (what assigned_to expects). null for a pending invite."
}
}
},
"description": "The team's members."
},
"team_id": {
"type": "integer",
"description": "Numeric team id. Pass to set_active_team."
},
"is_active": {
"type": "boolean",
"description": "True for the caller's currently active team (exactly one)."
},
"team_name": {
"type": "string",
"description": "Team name."
},
"your_role": {
"type": "string",
"description": "The caller's role in this team (e.g. admin, editor, viewer)."
}
}
},
"description": "Every team the caller is an active member of."
}
}
}set_active_team
Sets your active team — the team all subsequent Marcora tool calls operate against. Switching changes your active team everywhere for your account; the response returns `previous_team_id` so you can restore it afterward.
Input Schema
{
"type": "object",
"required": [
"team_id"
],
"properties": {
"team_id": {
"type": "integer",
"description": "The numeric team_id (from get_team_info) to switch to. Must be a team you belong to."
}
}
}Output Schema
{
"type": "object",
"required": [
"active_team"
],
"properties": {
"active_team": {
"type": "object",
"required": [
"team_id",
"team_name"
],
"properties": {
"team_id": {
"type": "integer",
"description": "The now-active team's id."
},
"team_name": {
"type": "string",
"description": "The now-active team's name."
}
}
},
"previous_team_id": {
"type": [
"integer",
"null"
],
"description": "The team that was active before this call. Pass it back to set_active_team to restore."
}
}
}Context Intelligence
list_ci_findings
List Context Intelligence findings — issues Marcora's automated scans detected in your reference library (stale content, contradictions, outdated web sources, gaps). Newest-first; filter by status, severity, or scan type.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page number (default 1)."
},
"status": {
"type": "string",
"description": "Filter by finding status: pending (actionable queue) | acknowledged | dismissed | resolved. Omit for all."
},
"per_page": {
"type": "integer",
"description": "Items per page (default 20, max 100)."
},
"severity": {
"type": "string",
"description": "Filter by severity as recorded by the scan (e.g. high, medium, low). Omit for all."
},
"process_type": {
"type": "string",
"description": "Filter by originating scan: health_audit (library-wide sweep) | web_freshness (tracked webpage changes). Omit for all."
}
}
}Output Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"description": "Finding objects: id (UUID), summary, recommendation, severity, status, process_type, finding_type, suggested_fix, context_item_ids, created_at, resolved_at, resolved_by."
},
"curPage": {
"type": "integer"
},
"nextPage": {
"type": [
"integer",
"null"
]
},
"prevPage": {
"type": [
"integer",
"null"
]
},
"itemsTotal": {
"type": "integer"
}
}
}get_ci_finding
Fetch one Context Intelligence finding in full detail by its UUID — the full recommendation, the suggested fix, and which context items it involves.
Input Schema
{
"type": "object",
"required": [
"finding_id"
],
"properties": {
"finding_id": {
"type": "string",
"description": "Required. UUID of the finding (from list_ci_findings)."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"description": "pending | acknowledged | dismissed | resolved"
},
"summary": {
"type": "string"
},
"severity": {
"type": "string"
},
"created_at": {
"type": "integer"
},
"resolved_at": {
"type": [
"integer",
"null"
]
},
"resolved_by": {
"type": [
"integer",
"null"
]
},
"finding_type": {
"type": "string"
},
"process_type": {
"type": "string"
},
"suggested_fix": {
"type": [
"object",
"null"
],
"description": "Proposed fix: field, new_value, context_item_id."
},
"recommendation": {
"type": [
"string",
"null"
]
},
"context_item_ids": {
"type": [
"array",
"null"
]
}
}
}update_ci_finding_status
Acknowledge, dismiss, or resolve a Context Intelligence finding after reviewing it. Records resolver + timestamp on resolve; does not itself apply the suggested fix (that's done in the web app).
Input Schema
{
"type": "object",
"required": [
"finding_id",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "Required. New status: acknowledged (seen, still open) | dismissed (not relevant) | resolved (issue fixed — records resolver + timestamp)."
},
"finding_id": {
"type": "string",
"description": "Required. UUID of the finding (from list_ci_findings)."
}
}
}Output Schema
{
"type": "object",
"description": "The updated finding row, including the new status (and resolved_at/resolved_by when resolved)."
}trigger_health_audit_scan
Start a library-wide Context Intelligence health audit — an AI sweep of your context/reference items that produces findings. Consumes credits, plan-gated (Business/Command), runs in the background.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "running"
},
"message": {
"type": "string"
},
"scan_run_id": {
"type": [
"string",
"null"
],
"format": "uuid"
}
}
}Context & Resources
get_brand_foundation
Return the team's Brand Foundation: company overview, brand voice, writing style, and writing examples. Call it whenever the user asks about, or wants you to use, their brand voice, company information, or writing style.
Input Schema
{
"type": "object",
"properties": {
"elements": {
"type": "array",
"items": {
"enum": [
"company_overview",
"brand_voice",
"writing_style",
"writing_examples"
],
"type": "string"
},
"description": "Optional subset of elements to return. Omit or pass empty to return all four."
}
}
}Output Schema
{
"type": "object",
"properties": {
"link_url": {
"type": "string",
"description": "Deep-link to the Brand Foundation section in the Marcora web app. Always present."
},
"brand_voice": {
"type": "string",
"description": "Markdown content for Brand Voice. Empty string if not set. Only present if requested via elements."
},
"writing_style": {
"type": "string",
"description": "Markdown content for Writing Style. Empty string if not set. Only present if requested via elements."
},
"company_overview": {
"type": "string",
"description": "Markdown content for Company Overview. Empty string if not set. Only present if requested via elements."
},
"writing_examples": {
"type": "string",
"description": "Markdown content for Writing Examples. Free-form structure — whatever the user has saved. Empty string if not set. Only present if requested via elements."
}
}
}list_context_collections
List all context collections you can access. Collections group reference materials; use a collection's ID to add items to it or to target context retrieval.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"collections"
],
"properties": {
"collections": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"link_url"
],
"properties": {
"id": {
"type": "integer",
"description": "Collection ID. Pass to add_context or get_relevant_context."
},
"name": {
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view this collection in the Marcora app."
},
"is_private": {
"type": "boolean"
},
"item_count": {
"type": "integer"
},
"description": {
"type": "string"
}
}
}
}
}
}update_brand_foundation
Overwrite one of the team's four Brand Foundation elements — company overview, brand voice, writing style, or writing examples — with new content. Always a full replace, so read the current value with get_brand_foundation first to confirm what's being replaced.
Input Schema
{
"type": "object",
"required": [
"element",
"content"
],
"properties": {
"content": {
"type": "string",
"description": "New markdown content. Replaces existing content in full. Free-form — no enforced structure."
},
"element": {
"enum": [
"company_overview",
"brand_voice",
"writing_style",
"writing_examples"
],
"type": "string",
"description": "Which element to overwrite."
}
}
}Output Schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Updated markdown content (echoes what was stored)."
},
"element": {
"type": "string",
"description": "Which element was updated (echoes the input)."
},
"link_url": {
"type": "string",
"description": "Deep-link to the Brand Foundation section in the Marcora web app. Always present."
}
}
}create_context_collection
Create a new context collection to group related reference materials for easier management and targeted retrieval. Use the returned ID with add_context to add items to the collection.
Input Schema
{
"type": "object",
"required": [
"name",
"description",
"is_private"
],
"properties": {
"name": {
"type": "string",
"description": "A descriptive name for the collection"
},
"is_private": {
"type": "boolean",
"description": "If true, only you can see this collection. If false, all team members can access it."
},
"description": {
"type": "string",
"description": "A short description of what this collection contains"
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "Collection ID. Pass this as collection_id to add_context to add items to this collection."
},
"name": {
"type": "string",
"description": "Collection name."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view this collection in the Marcora app."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation."
},
"is_private": {
"type": "boolean",
"description": "Whether this collection is private to the creator."
},
"description": {
"type": "string",
"description": "Collection description."
}
}
}add_context
Add a new reference item to your context library, the source material that powers on-brand AI generation. Supply the body as pasted markdown, a one-off URL import, or a tracked live web page, and optionally file it under a collection or project.
Input Schema
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Descriptive name for the context item"
},
"content": {
"type": "string",
"description": "Markdown body (creates a manual item). Provide exactly one of content, import_url, or connected_webpage_url."
},
"import_url": {
"type": "string",
"description": "Give a public URL to import once. The backend fetches the page, converts it to clean markdown, and stores that as a static snapshot (the URL isn't kept and the item isn't refreshable). Importing is asynchronous: the call returns immediately with the new item's `id` and `import_status: \"processing\"`, and the content finishes loading a moment later. Check on it with `get_context_item` — the content appears and `import_status` flips to `\"ready\"`. Because the call returns right away, you can import many URLs back-to-back without anything timing out. If an item is still missing a minute or two later, the fetch didn't succeed — check the URL and try again. Provide exactly one of the three body inputs."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Project ID to associate with (from list_projects). Omit it to leave the item unassociated."
},
"collection_id": {
"type": "integer",
"description": "Collection ID to organize the item (from list_context_collections or create_context_collection). Omit it — or pass 0 — to file the item at the top level of the Reference Library."
},
"connected_webpage_url": {
"type": "string",
"description": "Public URL tracked as a live, refreshable webpage item (URL stored; dedupes by URL; admin/editor only). Provide exactly one of the three body inputs."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Context item ID"
},
"name": {
"type": "string",
"description": "Context item name"
},
"content": {
"type": "string",
"description": "The stored reference content. For imported items, `content` is empty in the immediate response — fetch the item with `get_context_item` to read the full body."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view this context item in the Marcora app"
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation"
},
"project_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Project association (null if none)"
},
"word_count": {
"type": "integer",
"description": "Word count of content"
},
"content_type": {
"type": "string",
"description": "manual (from content / import_url) or webpage (from connected_webpage_url)"
},
"collection_id": {
"type": [
"integer",
"null"
],
"description": "Collection this item belongs to (null if none)"
},
"import_status": {
"type": "string",
"description": "For import_url items, the load state: `\"processing\"` immediately after the call, `\"ready\"` once the content has finished loading. Empty for pasted content and web pages."
}
}
}update_context
Update an existing context item: change its name, body, collection, or project, or re-pull a tracked web page's content. Collection and project use full-replace semantics, so always pass both.
Input Schema
{
"type": "object",
"required": [
"context_item_id",
"collection_id",
"project_id"
],
"properties": {
"name": {
"type": "string",
"description": "If provided, updates the name. Omit to leave unchanged. Ignored when refresh_webpage is true."
},
"content": {
"type": "string",
"description": "New markdown body. Omit to leave unchanged. Triggers RAG re-embedding. Mutually exclusive with import_url. Ignored when refresh_webpage is true."
},
"import_url": {
"type": "string",
"description": "Public URL — backend fetches and converts to clean markdown server-side, then stores it as a fresh one-off snapshot body. Mutually exclusive with content. Ignored when refresh_webpage is true."
},
"project_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Full replace. Pass the current ID to keep the project association, pass a different ID to move it, or pass null to disassociate it."
},
"collection_id": {
"type": [
"integer",
"null"
],
"description": "Full replace. Pass the current ID to keep the item in its collection, pass a different ID to move it, or pass null (0 works too) to move it back to the top level of the Reference Library."
},
"context_item_id": {
"type": "string",
"format": "uuid",
"description": "The context item to update."
},
"refresh_webpage": {
"type": "boolean",
"description": "Set true to re-pull a webpage item's content from its stored URL. Ignores name / content / import_url. Errors on non-webpage items. Admin/editor only."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Context item ID."
},
"name": {
"type": "string",
"description": "Updated context item name."
},
"content": {
"type": "string",
"description": "Updated reference content."
},
"link_url": {
"type": "string",
"description": "Direct URL to view this context item in the Marcora app."
},
"project_id": {
"type": [
"string",
"null"
],
"description": "Project this item is associated with (null if none)."
},
"updated_at": {
"type": "integer",
"description": "Unix timestamp of last update."
},
"word_count": {
"type": "integer",
"description": "Word count of updated content."
},
"collection_id": {
"type": [
"integer",
"null"
],
"description": "Collection this item belongs to (null if none)."
},
"content_intro": {
"type": "string",
"description": "Truncated content intro used in listings."
},
"relevancy_processed_status": {
"type": "string",
"description": "RAG re-processing status (unprocessed, provisional, complete). Flips to unprocessed whenever name or content changes."
}
}
}get_relevant_context
Search the team's context library and return the most relevant chunks for a prompt. Use it when you need to read context yourself to answer a question or ideate — not before create_content, which gathers context automatically.
Input Schema
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"description": "Search prompt describing the topic/question. Be specific."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Additive — ALSO searches that project's context alongside the general library. Not an exclusive filter."
},
"collection_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Additive — ALSO searches those collections alongside the general library. Not an exclusive filter."
},
"context_rag_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "Previously-returned chunk IDs to exclude (pagination — pass back the context_rag_ids from a prior call)."
},
"dimension_option_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Targeting dimension OPTION IDs (from list_targeting_dimensions) — biases relevancy toward an audience/persona/industry."
},
"include_brand_foundation": {
"type": "boolean",
"description": "Set true to also receive the team's Brand Foundation in the same response. Default false."
}
}
}Output Schema
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"link_url": {
"type": [
"string",
"null"
],
"description": "Deep-link that opens this item in the Marcora web app. Present for every source."
},
"project_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "The project the item belongs to, if any."
},
"source_url": {
"type": "string",
"description": "The original external page URL. Present only for webpage items; omitted for all other types."
},
"content_type": {
"type": [
"string",
"null"
],
"description": "One of: file, manual, webpage, canvas, deliverable, integration_data, call_transcript."
},
"last_updated": {
"type": [
"integer",
"null"
],
"description": "Unix-ms timestamp of the item's last update (null if never updated)."
},
"collection_id": {
"type": [
"integer",
"null"
],
"description": "The collection the item belongs to, if any."
},
"context_item_id": {
"type": "string",
"format": "uuid",
"description": "The parent context item's ID."
},
"context_rag_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "The chunk IDs in THIS response that came from this item. Union across all sources equals the top-level context_rag_ids."
},
"context_item_name": {
"type": [
"string",
"null"
],
"description": "The item's name."
}
}
},
"description": "One entry per parent context item the returned chunks came from."
},
"retrieval": {
"type": "object",
"properties": {
"project_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Echo of the project_id input."
},
"team_scope": {
"type": "string",
"description": "Always authenticated_user_active_team."
},
"collection_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Echo of the collection_ids input."
},
"returned_count": {
"type": "integer",
"description": "Number of context chunks returned."
},
"dimension_option_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Echo of the dimension_option_ids input."
},
"excluded_context_rag_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "Echo of the context_rag_ids input (the exclusions)."
}
},
"description": "Echo of the search scope this response was produced under."
},
"context_rag_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "All chunk IDs returned. Pass back in context_rag_ids to exclude on the next page (pagination)."
},
"brand_foundation": {
"type": "object",
"properties": {
"elements": {
"type": [
"object",
"null"
],
"properties": {
"brand_voice": {
"type": "string"
},
"writing_style": {
"type": "string"
},
"company_overview": {
"type": "string"
},
"writing_examples": {
"type": "string"
}
},
"description": "Null unless included. When present: company_overview, brand_voice, writing_style, writing_examples (all strings)."
},
"included": {
"type": "boolean",
"description": "True only when include_brand_foundation: true was passed."
},
"link_url": {
"type": "string",
"description": "Deep-link to the Brand Foundation tab in the Marcora web app. Present only when included."
}
},
"description": "Always present. included=true only when include_brand_foundation was passed; elements is null otherwise."
},
"relevant_context": {
"type": "string",
"description": "Ready-to-use markdown context packet assembled from the matched chunks."
}
}
}list_context_items
List context items from the team's library, each with its collection, project, and a link to open it in Marcora. By default it returns all items you can see; private items you don't have access to are filtered out. Pass a `search` query to rank items by semantic relevance instead of recency.
Input Schema
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Optional natural-language query. When provided, context-library items are ranked by SEMANTIC relevance to this query (by each item's best-matching chunk) instead of recency, and each item gains a relevance_score. Omit or leave empty for the normal list."
},
"reference_library_only": {
"type": "boolean",
"description": "When true, returns only items not in any project or collection (Reference Library only). Default false returns everything."
}
}
}Output Schema
{
"type": "object",
"required": [
"context_items"
],
"properties": {
"context_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Context item ID. Pass to get_context_item to fetch full markdown."
},
"name": {
"type": "string"
},
"added_by": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"description": "{id: integer, name: string} — the user who added the item."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation."
},
"project_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Project this item is associated with, or null."
},
"source_url": {
"type": [
"string",
"null"
],
"description": "For webpage items, the tracked page URL (re-pull it with update_context refresh_webpage); null for all other item types."
},
"updated_at": {
"type": [
"integer",
"null"
],
"description": "Unix timestamp of last update."
},
"word_count": {
"type": "integer"
},
"content_type": {
"type": "string",
"description": "One of manual, webpage, canvas, deliverable, integration_data, call_transcript, file."
},
"collection_id": {
"type": [
"integer",
"null"
],
"description": "Collection this item lives in, or null."
},
"content_intro": {
"type": "string",
"description": "Short truncation of the content for previews."
},
"relevance_score": {
"type": [
"number",
"null"
],
"description": "Present only when a `search` query was given. A number (cosine similarity 0–1; higher = more relevant) when the item was scored against embeddings, or null when the item is not embedded yet and could not be scored (sorts last). Absent entirely when no search was provided. Cross-comparable with list_content relevance_score."
},
"relevancy_processed_status": {
"type": "string",
"description": "RAG indexing status. One of unprocessed, provisional, complete."
}
}
}
}
}
}Blueprints
list_blueprints
List all blueprints in your team's library, each with its content category. Use a blueprint's UUID with create_content to generate content from that template.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"blueprints"
],
"properties": {
"blueprints": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Blueprint name."
},
"web_url": {
"type": "string",
"description": "Direct URL to view this blueprint in Marcora."
},
"category": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
},
"description": "Content category this blueprint belongs to: { id, name }. id matches list_content_categories."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp (ms) of creation."
},
"content_count": {
"type": "integer",
"description": "Number of content items generated from this blueprint."
},
"blueprint_uuid": {
"type": "string",
"format": "uuid",
"description": "Unique identifier — pass as blueprint_uuid to create_content."
},
"team_visibility": {
"type": "string",
"description": "Visibility within your team (e.g. team, private)."
},
"input_instructions": {
"type": "string",
"description": "Guidance on what context to provide when generating from this blueprint."
},
"exchange_visibility": {
"type": "string",
"description": "Community exchange visibility (e.g. public, none)."
}
}
}
}
}
}get_blueprint
Retrieve the full details of a specific blueprint by its UUID, including its content, AI-generated analysis, and metadata. Find blueprint UUIDs with list_blueprints.
Input Schema
{
"type": "object",
"required": [
"blueprint_uuid"
],
"properties": {
"blueprint_uuid": {
"type": "string",
"format": "uuid",
"description": "UUID of the blueprint to retrieve"
}
}
}Output Schema
{
"type": "object",
"required": [
"blueprint_uuid",
"name"
],
"properties": {
"name": {
"type": "string"
},
"summary": {
"type": "string"
},
"web_url": {
"type": "string"
},
"category": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"created_at": {
"type": "integer"
},
"blueprint_dna": {
"type": "string"
},
"blueprint_uuid": {
"type": "string",
"format": "uuid"
},
"source_content": {
"type": "string"
},
"team_visibility": {
"type": "string"
},
"reference_content": {
"type": "string"
},
"input_instructions": {
"type": "string"
},
"exchange_visibility": {
"type": "string"
}
}
}create_blueprint
Create a reusable blueprint template from finished example content for generating content at scale. The AI analyzes your example and produces the supporting template fields. Use create_blueprint_draft instead if you want to iterate on the template with AI before publishing.
Input Schema
{
"type": "object",
"required": [
"name",
"category_id",
"source_content"
],
"properties": {
"name": {
"type": "string",
"description": "Blueprint name"
},
"category_id": {
"type": "integer",
"description": "Category ID from get_content_categories"
},
"source_content": {
"type": "string",
"description": "Well-structured markdown template content"
}
}
}Output Schema
{
"type": "object",
"required": [
"blueprint_uuid",
"name",
"link_url"
],
"properties": {
"name": {
"type": "string",
"description": "Blueprint name."
},
"summary": {
"type": "string",
"description": "AI-generated summary of what this blueprint produces."
},
"category": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer",
"description": "Category ID."
},
"name": {
"type": "string",
"description": "Category name."
}
},
"description": "Content category this blueprint belongs to."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct link to view this blueprint in Marcora."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation."
},
"blueprint_dna": {
"type": "string",
"description": "AI-generated analysis of the template structure, tone, and section descriptions."
},
"blueprint_uuid": {
"type": "string",
"format": "uuid",
"description": "Unique identifier — use as blueprint_uuid in create_deliverable_from_blueprint."
},
"source_content": {
"type": "string",
"description": "The original template content you provided."
},
"team_visibility": {
"type": "string",
"description": "Visibility within your team (e.g. team, private)."
},
"reference_content": {
"type": "string",
"description": "AI-polished reference version of the template content."
},
"input_instructions": {
"type": "string",
"description": "AI-generated guidance for users on what context to provide when generating from this blueprint."
}
}
}create_blueprint_draft
Create an AI-assisted blueprint draft from a prompt that the user can review and edit in Marcora before publishing. Use create_blueprint instead if you already have the finished template content.
Input Schema
{
"type": "object",
"required": [
"instructions",
"name",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "Name for the draft"
},
"content": {
"type": "string",
"description": "Initial content as markdown"
},
"category_id": {
"type": "integer",
"description": "Category ID from get_content_categories"
},
"instructions": {
"type": "string",
"description": "Description of the blueprint to create"
}
}
}Output Schema
{
"type": "object",
"required": [
"id",
"uuid",
"title",
"content",
"link_url"
],
"properties": {
"id": {
"type": "integer",
"description": "Canvas record ID for the blueprint draft"
},
"uuid": {
"type": "string",
"format": "uuid",
"description": "Unique identifier for this draft — pass as draft_uuid to finalize_blueprint_draft."
},
"title": {
"type": "string",
"description": "Blueprint draft name"
},
"content": {
"type": "string",
"description": "AI-generated blueprint template content in markdown"
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view/edit this blueprint draft in Marcora"
}
}
}finalize_blueprint_draft
Publish a previously created blueprint draft into a full, usable blueprint. This is the final step after the user reviews the draft produced by create_blueprint_draft.
Input Schema
{
"type": "object",
"required": [
"draft_uuid"
],
"properties": {
"name": {
"type": "string",
"description": "Optional name override. If not provided, uses the draft's existing title."
},
"draft_uuid": {
"type": "string",
"format": "uuid",
"description": "The UUID of the blueprint draft to finalize (returned as 'uuid' from create_blueprint_draft)."
},
"category_id": {
"type": "integer",
"description": "Optional category ID override. If not provided, uses the draft's existing category. Get valid IDs from get_content_categories."
}
}
}Output Schema
{
"type": "object",
"required": [
"blueprint_uuid",
"name",
"link_url"
],
"properties": {
"name": {
"type": "string",
"description": "Blueprint name."
},
"summary": {
"type": "string",
"description": "AI-generated summary of what this blueprint produces."
},
"category": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer",
"description": "Category ID."
},
"name": {
"type": "string",
"description": "Category name."
}
},
"description": "Content category this blueprint belongs to."
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct link to view this blueprint in Marcora."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation."
},
"blueprint_dna": {
"type": "string",
"description": "AI-generated analysis of the template structure, tone, and section descriptions."
},
"blueprint_uuid": {
"type": "string",
"format": "uuid",
"description": "Unique identifier — use as blueprint_uuid in create_deliverable_from_blueprint."
},
"source_content": {
"type": "string",
"description": "The template content from the finalized draft."
},
"team_visibility": {
"type": "string",
"description": "Visibility within your team (e.g. team, private)."
},
"reference_content": {
"type": "string",
"description": "AI-polished reference version of the template content."
},
"input_instructions": {
"type": "string",
"description": "AI-generated guidance for users on what context to provide when generating from this blueprint."
}
}
}list_community_blueprints
Browse community blueprints shared by other Marcora users, with name, summary, contributor, and category. Use a blueprint's ID to view its full details before importing.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"community_blueprints"
],
"properties": {
"community_blueprints": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"summary"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Blueprint exchange ID. Pass to get_community_blueprint_details or import_community_blueprint."
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"summary": {
"type": "string"
},
"category": {
"type": "string"
},
"visibility": {
"type": "string"
},
"is_featured": {
"type": "boolean"
},
"category_short": {
"type": "string"
},
"contributor_name": {
"type": "string"
},
"input_instructions": {
"type": "string"
},
"contributor_company": {
"type": "string"
}
}
}
}
}
}get_community_blueprint_details
Get the full details of a community blueprint, including its example content and style guide. Use the ID from list_community_blueprints, and pass it to import_community_blueprint to add the blueprint to your team.
Input Schema
{
"type": "object",
"properties": {
"blueprint_exchange_id": {
"type": "string",
"format": "uuid",
"description": "Blueprint exchange ID from get_community_blueprints"
}
}
}Output Schema
{
"type": "object",
"required": [
"id",
"name",
"content"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Blueprint exchange ID. Pass to import_community_blueprint."
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"content": {
"type": "string",
"description": "Full example document content in markdown"
},
"summary": {
"type": "string"
},
"visibility": {
"type": "string"
},
"is_featured": {
"type": "boolean"
},
"contributor_name": {
"type": "string"
},
"input_instructions": {
"type": "string"
},
"content_description": {
"type": "string",
"description": "Template structure and style guidelines"
},
"contributor_company": {
"type": "string"
},
"contributor_job_title": {
"type": "string"
},
"suggested_content_type": {
"type": "string"
}
}
}import_community_blueprint
Import a blueprint from the Marcora community exchange into your team's library. Once imported, use it like any of your own blueprints to generate content.
Input Schema
{
"type": "object",
"properties": {
"blueprint_exchange_id": {
"type": "string",
"format": "uuid",
"description": "Blueprint exchange ID from get_community_blueprints"
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "Blueprint record ID"
},
"name": {
"type": "string"
},
"uuid": {
"type": "string",
"format": "uuid",
"description": "Unique identifier — use as blueprint_uuid in create_deliverable_from_blueprint"
},
"content": {
"type": "string"
},
"created_at": {
"type": "integer"
},
"team_visibility": {
"type": "string"
},
"imported_exchange_id": {
"type": "string",
"format": "uuid"
}
}
}Reference
list_content_categories
List the content categories available to your team, such as GTM Messaging or Website & Blog. Use a category's ID when creating blueprints or content.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"categories"
],
"properties": {
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer",
"description": "Category ID. Pass to create_blueprint or create_blueprint_draft as category_id."
},
"name": {
"type": "string",
"description": "Category name (e.g. GTM Messaging)"
}
}
}
}
}
}list_targeting_dimensions
List the team's targeting dimensions and their options, such as Buying Stage or Persona. Pass the option IDs to create_content to target generated content at specific audiences or stages.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"dimensions"
],
"properties": {
"dimensions": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"options"
],
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"description": "Dimension name (e.g. Buying Stage, Persona)"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer",
"description": "Pass in dimension_option_ids when creating content."
},
"name": {
"type": "string",
"description": "Option name (e.g. Awareness, Decision)"
}
}
}
}
}
}
}
}
}Sharing
create_external_share
Create a public share link for a content document, optionally with an expiration date. Anyone with the link can view it without a Marcora account, and it won't be indexed by search engines.
Input Schema
{
"type": "object",
"required": [
"content_id"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"description": "The ID of the content you wish to share."
},
"expires_at": {
"type": "integer",
"description": "Optional. Unix timestamp for link expiration."
}
}
}Output Schema
{
"type": "object",
"required": [
"share_link"
],
"properties": {
"share_link": {
"type": "string",
"description": "Public URL (https://app.marcora.ai/s/<token>) anyone can use to view the content."
}
}
}convert_markdown_to_word_doc
Export markdown content as a downloadable Word (.docx) file. Useful when the user needs a Microsoft Word or Google Docs–compatible version of a document.
Input Schema
{
"type": "object",
"required": [
"markdown_content"
],
"properties": {
"filename": {
"type": "string",
"description": "Filename without extension"
},
"document_url": {
"type": "string",
"description": "URL to embed as footer link to original document"
},
"markdown_content": {
"type": "string",
"description": "Markdown content to convert"
}
}
}Output Schema
{
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Filename of the generated Word document"
},
"download_url": {
"type": "string",
"description": "URL to download the generated .docx Word document"
}
}
}Projects
list_projects
List all projects visible to you. Projects organize content into workstreams; use a project's ID to fetch its details or to associate new content with it.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"required": [
"projects"
],
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"link_url"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
},
"link_url": {
"type": "string",
"format": "uri",
"description": "Direct URL to view this project in the Marcora app."
},
"created_by": {
"type": "string"
},
"visibility": {
"type": "string"
},
"member_count": {
"type": "integer"
},
"content_count": {
"type": "integer",
"description": "Number of content items in this project"
}
}
}
}
}
}get_project
Get the details of a specific project, including its members, documents, context items, and brief. Find project IDs with list_projects.
Input Schema
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"project_id": {
"type": "string",
"description": "Project UUID from list_projects."
}
}
}Output Schema
{
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string",
"description": "Project ID."
},
"name": {
"type": "string",
"description": "Project name."
},
"status": {
"type": "string",
"description": "Project status."
},
"members": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"role": {
"type": "string"
},
"email": {
"type": "string"
},
"user_id": {
"type": "integer"
}
}
},
"description": "Project members."
},
"documents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"stage": {
"type": "string"
},
"web_url": {
"type": "string"
},
"category": {
"type": [
"object",
"null"
]
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "Content UUID — pass to get_content or update_content."
},
"visibility": {
"type": "string"
}
}
},
"description": "Documents in this project."
},
"created_at": {
"type": "integer",
"description": "Unix timestamp of creation."
},
"visibility": {
"type": "string",
"description": "Visibility setting."
},
"context_items": {
"type": "array",
"description": "Context items associated with this project."
},
"project_brief": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"content_id": {
"type": "string",
"format": "uuid"
}
},
"description": "The project's pinned brief document, if set. {name, content_id} — same shape as create_project's project_brief field. Pass content_id to update_content / get_content to edit or read the brief. null if the project has no brief set."
}
}
}create_project
Create a new project to organize content and context into a workstream, optionally with a brief supplied directly or generated by AI. Use the returned project ID to associate new content with the project.
Input Schema
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Project name."
},
"visibility": {
"enum": [
"team",
"private"
],
"type": "string",
"default": "team",
"description": "team or private. Defaults to team."
},
"project_brief_details": {
"type": "string",
"minLength": 1,
"description": "If supplied, an AI-generated project brief is created and attached to the project. The brief's content_id is returned in the response so it can be passed to update_content later for edits."
}
}
}Output Schema
{
"type": "object",
"required": [
"project_id",
"name",
"link_url"
],
"properties": {
"name": {
"type": "string",
"description": "Project name."
},
"link_url": {
"type": "string",
"description": "Direct URL to view this project in Marcora."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Project identifier."
},
"project_brief": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": "string"
},
"content_id": {
"type": "string",
"format": "uuid"
}
},
"description": "Present (non-null) only when project_brief_details was supplied. {name, content_id}. content_id is the canvas UUID — pass it to update_content / get_content to edit or read the brief. name may be empty immediately after creation while AI generation is in flight."
}
}
}update_project
Update mutable fields on an existing project, such as its name, visibility, status, or brief. Uses PATCH semantics, so only the fields you pass change.
Input Schema
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "New project name. Must be non-empty when provided. Omit to leave unchanged."
},
"status": {
"enum": [
"active",
"archived"
],
"type": "string",
"description": "New project status. active for ongoing work; archived to hide from the active list while preserving content. Setting to active requires available active-project usage. Omit to leave unchanged."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the project to update. Get from list_projects or get_project."
},
"visibility": {
"enum": [
"team",
"private"
],
"type": "string",
"description": "New visibility setting. team makes it visible to all team members; private restricts to the creator and explicit project members. Omit to leave unchanged."
},
"project_brief_id": {
"type": "string",
"format": "uuid",
"description": "UUID of an existing content item to set as this project's brief. If the content isn't already attached to the project, this tool will attach it AND set it as the brief in one call."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"required": [
"success",
"message"
],
"properties": {
"message": {
"type": "string",
"description": "Human-readable status message."
},
"project": {
"type": [
"object",
"null"
],
"description": "The updated project record."
},
"success": {
"type": "boolean",
"description": "True if the update applied successfully."
}
}
}Plans & Playbooks
list_plans
List plans visible to the authenticated user with filters and pagination.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page number (default 1)."
},
"sort": {
"type": "string",
"description": "\"due_asc_nulls_last\" (default) | \"created_desc\"."
},
"stage": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by stage. Use UNDERSCORE form (e.g. In_Process). Allowed: Suggested, Accepted, In_Process, Complete, Dismissed. Only the first element is honored currently."
},
"source": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by source. Allowed: user_added, cora_proactive, cora_requested, workflow, playbook. Only the first element is honored currently."
},
"per_page": {
"type": "integer",
"description": "Items per page (default 20, max 100)."
},
"due_after": {
"type": "string",
"description": "ISO date YYYY-MM-DD. Note: does not apply yet."
},
"due_before": {
"type": "string",
"description": "ISO date YYYY-MM-DD. Note: does not apply yet."
},
"project_id": {
"type": "string",
"description": "Filter to plans associated with this project UUID."
},
"category_id": {
"type": "integer",
"description": "Filter to plans in this content category (integer ID)."
},
"search_text": {
"type": "string",
"description": "Substring match on plan title. Note: does not apply yet."
},
"assignee_scope": {
"type": "string",
"description": "Whose plans to return. \"me\" (default) | \"created_by_me\" | \"all_visible\"."
}
}
}Output Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stage": {
"type": "string"
},
"title": {
"type": "string"
},
"source": {
"type": "string"
},
"due_date": {
"type": "string"
},
"plan_uuid": {
"type": "string"
},
"created_at": {
"type": "string"
},
"created_by": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"assigned_to": {
"type": "integer"
},
"produced_content_id": {
"type": "string"
}
}
}
},
"curPage": {
"type": "integer"
},
"nextPage": {
"type": "integer"
},
"prevPage": {
"type": "integer"
},
"itemsTotal": {
"type": "integer"
}
}
}get_plan
Fetch a single plan by UUID with linked references, context collections, targeting dimensions, and metadata.
Input Schema
{
"type": "object",
"required": [
"plan_uuid"
],
"properties": {
"plan_uuid": {
"type": "string",
"format": "uuid",
"description": "The UUID of the plan to fetch. Use plan_uuid, not the integer id."
}
}
}Output Schema
{
"type": "object",
"properties": {
"plan": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"stage": {
"type": "string"
},
"title": {
"type": "string"
},
"prompt": {
"type": "string"
},
"source": {
"type": "string"
},
"team_id": {
"type": "integer"
},
"due_date": {
"type": "string"
},
"plan_uuid": {
"type": "string"
},
"created_at": {
"type": "string"
},
"created_by": {
"type": "integer"
},
"project_id": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"assigned_to": {
"type": "integer"
},
"category_id": {
"type": "integer"
},
"description": {
"type": "string"
},
"blueprint_id": {
"type": "string"
},
"_produced_content": {
"type": "object",
"description": "The linked content object or null. When non-null contains at minimum: content_id, name, stage, visibility."
},
"context_collections": {
"type": "array"
},
"produced_content_id": {
"type": "string"
},
"reference_documents": {
"type": "array",
"description": "Content UUIDs accessible to the current user."
},
"targeting_dimensions": {
"type": "array"
},
"_source_metadata_resolved": {
"type": "object"
}
}
}
}
}create_plan
Create a new plan in the authenticated user's active team.
Input Schema
{
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "One-line summary of the content intent (1-200 characters)."
},
"prompt": {
"type": "string",
"description": "Optional. Content prompt that pre-populates the creation form when the plan is acted on."
},
"source": {
"type": "string",
"description": "Optional. Allowed: user_added, cora_proactive, cora_requested, workflow, playbook. Default: cora_requested. Immutable after creation."
},
"due_date": {
"type": "string",
"description": "Optional. ISO date YYYY-MM-DD."
},
"plan_uuid": {
"type": "string",
"format": "uuid",
"description": "Optional. Client-supplied UUIDv4 for optimistic creates. Server generates if omitted."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Project UUID to associate with."
},
"assigned_to": {
"type": "integer",
"description": "Optional. Integer user ID to assign. Defaults to creator. Must be a current team member."
},
"category_id": {
"type": "integer",
"description": "Optional. Content category integer ID."
},
"description": {
"type": "string",
"description": "Optional. Free-text description."
},
"blueprint_id": {
"type": "string",
"format": "uuid",
"description": "Optional. UUID of the content blueprint/template."
},
"source_metadata": {
"type": "object",
"description": "Optional. Contextual metadata (JSON). Immutable after creation."
},
"context_collection_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Optional. Integer collection IDs to pre-attach."
},
"reference_document_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "Optional. Content UUIDs to associate as reference material."
},
"targeting_dimension_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Optional. Integer dimension option IDs to pre-attach."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"stage": {
"type": "string"
},
"title": {
"type": "string"
},
"prompt": {
"type": "string"
},
"source": {
"type": "string"
},
"team_id": {
"type": "integer"
},
"due_date": {
"type": "string"
},
"plan_uuid": {
"type": "string"
},
"created_at": {
"type": "string"
},
"created_by": {
"type": "integer"
},
"project_id": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"assigned_to": {
"type": "integer"
},
"category_id": {
"type": "integer"
},
"description": {
"type": "string"
},
"blueprint_id": {
"type": "string"
}
},
"description": "Full plan object."
}update_plan
Partial update of a plan: mutable fields and stage transitions.
Input Schema
{
"type": "object",
"required": [
"plan_uuid"
],
"properties": {
"title": {
"type": "string",
"description": "Optional. New title."
},
"prompt": {
"type": "string",
"description": "Optional. Updated content prompt."
},
"due_date": {
"type": "string",
"description": "Optional. ISO YYYY-MM-DD. Pass null to clear."
},
"plan_uuid": {
"type": "string",
"format": "uuid",
"description": "UUID of the plan to update."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Project UUID. Pass null to clear."
},
"assigned_to": {
"type": "integer",
"description": "Optional. Integer user ID. Must be a current team member."
},
"category_id": {
"type": "integer",
"description": "Optional. Content category ID. Pass null to clear."
},
"description": {
"type": "string",
"description": "Optional. New description."
},
"blueprint_id": {
"type": "string",
"format": "uuid",
"description": "Optional. Blueprint UUID. Pass null to clear."
},
"target_stage": {
"type": "string",
"description": "Optional. Trigger a stage transition. Use UNDERSCORE form (e.g. In_Process). Allowed: Suggested, Accepted, In_Process, Complete, Dismissed."
},
"context_collection_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Optional. REPLACES the full set of context collections. Pass [] to clear all."
},
"reference_document_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"description": "Optional. REPLACES the full set of reference documents. Pass [] to clear all."
},
"targeting_dimension_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Optional. REPLACES the full set of targeting dimensions. Pass [] to clear all."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"stage": {
"type": "string"
},
"title": {
"type": "string"
},
"source": {
"type": "string"
},
"plan_uuid": {
"type": "string"
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": "string"
}
},
"description": "Updated plan object with all fields."
}produce_plan
Produce (generate) the actual content a plan describes — the MCP equivalent of the Generate button on the plans board.
Input Schema
{
"type": "object",
"required": [
"plan_uuid"
],
"properties": {
"plan_uuid": {
"type": "string",
"description": "UUID of the plan to produce. Must be in Accepted stage."
}
}
}Output Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "\"deliverable\" (plan has a blueprint) or \"canvas\" (no blueprint)."
},
"plan_uuid": {
"type": "string",
"description": "The plan being produced."
},
"generation_id": {
"type": "string",
"description": "Poll get_generation_status with this until complete."
}
}
}list_playbooks
List all content playbooks visible to the caller in the current team. Returns summaries only — call get_playbook for a playbook's items.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"link_url": {
"type": "string",
"description": "Opens the playbook in the Marcora web app."
},
"created_at": {
"type": "string"
},
"item_count": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"visibility": {
"type": "string"
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Persisted YYYY-MM-DD reference date, or null."
},
"description": {
"type": "string"
}
}
}
}
}
}get_playbook
Fetch one content playbook by id, including its full ordered list of items.
Input Schema
{
"type": "object",
"required": [
"playbook_id"
],
"properties": {
"playbook_id": {
"type": "integer",
"description": "ID of the playbook to fetch."
}
}
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"prompt": {
"type": "string"
},
"category_id": {
"type": "integer"
},
"description": {
"type": "string"
},
"offset_days": {
"type": "integer"
},
"blueprint_id": {
"type": "string"
}
}
},
"description": "Ordered playbook items."
},
"link_url": {
"type": "string",
"description": "Opens the playbook in the Marcora web app."
},
"visibility": {
"type": "string"
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Persisted YYYY-MM-DD reference date, or null."
},
"description": {
"type": "string"
}
}
}create_playbook
Create a reusable content playbook — an ordered template of content-plan items you can stamp out as a batch.
Input Schema
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Playbook name."
},
"items": {
"type": "array",
"items": {
"type": "object"
},
"description": "Ordered playbook items (each becomes one plan on instantiation)."
},
"visibility": {
"type": "string",
"description": "\"team\" (default) or \"private\"."
},
"anchor_date": {
"type": "string",
"description": "Optional YYYY-MM-DD reference date the playbook is built around (a launch, event, campaign kickoff). Persisted on the playbook; each item's offset_days counts from it, and it becomes the default anchor when instantiating. Leave off for an evergreen/undated template."
},
"description": {
"type": "string",
"description": "Free-text description."
}
}
}Output Schema
{
"type": "object",
"properties": {
"link_url": {
"type": "string",
"description": "Opens the playbook in the Marcora web app."
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Persisted YYYY-MM-DD reference date, or null."
}
},
"description": "The created playbook object, including its persisted anchor_date (YYYY-MM-DD or null) and a link_url that opens it in the Marcora web app."
}create_playbook_from_plans
Create a playbook by capturing existing content plans as reusable template items ("save what worked as a template").
Input Schema
{
"type": "object",
"required": [
"plan_ids"
],
"properties": {
"name": {
"type": "string",
"description": "Playbook name (derived if omitted)."
},
"plan_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Plan UUIDs to capture as ordered template items."
},
"visibility": {
"type": "string",
"description": "\"team\" (default) or \"private\"."
},
"description": {
"type": "string",
"description": "Free-text description."
}
}
}Output Schema
{
"type": "object",
"properties": {
"link_url": {
"type": "string",
"description": "Opens the playbook in the Marcora web app."
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Persisted YYYY-MM-DD reference date, or null."
}
},
"description": "The created playbook object, including its anchor_date (null unless later set) and a link_url that opens it in the Marcora web app."
}update_playbook
Edit a content playbook. Pass only the fields to change; if items is provided it fully replaces the playbook's items and order.
Input Schema
{
"type": "object",
"required": [
"playbook_id"
],
"properties": {
"name": {
"type": "string",
"description": "New name."
},
"items": {
"type": "array",
"items": {
"type": "object"
},
"description": "If provided, REPLACES the full ordered item list."
},
"visibility": {
"type": "string",
"description": "\"team\" or \"private\" (creator-only)."
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Set the playbook's YYYY-MM-DD reference date. Omit to keep the current value; pass null to clear it."
},
"description": {
"type": "string",
"description": "New description."
},
"playbook_id": {
"type": "integer",
"description": "ID of the playbook to update."
}
}
}Output Schema
{
"type": "object",
"properties": {
"link_url": {
"type": "string",
"description": "Opens the playbook in the Marcora web app."
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Persisted YYYY-MM-DD reference date, or null."
}
},
"description": "The updated playbook object, including its anchor_date (YYYY-MM-DD or null) and link_url."
}instantiate_playbook
Run a playbook: create one content plan per playbook item, in order, as a batch.
Input Schema
{
"type": "object",
"required": [
"playbook_id"
],
"properties": {
"project_id": {
"type": "string",
"description": "Scope the created plans to this project UUID."
},
"anchor_date": {
"type": "string",
"description": "ISO date YYYY-MM-DD. Each item's offset_days is added to it to compute that plan's due date."
},
"assigned_to": {
"type": "integer",
"description": "Assign the created plans to this team member."
},
"category_id": {
"type": "integer",
"description": "Apply this content category to the created plans."
},
"playbook_id": {
"type": "integer",
"description": "ID of the playbook to instantiate."
}
}
}Output Schema
{
"type": "object",
"properties": {
"run": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string",
"description": "Auto-named \"<playbook> — <Mon YYYY>\" unless you passed a name."
},
"link_url": {
"type": "string",
"description": "https://app.marcora.ai/runs/{run_id}"
},
"anchor_date": {
"type": [
"string",
"null"
],
"description": "Persisted YYYY-MM-DD reference date, or null."
}
},
"description": "The created cycle."
},
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"link_url": {
"type": "string",
"description": "https://app.marcora.ai/plans/{plan_uuid}"
}
}
},
"description": "The created content plans (same shape as create_plan / get_plan), stage Accepted, source playbook."
},
"run_id": {
"type": "integer",
"description": "ID of the cycle (run) this created — the group the plans belong to."
},
"playbook_id": {
"type": "integer",
"description": "The instantiated playbook."
},
"created_count": {
"type": "integer",
"description": "Number of plans created (one per playbook item)."
}
},
"description": "An object describing the run."
}