Overview
Formats a single source text to fit the constraints of each of the three channels. It does not publish — it creates output per channel and delivers it to the user.
| Channel | Constraint | Output | Publishing path |
|---|---|---|---|
| Threads | 500 UTF-8 bytes | Polished text + byte count | Direct publish (threads_publish_text, etc.) |
| No character limit (personal account) | Conversational text | Copy-paste only (API publishing not possible) | |
| X (free) | 280 characters per tweet | 1/ ·2/ Numbered tweet list |
Copy-paste only |
| X (premium) | 25,000자 | Single string | Copy-paste only |
Why Facebook and X are copy-paste: Publishing to personal Facebook accounts via API is not allowed by policy. On X too, with the free tier, it is usual to post a tweet chain manually, and this plugin directly handles only the Threads API. Therefore, the Facebook and X outputs are copied and pasted by the user — this skill only prepares the text for you.
Trigger keywords
multi-channel, Facebook, X, Twitter, X, Facebook, copy-paste, thread splitting, 280 characters, premium, premium, free, per channel, format
Workflow
Step 1: Check source text + X tier
Check the source text (draft) and the user's X tier:
- Source:
threads-post-drafta draft written with, or text the user provided directly. - X tier: if free,
"free"(default), if paid (X Premium),"premium". If unknown, default"free"로.
If tier is ambiguous, ask the user only, "Is X free or premium?" Free=split at 280 characters, premium=single up to 25,000 characters.
Step 2: Call MCP tool — multi-channel format
threads_format_multi_channel(
text="<원본 텍스트>",
x_tier="free", # "free" (기본) 또는 "premium"
channels=None, # 기본 ["threads","facebook","x"]. 특정 채널만 원하면 리스트로.
)
Return structure:
{
"channels": ["threads", "facebook", "x"],
"x_tier": "free",
"note": "Threads 출력은 threads_publish_text 로 직접 발행하세요. Facebook·X 출력은 *복붙용*...",
"threads": {"text": "<≤500바이트 텍스트>", "bytes": 412, "max_bytes": 500},
"facebook": "<복붙용 텍스트 문자열>",
"x": ["1/ ...", "2/ ...", "3/ ..."], # free → 리스트 / premium → 문자열
}
threadsoutput can be passed directly tothreads_publish_text(orthreads_publish_image/threads_publish_video).facebook/xoutput is for the user to copy and paste and view — this tool does not publish.- X 가
free면out["x"]is a list (each tweet ≤280 characters, numbered).premiumIf so, a string (≤25,000 characters).
Step 3: Show the per-channel output to the user (copy-paste blocks)
Separate the results by channel into fenced code blocks and show them. Add a one-line guide above each block:
## Threads (직접 발행 가능)
<412 / 500 바이트>
\```
<threads.text>
\```
→ 승인하시면 `threads_publish_text(media_type="TEXT", text="<위 텍스트>")` 로 즉시 발행할 수 있습니다.
## Facebook (복붙해서 올리세요)
\```
<facebook 문자열>
\```
→ Facebook 개인 계정은 API 발행이 안 됩니다 — 위 텍스트를 복사해 직접 올려주세요.
## X (무료 tier — 트윗 체인, 복붙해서 올리세요)
3개 트윗:
\```
1/ <첫 트윗>
2/ <둘째 트윗>
3/ <셋째 트윗>
\```
→ 각 트윗을 순서대로 복붙해 스레드로 올려주세요 (280자 제한 자동 분할됨).
- Take out only Threads and explain, "If you approve, I can publish it for you."
- Facebook·X explicitly states "copy and paste to post" — making it clear that this skill does not publish.
Step 4 (optional): Publish to Threads immediately
If the user also wants to publish to Threads, threads-post-draft the skill's steps 2–4 (⟨Korean review 3 stages⟩ → AskUserQuestion approval → publish) are used as-is.
- [HARD] Format only and do not publish immediately. Here,
threads_publish_textcalling directly willthreads-post-draftbypass the review/approval gate established by . Since posts going out to the same account in the same way would have only one path reviewed, publishing must always be handed off tothreads-post-draft. - What is passed when handing off is
out["threads"]["text"]as a single block. Because the review edits sentences, the byte count isthreads-post-draftrecounted after review by — the value counted here is a reference value at formatting time. - If the review verdict is
hold_and_report, it is not published. The reason is returned to the user as-is.
If the user asks to "post" to Facebook·X as well all at once, decline — this skill does not publish to Facebook/X. It ends with providing a copy-paste block.
About copy-paste output (Facebook·X): Although this skill does not publish, the user pastes this text as-is into a public account. If spelling errors or AI traces remain, the result is no different from publishing to Threads. Even before handing over the copy-paste block, running ⟨Korean review 3 stages⟩ (장르: 카피) is recommended— if the user explicitly requests omission, omit it, but note the fact of omission in the result.
Output format example
## 멀티 채널 포맷 완료
**원본**: <첫 30자>...
**X tier**: free (280자 분할)
---
### Threads (직접 발행 가능)
412 / 500 바이트
\```
오늘 점심에 먹은 김치찌개가 진짜 맛있었습니다. ...
\```
→ 발행을 원하시면 `threads-post-draft` 로 넘겨 감사 3단 + 승인을 거쳐 발행합니다.
---
### Facebook — 복붙해서 올리세요
\```
오늘 점심에 먹은 김치찌개가 진짜 맛있었습니다. ...
\```
(Facebook 개인 계정은 API 발행 불가 — 직접 올려주세요.)
---
### X (free, 3 트윗) — 복붙해서 올리세요
\```
1/ 오늘 점심에 먹은 김치찌개가 진짜 맛있었습니다. ...
2/ ...
3/ ...
\```
(각 트윗을 순서대로 올려 스레드를 만드세요.)
Precautions
| Situation | Response |
|---|---|
| User says "post to Facebook/X" | Decline — this skill only formats. It ends with providing a copy-paste block. |
| When X tier is unknown | Ask only "Are you free or premium?" (default free) |
Invalid x_tier ("bogus") |
The tool returns an error dict — guide that only free / premium are allowed error dict returned — free/premium guide that only is allowed |
| Threads exceeds 500 bytes | The tool automatically trims at word boundaries + ellipsis — guide: "If a meaning-preserving summary is needed, please shorten the original first" |
| When only a specific channel is wanted | channels=["x"] Specify like (the rest omitted) |
| When the original is very short | X free is also 1 tweet, Threads is also as-is — normal |
References
This skill is self-contained with only this document and no reference files. Channel constraint values (500 bytes/280 chars/25000 chars) are threads_format_multi_channel the tool (mcp-servers/moai-mcp-threads-poster/src/moai_mcp_threads_poster/server.py) hardcoded baseline.
Related skills
| Skill | When to use |
|---|---|
threads-post-draft |
Write original draft · Publish directly to Threads (apply saved style) |
threads-style-learn |
Style profile analysis·save |
When not to use this skill
- Threads draft writing·publishing:
threads-post-draftskill - Facebook/X 에 auto-publish — not possible. This skill only creates text for copy-pasting.
Publishing path summary
- Threads: this skin format →
threads-post-draft(3-step review → approval → publish). This skill does not publish directly. - Facebook: this skin format → user copies and pastes directly (API publishing not possible).
- X: this skin format (free split/premium single) → user copies and pastes directly.