Aidelly Docs
MCP

Content Tools

Image editor, repurposing, ideas, and interview tools for content generation.

Content tools help you generate, refine, and repurpose social media posts.

Image Editor Outputs

List images created in the Aidelly image editor.

Tool: aidelly_list_image_editor_outputs

Input:

{
  "workspace_id": "ws_uuid",
  "limit": 10,
  "page": 1
}

Output:

{
  "data": {
    "outputs": [
      {
        "id": "editor_output_uuid",
        "name": "Spring Campaign Banner",
        "template_used": "linkedin_banner",
        "created_at": "2026-02-18T10:30:00Z",
        "image_url": "https://app.aidelly.ai/storage/editor-outputs/abc123.png",
        "dimensions": { "width": 1200, "height": 627 },
        "used_in_posts": 3
      }
    ],
    "pagination": { "page": 1, "limit": 10, "total": 42 }
  }
}

Use for:

  • Listing previously created images
  • Batch operations on edited images
  • Tracking image usage across posts

Repurpose Jobs

Create and track content repurposing jobs that adapt posts for different platforms.

Create Repurpose Job

Tool: aidelly_create_repurpose_job

Input:

{
  "workspace_id": "ws_uuid",
  "idempotency_key": "repurpose-001",
  "post_id": "post_uuid",
  "target_platforms": ["twitter", "facebook"],
  "include_images": true,
  "tone_override": "professional"
}

Output:

{
  "data": {
    "job_id": "repurpose_job_uuid",
    "status": "processing",
    "source_post_id": "post_uuid",
    "target_platforms": ["twitter", "facebook"],
    "created_at": "2026-02-18T10:30:00Z",
    "started_at": "2026-02-18T10:30:05Z",
    "estimated_completion": "2026-02-18T10:35:00Z"
  }
}

Poll Job Status

Tool: aidelly_get_repurpose_job

Input:

{
  "workspace_id": "ws_uuid",
  "job_id": "repurpose_job_uuid"
}

Output (Processing):

{
  "data": {
    "job_id": "repurpose_job_uuid",
    "status": "processing",
    "progress": 60,
    "started_at": "2026-02-18T10:30:05Z",
    "estimated_completion": "2026-02-18T10:35:00Z"
  }
}

Output (Complete):

{
  "data": {
    "job_id": "repurpose_job_uuid",
    "status": "complete",
    "outputs": [
      {
        "platform": "twitter",
        "content_text": "Check out our latest update...",
        "media_urls": ["https://..."],
        "estimated_engagement": 0.045
      },
      {
        "platform": "facebook",
        "content_text": "We're excited to share...",
        "media_urls": ["https://..."],
        "estimated_engagement": 0.032
      }
    ],
    "completed_at": "2026-02-18T10:32:00Z"
  }
}

List Repurpose Jobs

Tool: aidelly_list_repurpose_jobs

Input:

{
  "workspace_id": "ws_uuid",
  "status": "complete",
  "limit": 10,
  "page": 1
}

Output:

{
  "data": {
    "jobs": [
      {
        "job_id": "repurpose_job_uuid",
        "source_post_id": "post_uuid",
        "target_platforms": ["twitter", "facebook"],
        "status": "complete",
        "created_at": "2026-02-18T10:30:00Z",
        "completed_at": "2026-02-18T10:32:00Z",
        "output_count": 2
      }
    ],
    "pagination": { "page": 1, "limit": 10, "total": 125 }
  }
}

Repurpose Job Lifecycle:

create_repurpose_job
    ↓
[polling get_repurpose_job]
    ↓
status: processing (0-100%)
    ↓
status: complete → outputs available
    ↓
[use outputs in create_post]

Polling Strategy:

// Start job
job = create_repurpose_job(...)
job_id = job.data.job_id

// Poll until complete
while (true) {
  status = get_repurpose_job(job_id)
  if (status.data.status === "complete") {
    break
  }
  // Exponential backoff: 1s, 2s, 4s, 8s, 15s
  await sleep(exponential_backoff(attempt))
  attempt++
}

// Use outputs
for (output in status.data.outputs) {
  create_post({
    platform: output.platform,
    content_text: output.content_text,
    media_urls: output.media_urls
  })
}

Content Ideas

Generate post ideas based on brand context, recent trends, and audience.

Create Idea

Tool: aidelly_create_idea

Input:

{
  "workspace_id": "ws_uuid",
  "brand_id": "br_uuid",
  "idempotency_key": "idea-spring-2026",
  "topic": "Q1 product roadmap",
  "platforms": ["linkedin", "twitter"],
  "tone": "professional",
  "include_hashtags": true
}

Output:

