content-design-requests
Content Design Requests
Automate the creation of design request tasks in Asana for upcoming content. This skill bridges two projects: the MKTG Content Calendar (where content lives) and the Marketing Design Requests project (where the design team picks up work).
Supported content types:
- Short Post — blog posts (
[Blog]prefix) and LinkedIn articles ([LinkedIn Article]prefix) - Video — YouTube thumbnails (
[Video]prefix)
The flow is always: ask scope → search → present → confirm → create → comment back. Never create a design request without explicit user approval.
Step 0: Pre-flight — Verify Asana Access
Call get_me from the Asana MCP to verify the connector is working and to retrieve the
current user's name and email. Store both — they go into the design request description.
If the call fails or the tool is not found, STOP. Tell the user:
"This skill needs the Asana connector, but it's not responding. Check that Asana is connected in Settings → Connectors, then start a new session and try again."
Once Asana is confirmed, read CONFIG.md from the plugin root to load all project GIDs,
section GIDs, custom field GIDs, and the design request form URL. Do not hardcode any IDs.
Step 1: Ask Scope
Before searching, ask the user two things:
- Assignee scope: "Do you want me to look for content assigned to you, or check the whole board?"
- Date range: The user may specify a range (e.g., "next two weeks", "through end of April"). If they don't, default to today through 30 days out.
The user may answer both in one message. If they only answer one, use the default for the other. Don't ask twice.
Step 2: Search the Content Calendar
Use search_tasks to find content that needs design work.
2a. Build the search
projects_any: Content Calendar project GID from CONFIG.mdassignee_any:"me"if user chose their own tasks; omit if whole boardcompleted:falsedue_on_after: start of date range (today by default)due_on_before: end of date rangeopt_fields:"name,due_on,notes,permalink_url,custom_fields"
2b. Filter by Content Type
From the results, keep only tasks where the Content Type custom field (GID from CONFIG.md) is set to one of:
- Short Post — then check the task name prefix to determine the subtype:
- Starts with
[Blog]→ blog post - Starts with
[LinkedIn Article]→ LinkedIn article - Neither prefix → flag to the user and ask what it is
- Starts with
- Video → video (YouTube thumbnail)
Discard all other content types (Anchor Essay, Visual Explainer, Social Post, Landing Page, Case Study, Other). Also discard subtasks — only process top-level tasks.
2c. Parse draft links
For each task, check the notes field for a draft link. Look for a line containing
draft link: (case-insensitive) and grab the URL that follows. If no draft link is
found, mark the task as "needs draft link".
2d. Filter out tasks that already have design requests
For each remaining task, call get_task with include_comments: true and scan the
returned comments for a linked reference to a task in the Marketing Design Requests
project. Specifically, look for comments containing <a data-asana-gid= or the text
"request submitted" (case-insensitive). Set comment_limit to 20 to catch older
comments without over-fetching.
If found, this task already has a design request — skip it unless the user explicitly asks to recreate it.
Step 3: Present the List and Get Approval
Show a clean list of content that needs design requests. For each item, show:
- Task name (with the prefix stripped for readability, but note the content type)
- Content type (Blog / LinkedIn Article / Video)
- Due date from the Content Calendar
- Draft link status: the URL or "No draft link — will ask before creating"
- Design request due date: calculated as described in the creation step
Example:
I found 3 content items that need design requests:
1. Why Adding More Indexes Eventually Makes Things Worse
Type: Blog → Design request due: Mar 10 (blog due Mar 11)
Draft: https://docs.google.com/document/d/1j8B...
2. How We Cut Query Latency 10x With Continuous Aggregates
Type: LinkedIn Article → Design request due: Apr 6 (article due Apr 7)
Draft: No draft link found — I'll ask before creating
3. What's New in Tiger Cloud
Type: Video → Design request due: Apr 7 (video due Apr 8)
Draft: N/A (video — no draft link needed)
Want me to create design requests for all of these, or just specific ones?
Wait for the user to confirm which tasks to process.
Step 4: Handle Missing Draft Links
For any confirmed blog post or LinkedIn article that has no draft link, ask the user:
"How We Cut Query Latency 10x With Continuous Aggregates" doesn't have a draft link in
its Asana card. Can you paste the Google Doc link? (Or say "skip" to create the request
without one.)
If the user provides a link, use it in the design request description. If they say "skip", create the request without a draft link but note in the description that no draft was available at time of submission.
For videos, do not ask for a draft link — video thumbnails don't need one.
Step 5: Create Design Request Tasks
For each approved content item, create a task in the Marketing Design Requests project.
5a. Determine the design request title
Based on content type:
- Blog:
Blog Thumbnail - [Title without prefix] - LinkedIn Article:
LinkedIn Article Thumbnail - [Title without prefix] - Video:
YouTube Thumbnail - [Title without prefix]
Strip the [Blog], [LinkedIn Article], or [Video] prefix from the original task name.
5b. Determine the due date
- Default: 3 business days before the content's due date
- If the content is due within 3 business days, set the design request due date to today and flag it to the user as a rush request
- If the content is due today or is overdue, flag this clearly and let the user decide on a due date
5c. Determine the Type custom field value
From CONFIG.md:
- Blog →
Blogenum option GID - LinkedIn Article →
Blogenum option GID (same bucket, but the title and description make the format clear to the designer) - Video →
Youtubeenum option GID
5d. Create the task
Use create_task with:
name: the design request title from 5aproject_id: Design Requests project GID from CONFIG.mdsection_id: Requests section GID from CONFIG.mddue_on: the calculated due date (YYYY-MM-DD)custom_fields: set the Type field using the GID from CONFIG.mdhtml_notes: use the description template below
5e. Description template
Use html_notes to create the formatted description. Adapt the "Request type" and
"Project description" sections based on content type.
For blog posts:
<body>
<strong>Request title:</strong>
Blog Thumbnail - [Title]
<strong>Name:</strong>
[Current user's name from get_me]
<strong>Email address:</strong>
<a href="mailto:[user email]">[user email]</a>
<strong>Due date:</strong>
[Due date in "Mon DD, YYYY" format, e.g., "Mar 10, 2026"]
<strong>Level of urgency:</strong>
Medium (4-10 day turnaround)
<strong>Request type:</strong>
Blog thumbnail and/or diagram(s)
<strong>Project description and specs:</strong>
Please create a blog thumbnail image for this upcoming post. We need the image in both:
• Blog thumbnail size (standard)
• LinkedIn sharing size
Draft copy: <a href="[DRAFT_URL]">[DRAFT_URL]</a>
———————————————
This task was submitted through <strong>Marketing Design Requests</strong>
<a href="[FORM_URL]">[FORM_URL]</a>
</body>
For LinkedIn articles:
<body>
<strong>Request title:</strong>
LinkedIn Article Thumbnail - [Title]
<strong>Name:</strong>
[Current user's name from get_me]
<strong>Email address:</strong>
<a href="mailto:[user email]">[user email]</a>
<strong>Due date:</strong>
[Due date in "Mon DD, YYYY" format]
<strong>Level of urgency:</strong>
Medium (4-10 day turnaround)
<strong>Request type:</strong>
LinkedIn article header image
<strong>Project description and specs:</strong>
Please create a header image for this upcoming LinkedIn article. We need the image in:
• LinkedIn article header size (1920 x 1080 or 1280 x 720)
Draft copy: <a href="[DRAFT_URL]">[DRAFT_URL]</a>
———————————————
This task was submitted through <strong>Marketing Design Requests</strong>
<a href="[FORM_URL]">[FORM_URL]</a>
</body>
For videos:
<body>
<strong>Request title:</strong>
YouTube Thumbnail - [Title]
<strong>Name:</strong>
[Current user's name from get_me]
<strong>Email address:</strong>
<a href="mailto:[user email]">[user email]</a>
<strong>Due date:</strong>
[Due date in "Mon DD, YYYY" format]
<strong>Level of urgency:</strong>
Medium (4-10 day turnaround)
<strong>Request type:</strong>
YouTube video thumbnail
<strong>Project description and specs:</strong>
Please create a YouTube thumbnail for this upcoming video. We need:
• YouTube thumbnail (1280 x 720)
———————————————
This task was submitted through <strong>Marketing Design Requests</strong>
<a href="[FORM_URL]">[FORM_URL]</a>
</body>
If no draft link is available (blog/LinkedIn article only), replace the draft line with:
Draft copy not yet available — will follow up when ready.
If the due date makes this a rush request, change urgency to:
High (less than 4 day turnaround) — Rush request, content publishes soon
5f. Comment on the original task
After successfully creating a design request, comment on the original content task in the
Content Calendar using add_comment:
task_id: the original content task GIDhtml_text:<body>Design request submitted — <a data-asana-gid="[NEW_TASK_GID]"/></body>
This creates a linked comment so anyone on the content card can jump to the design request.
Step 6: Summary
After all design requests are created, present a summary:
Done! Created 3 design requests:
1. Blog Thumbnail - Why Adding More Indexes Eventually Makes Things Worse
→ Due Mar 10 | Link: [Asana permalink]
2. LinkedIn Article Thumbnail - How We Cut Query Latency 10x
→ Due Apr 6 | Link: [Asana permalink]
3. YouTube Thumbnail - What's New in Tiger Cloud
→ Due Apr 7 | Link: [Asana permalink]
Comments added to all original cards in the Content Calendar.
Edge Cases
No matching content found: If the search returns no tasks with eligible Content Type values in the date range, say so and ask if the user wants to widen the range, switch assignee scope, or check a different content type.
Short Post with no recognized prefix:
If a task has Content Type "Short Post" but its name doesn't start with [Blog] or
[LinkedIn Article], flag it to the user: "This Short Post doesn't have a [Blog] or
[LinkedIn Article] prefix — what type of design request should I create for it?"
Content due very soon (rush request): If content is due within 3 business days, flag it as a rush and set urgency to High in the description. Still create the request but make the tight timeline visible.
Content due today or overdue: Flag this clearly and ask the user what due date to use for the design request. Don't guess.
All tasks already have design requests: If every content item in the range already has a design request comment, tell the user and ask if they want to recreate any.
Asana rate limits or errors: If task creation fails, report which ones succeeded and which failed. Don't silently drop failures. Offer to retry the failed ones.
User wants to customize the description: If the user asks to change any part of the description template (urgency level, request type, additional specs), accommodate it for that run. Don't permanently change the template.
Dependencies
- Required: Asana MCP connector. The user must have access to both the MKTG Content Calendar FY27 project and the Marketing Design Requests project in Asana.