{
  "data": {
    "idea_id": "idea_uuid",
    "topic": "Q1 product roadmap",
    "suggestions": [
      {
        "title": "Feature Highlight: New Analytics Dashboard",
        "description": "Showcase the improved analytics interface and key metrics",
        "platforms": ["linkedin", "twitter"],
        "estimated_engagement": 0.055,
        "suggested_hashtags": ["#productlaunch", "#analytics", "#SaaS"]
      },
      {
        "title": "Behind-the-Scenes: Building the Dashboard",
        "description": "Tell the engineering story behind the analytics improvements",
        "platforms": ["linkedin"],
        "estimated_engagement": 0.038
      }
    ],
    "created_at": "2026-02-18T10:30:00Z"
  }
}

List Ideas

Tool: aidelly_list_ideas

Input:

{
  "workspace_id": "ws_uuid",
  "brand_id": "br_uuid",
  "limit": 10,
  "page": 1
}

Output:

{
  "data": {
    "ideas": [
      {
        "idea_id": "idea_uuid",
        "topic": "Q1 product roadmap",
        "platforms": ["linkedin", "twitter"],
        "suggestion_count": 5,
        "created_at": "2026-02-18T10:30:00Z",
        "used_in_posts": 2
      }
    ],
    "pagination": { "page": 1, "limit": 10, "total": 47 }
  }
}

Brand Interview

Generate brand interview questions to build brand voice and messaging guidelines.

Tools:

  • MCP: aidelly_generate_brand_interview_questions
  • API: POST /api/public/v1/ideas/interview/questions

Input:

{
  "workspace_id": "ws_uuid",
  "brand_id": "br_uuid",
  "idempotency_key": "interview-brand-voice-001",
  "focus_areas": ["brand_voice", "values", "target_audience"],
  "question_count": 10
}

Output:

{
  "data": {
    "interview_id": "interview_uuid",
    "questions": [
      {
        "id": "q1",
        "question": "How would you describe your brand voice in 3-5 words?",
        "category": "brand_voice",
        "guidance": "Think about tone, personality, and how you communicate with customers"
      },
      {
        "id": "q2",
        "question": "Who is your primary target audience?",
        "category": "target_audience",
        "guidance": "Be specific: role, industry, pain points, demographics"
      },
      {
        "id": "q3",
        "question": "What are the top 3 values your brand embodies?",
        "category": "values",
        "guidance": "Consider what drives decisions and how you want to be perceived"
      }
    ],
    "created_at": "2026-02-18T10:30:00Z"
  }
}

Use for:

  • Onboarding new team members
  • Ensuring consistent brand messaging
  • Documenting brand guidelines
  • Training AI content generation

Attaching media

aidelly_create_post, aidelly_bulk_create_posts, and aidelly_create_scheduled_post all take content.media[]. Each item accepts url (or read_url) and/or media_id, plus an optional type — image, video, gif, or document.

Leave type off and it is resolved from the media-library row: application/pdf becomes document, video/* becomes video, image/gif becomes gif, everything else becomes image. An explicit type wins.

LinkedIn document posts

LinkedIn turns a PDF into a swipeable document post. Upload the file with aidelly_upload_media, then attach exactly one item as media[].type = "document":

{
  "platform": "linkedin",
  "content": {
    "text": "Our Q3 results, in ten slides.",
    "media": [{ "media_id": "3fdebe0a-...", "type": "document" }]
  }
}
  • One PDF per post, ≤ 100 MB, ≤ 300 pages.
  • Documents cannot be mixed with images or videos in the same post.
  • LinkedIn is the only platform that accepts type: "document" — anywhere else the call is rejected with a 422 naming the platform.
  • Format and size are checked when the post is created; the page count is checked when it publishes.

Example: Full Content Creation Flow

# Step 1: Generate ideas
ideas=$(aidelly_create_idea --workspace_id ws_abc --topic "New Feature Launch")

# Step 2: Select an idea and create base post
post=$(aidelly_create_post --workspace_id ws_abc \
  --platform linkedin \
  --content_text "Check out our new feature...")

# Step 3: Repurpose for other platforms
repurpose=$(aidelly_create_repurpose_job --workspace_id ws_abc \
  --post_id post_id \
  --target_platforms twitter,facebook)

# Step 4: Poll for completion
while true; do
  status=$(aidelly_get_repurpose_job --workspace_id ws_abc \
    --job_id repurpose.job_id)

  if [ "$status.status" = "complete" ]; then
    break
  fi
  sleep 2
done

# Step 5: Create repurposed posts
for output in status.outputs:
  aidelly_create_post --workspace_id ws_abc \
    --platform output.platform \
    --content_text output.content_text

See Also