헤드리스 CMS MCP 콘텐츠 파이프라인
사용 시기
- 모델 컨텍스트 프로토콜(MCP)을 통해 헤드리스 WordPress에서 블로그 게시물 및 페이지 관리, 작성, 게시.
- Next.js 헤드리스 프론트엔드에 대한 자율 AI 기사 생성 파이프라인 오케스트레이션.
- 외부 AI 에이전트를 Sayoti Suite MCP RPC(
/wp-json/sayoti-mcp/v1/rpc)에 연결. - 편집 표준, The Borderline Matrix, 임상 E-E-A-T 규칙, 브랜드 시각적 지침을 CMS와 AI 에이전트 간 동기화.
- 동적 헤드리스 탐색 메뉴, 온페이지 초점 키워드 감사, 특수 페이지 역할(리드 마그넷, 개인정보처리방침, 이용약관) 구성.
전제 조건 및 제로 시크릿 정책
⚠️ 엄격한 자격 증명 보호 (제로 시크릿 누출)
- API 키, 비밀번호, 또는 베어러 토큰을 절대
SKILL.md나 git 추적 파일에 하드코딩하지 마십시오. - 모든 자격 증명은
$HERMES_HOME/.env또는 프로필별.env파일의 환경 변수에서만 엄격하게 확인되어야 합니다. - 이 파이프라인에 필요한 자격 증명:
MCP_SAYOTI_CMS_KEY: WordPress MCP RPC 인증을 위한 마스터 시크릿 키 (headers: {'X-Sayoti-Key': '${MCP_SAYOTI_CMS_KEY}'}).HERMES_CUSTOM_9ROUTER_SAYOTI_MY_ID_API_KEY또는NINEROUTER_API_KEY: 9Router 멀티 모델 게이트웨이(image_generate및 임베딩)용 API 키.
- WordPress MCP 서버 구성 (
config.yaml의mcp_servers아래):mcp_servers: sayoti-cms: url: "http://wordpress-sentra/wp-json/sayoti-mcp/v1/rpc" headers: X-Sayoti-Key: "${MCP_SAYOTI_CMS_KEY}" enabled: true timeout: 180 - 벡터 데이터베이스 전제 조건:
- WordPress 관리자(
sayoti_mcp_settings)에서embedding_status를enabled로 설정하고 모델을local/nomic-embed-text로 설정하여rag_search및 자동 게시물 색인을 지원해야 합니다.
- WordPress 관리자(
아키텍처 원칙
-
순수 데이터 저장소로서의 WordPress (제로 타임아웃):
- WordPress는 REST/MCP 요청 중에 장기 실행 동기 AI 호출(LLM 생성, 확산 모델)을 절대 실행해서는 안 됩니다.
- AI 에이전트(Hermes)가 실행 엔진 역할을 합니다: 연구 수행, 카피 초안 작성, 9Router를 통한 시각 자료 생성, 미디어 삽입을 수행한 후 데이터를 CMS로 보냅니다.
- CMS 작업(
save_post,save_page)은 순수하게 빠른 데이터베이스 트랜잭션(< 1초)으로 실행되어야 하며 Next.js 온디맨드 ISR 재검증을 트리거해야 합니다.
-
업서트를 통한 엄격한 엔터티 분리:
- 블로그 게시물에는 항상 전용
save_post도구를, 정적/랜딩 페이지에는save_page를 사용하십시오. - 게시물과 페이지를 조건부 매개변수가 있는 단일 일반 도구로 결합하지 마십시오. 별도 스키마는 매개변수 누출과 LLM 환각을 제거합니다.
- 업서트 로직:
id또는 일치하는slug가 있으면 업데이트를 수행하고, 없으면 새 콘텐츠를 생성합니다.
- 블로그 게시물에는 항상 전용
-
특수 페이지 역할 및 리드 마그넷 분류:
- 페이지는 유입 경로에서 특정 상업적 또는 법적 역할을 수행합니다:
standard,lead_magnet,privacy_policy,terms_of_service, 또는disclaimer. - 리드 마그넷 페이지를 모호하게 남겨두지 마십시오. 항상
page_role: 'lead_magnet'으로 분류하고lead_magnet_type을 통해 정확한 자산 유형을 명시하십시오 (예:"Checklist Milestone Perkembangan 2–7 Tahun (PDF)"). - CMS는
/wp-json/sayoti/v1/site-settings를 통해 이를 노출하고 WordPress 관리자에 게시물 상태 배지([🎁 LEAD MAGNET: ...],[🔒 PRIVACY POLICY],[📜 TERMS OF SERVICE])를 등록하여 인간 편집자가 페이지 기능을 즉시 인식할 수 있도록 합니다.
- 페이지는 유입 경로에서 특정 상업적 또는 법적 역할을 수행합니다:
-
동적 헤드리스 탐색 메뉴:
- 메뉴는 프론트엔드에 절대 하드코딩되어서는 안 됩니다. WordPress는
/wp-json/sayoti/v1/menus?location=primary및footer를 통한 단일 진실 공급원입니다. - WP 관리자(
Appearance -> Menus)에서 메뉴를 업데이트하면 태그menu와 경로/를 사용하여 ISR 재검증 웹훅이 실행되어 재배포 없이 Next.js 헤더와 푸터를 즉시 업데이트합니다. - 첫 실행 시 항상 기본 탐색 메뉴를 자동 시드하여 WP 관리자 대시보드에 즉시 편집 가능한 깔끔한 메뉴를 제공합니다.
- 메뉴는 프론트엔드에 절대 하드코딩되어서는 안 됩니다. WordPress는
-
편집 및 시각적 규칙에 대한 단일 진실 공급원:
- 편집 규칙(
content.md), E-E-A-T 표준(sayoti-editorial.md), 브랜드 시각적 규칙(sayoti-visual-branding.md), 온페이지 SEO 키워드 규칙은 WordPress 데이터베이스 옵션에 상주합니다. - 에이전트는
get_editorial_guidelines를 통해 이러한 규칙을 동적으로 가져와 출력이 대시보드 내 생성과 100% 일치하도록 합니다.
- 편집 규칙(
-
분리된 2-플러그인 아키텍처 (범용 콘텐츠 vs 헤드리스 브리지):
- AI, 토픽 클러스터, MCP 서버를 헤드리스 리디렉션 로직에 절대 결합하지 마십시오. 모놀리식 플러그인은 클라이언트가 이미 활성 WordPress 테마(Astra, Elementor, Divi)를 가지고 있고 AI/SEO 엔진만 원하는 경우 문제를 일으킵니다.
- 두 개의 깔끔하고 독립적인 플러그인으로 분리하십시오:
sayoti-content-engine: 범용 및 테마에 구애받지 않음. MariaDB 11.8 벡터 RAG, 토픽 클러스터(허브 앤 스포크), 링크 탐색기, 끊어진 링크 자동 복구, 대시보드 내 AI 작성기, 리드 마그넷 CPT 및 CRM, MCP 서버(/wp-json/sayoti-mcp/v1/rpc)를 포함. 리디렉션이나 Next.js 종속성 없음. 모든 기존 WordPress 설치에서 작동.sayoti-headless-bridge: 헤드리스 Next.js 프론트엔드를 사용할 때만 설치. 301 템플릿 리디렉션(구성 가능한 토글 포함), REST/site-settings및/menus, ISR 재검증 웹훅, 페이지 컨트롤러(홈페이지 및 법적 역할), 동적 마케팅 추적 태그(GTM, Meta Pixel, TikTok, 광고) 및 로컬 SEO 스키마(Google 지도 및 비즈니스 주소)를 포함.
포괄적인 10단계 기사 생성 워크플로우
[사용자 토픽 프롬프트]
↓ 1. 작업 수집
[WordPress MCP: get_topic_cluster & get_editorial_guidelines]
↓ 2. 필러 분류 체계 및 편집 지침 가져오기
[에이전트 (Hermes): 초점 키워드 및 앵글]
↓ 3. 초점 키워드 및 특정 앵글 공식화
[WordPress MCP: rag_search]
↓ 4. 의미론적 카니발리제이션 확인(>80%) 및 내부 링크 후보 가져오기
[웹 연구: 범용 4계층 인용 계층 구조]
↓ 5. 사실 확인 및 주장 입증
[에이전시 에이전트: content-creator]
↓ 6. 전문 작가 페르소나 로드
[콘텐츠 작성: 네이티브 구텐베르크]
↓ 7. 900-1500단어 의미론적 HTML 초안 작성 (훅, H2, 허브 링크, FAQ, CTA, 면책 조항)
[9Router image_generate + MCP upload_media]
↓ 8. 적응형 워터마크로 시각 자산 사이드로드 (제로 타임아웃)
[WordPress MCP: save_post]
↓ 9. 즉시 데이터베이스 트랜잭션 + 자동 벡터 색인 + Next.js ISR
[WordPress MCP: audit_post_seo]
↓ 10. SEO 점수 감사 (목표 80-100%) 및 라이브 보고서 제공
[Vercel Next.js에서 라이브]
1단계: 토픽 및 컨텍스트 수집
사용자 또는 편집 일정에서 초기 콘텐츠 요청을 받습니다. 대상 청중의痛点 및 상업적 의도를 식별합니다.
2단계: 지침 및 분류 체계 검색
sayoti-cms 도구를 호출하여 구조적 경계를 설정합니다:
get_topic_cluster: 사용 가능한 카테고리 필러를 검사하고 의도된 카테고리에 대한 공식 기본 허브(게시물 ID, 제목, 슬러그)를 검색합니다.get_editorial_guidelines: 활성 편집 길이 제한(900–1,500단어), 필수 시작 구성, FAQ 아코디언 규칙, 액션 프레임워크, 공식 16진수 색상 팔레트를 가져옵니다.
3단계: 심층 초점 키워드 연구 및 앵글 공식화
- 검색 의도 및 키워드 연구: 연구 없이 무작위 구문을 선택하지 마십시오. 프로필에 정의된 대상 청중이 사용하는 현실적인 검색 행동과 쿼리(정보 질문, 문제 또는 웹 검색/키워드 패턴을 통한 조사 비교)를 적극적으로 연구하십시오.
- 기본 초점 키워드 선택: 연구 결과를 기반으로 명확한 롱테일 검색 의도를 가진 정확히 1개의 기본 초점 키워드를 설정하십시오 (예: 광범위하고 일반적인 헤드 용어 대신
"cara melatih anak speech delay 2 tahun mandiri"). - 날카롭고 독특한 앵글 정의: 선택한 키워드를 독특한 앵글(예: 특정 연령 전환, 현실적인 일상 가정 루틴, 24시간 이내에 적용 가능한 구체적인 단계)로 고정하십시오.
- 단일 URL 매핑: 이 초점 키워드가 단일 고유 URL에 엄격하게 전용되어 향후 키워드 경쟁을 방지하도록 보장합니다.
4단계: 의미론적 RAG 확인 및 카니발리제이션 확인
rag_search(query: "<focus_keyword> <angle>", limit: 5)를 실행합니다:
- 카니발리제이션 필터: 게시된 기사가 동일한 앵글에서 80% 이상의 의미론적 유사성을 보이면 즉시 앵글을 전환합니다 (예: 일반적인 증상에서 가정 루틴 또는 특정 이정표 전환으로 이동).
- 수평적 링킹 검색: 벡터 검색에서 반환된 관련 기존 기사를 기록하여 컨텍스트 내부 링크로 사용합니다.
5단계: 다계층 인용 연구 (범용 4계층 계층 구조)
범용 증거 계층 구조를 사용하여 모든 사실적 주장을 입증합니다:
- 계층 1 (1차 법정 및 과학 권위 - 금본위제): 공식 임상 협회(IDAI, Himpsi, PPHI, WHO, CDC, AAP), 정부 건강 지침, 동료 검토 저널. 연령 이정표 수치, 임상 정의, 의학적 주장에 필수.
- 계층 2 (평판 좋은 2차 및 산업 연구): 신뢰할 수 있는 뉴스 기관(Kompas, Antara, BBC) 및 거시적 추세에 대한 기관 백서.
- 계층 3 (관찰 및 현장 정서): 실제 청중/사용자 어려움, 실무자 현장 노트, 커뮤니티 토론. 공감을 불러일으키는 오프닝 훅을 만드는 데 사용. 항상 정서 또는 실용적 현장 관찰로 표시하고, 규범적 법정 또는 임상 사실로 표시하지 마십시오.
- 계층 4 (금지): 콘텐츠 팜, 출처 미기재 SEO 블로그, 기본 링크 없는 AI 재가공. 절대 인용하지 마십시오.
6단계: 전문가 페르소나 로드
agency_agents_load(agent="content-creator") (또는 적절한 에이전시 전문가)를 호출하고 활성 프로필의 SOUL.md에 의해 지정된 커뮤니케이션 톤을 적용합니다.
7단계: 전체 의미론적 HTML 초안 작성 (네이티브 구텐베르크)
네이티브 WordPress 구텐베르크 블록 주석(<!-- wp:paragraph -->, <!-- wp:heading -->, <!-- wp:separator -->, <!-- wp:list -->)을 사용하여 900–1,500단어의 의미론적 HTML을 작성합니다:
- 단일 H1: 페이지 템플릿에서 처리되며, 여는 단락으로 본문을 직접 시작합니다.
- 3단락 시작 구성:
- 단락 1 (훅): 청중의 어려움을 확인하는 실제 시나리오 (계층 3 인사이트에서 파생).
- 단락 2 (빠른 답변): 자연스럽고 차분한 직접 답변 (딱딱한 "빠른 답변:" 레이블 없음).
- 단락 3 (전환): 함께 해결책을 탐구하도록 따뜻하게 초대.
- H2당 설명: 각 제목 아래 3~5개의 포괄적인 단락, 실용적인 가정 자극 단계(≤24시간) 통합.
- 내부 링킹 통합:
- 수직 (필수): 처음 300-500단어 내에 기본 허브로의 자연스러운 컨텍스트 링크:
<a href="/posts/<hub-slug>" class="text-primary font-semibold underline hover:text-accent">...</a>. - 수평: 4단계에서 발견된 관련 스포크 기사에 대한 컨텍스트 링크.
- 수직 (필수): 처음 300-500단어 내에 기본 허브로의 자연스러운 컨텍스트 링크:
- 강조 상자 대비 규칙: 특별 참고 사항은
<div class="my-8 rounded-2xl border-2 border-primary/25 bg-card p-6 sm:p-8 shadow-sm">를 사용하고 제목은text-primary font-bold또는text-foreground font-bold를 사용해야 합니다. 밝은 카드에text-secondary를 절대 사용하지 마십시오. - 마무리 순서:
<h2>Kesimpulan & Langkah Pendampingan Terbaik</h2>: 3개의 액션 링크(/metode-belajar,/checklist-milestone,/kontak또는 직접 WhatsApp)로 마무리.<h2>Pertanyaan yang Sering Diajukan Orang Tua (FAQ)</h2>:<details class="faq-accordion mb-4 rounded-xl border border-border p-4 bg-card transition-all"><summary class="cursor-pointer font-semibold text-foreground flex items-center justify-between"><span>...</span><span class="text-primary font-bold ml-2">+</span></summary><div class="mt-3 text-sm text-foreground/80 leading-relaxed border-t border-border pt-3">...</div></details>형식으로 최소 5개 질문. 면책 조항 앞에 배치.- 필수 임상 면책 조항:
<div class="my-6 rounded-xl border border-border bg-muted/30 p-4 text-xs italic text-muted-foreground leading-relaxed">참고: 이 가이드의 정보는 가정에서의 자체 자극을 지원하기 위한 교육적 목적이며, 소아과 전문의 또는 전문 치료사의 직접 평가 및 의학적 조언을 대체하지 않습니다.</div> <h2>참고 문헌</h2>: 인라인 인용과 일치하는 클릭 가능한 전체https://URL이 포함된 확인된 출처의<ol>목록.
- 7가지 온페이지 SEO 기준: 초점 키워드가 제목, 퍼머링크 슬러그, 처음 100단어, 최소 하나의 H2/H3, 발췌문에 존재하고 밀도가 0.5%–2.0%로 유지되어야 합니다.
8단계: 시각 자료 생성 및 미디어 사이드로드 (제로 타임아웃)
- 공식 브랜드 16진수 색상 및 엄격한
anti_text_rule(캔버스에 텍스트/숫자/워터마크 없음)을 적용하여image_generate(9Router)를 통해 이미지를 생성합니다. - MCP 도구
upload_media를 통해 이미지를 업로드합니다:image_url또는image_base64를 전달합니다.- 특성 이미지의 경우
apply_watermark: true(PHP GD를 통해 브랜드 로고를 적응적으로 자동 스탬프)를 전달하고, H2 본문 일러스트레이션의 경우apply_watermark: false를 전달합니다. - 도구는 CMS 도메인(
https://cms...)에서 공식id(첨부 파일 ID) 및url을 반환하며, Next.js VercelremotePatterns와 100% 호환됩니다.
- 기사 내 이미지를
<figure class="wp-block-image size-large"><img src="..." alt="..." /><figcaption>...</figcaption></figure>블록에 직접 삽입합니다.
9단계: 즉시 게시 (save_post)
다음과 함께 save_post를 호출합니다:
title,slug,content,category_id,focus_keyword,excerpt.featured_media_id: 8단계의upload_media에서 반환된 첨부 파일id로 설정.generate_featured_image: false및generate_in_article_images: false(서버 측 동기 이미지 생성을 우회하여 즉시 DB 쓰기로 실행 <1초, 타임아웃 위험 완전 제거).- WordPress 자동:
- 게시물 저장 및 SEO 메타 필드 업데이트.
- Next.js 온디맨드 ISR 재검증 트리거.
- 기사 청크를 MariaDB 벡터 임베딩 테이블(
wp_sayoti_vectors)에 색인.
10단계: SEO 감사 및 최종 보고
audit_post_seo(post_id: <id>)를 호출하여 점수를 검색하고 최소 목표(80%)를 확인합니다.- 점수 < 80%인 경우: 보고된 문제(누락된 메타 설명, 밀도 오류 등)를 해결하고 점수가 목표 범위에 도달할 때까지 다시 감사합니다.
- 최종 보고서 제공: 대상 URL, 최종 SEO 점수, 카테고리, 초점 키워드, 로드된 이미지 수, 사용된 내부 링크, 최종 단어 수.
페이지 관리 워크플로우
리드 마그넷 페이지 생성 (save_page)
목적: PDF 체크리스트, 가이드, 템플릿과 같은 프리미엄 자산에 대한 전환 랜딩 페이지.
title: 가치 제안 포함 (예: "[무료] 체크리스트 발달 이정표 2-7세").slug: 키워드 관련.page_role:'lead_magnet'.lead_magnet_type: 정확한 다운로드 가능 자산 이름.content: 간결하고 혜택 중심. 많은 텍스트 블록 없음. 위험 최소화와 가치 극대화에 초점.excerpt: 짧은 가치 제안.
정적 법적 페이지 생성 (save_page)
목적: 개인정보처리방침, 이용약관, 면책 조항.
page_role: 각각'privacy_policy','terms_of_service','disclaimer'.content: 완전하고 법적으로 규정을 준수하는 텍스트. 헤드리스 프론트엔드는 이러한 페이지에 대해 특별히 엄격한 템플릿을 적용합니다 (예: 푸터 보안 배지, 포괄적인 머리말).
문제 해결 가이드
MCP 오류: 타임아웃
- WordPress
config.yaml에서timeout: 180(3분)을 확인하십시오. - WordPress가 데이터 저장소 역할만 하는지 확인하십시오:
generate_featured_image: true를 보내지 마십시오; 대신 이미지를 업로드한 후featured_media_id를 사용하십시오.
MCP 오류: 인증 실패
MCP_SAYOTI_CMS_KEY가.env파일에서 내보내졌는지 확인하십시오.- 9Router 호출 시
NINEROUTER_API_KEY의 철자가 올바른지 확인하십시오.
벡터 검색 오류
sayoti_mcp_settings페이지의 WordPress 관리자에서embedding_status가enabled로 설정되어 있는지 확인하십시오.- 필요한 모델(
local/nomic-embed-text)이 설치되어 있는지 확인하십시오.
이미지 생성 실패
- 힌트: "캔버스에 텍스트나 워터마크를 포함하지 마십시오."를 프롬프트에 추가하여
anti_text_rule을 적용합니다. image_generate가 공식 브랜드 16진수 색상과 일치하는지 확인합니다.
배포 체크리스트
-
sayoti-content-engine가 WordPress에 설치 및 활성화되었습니까? -
sayoti-headless-bridge가 WordPress에 설치 및 활성화되었습니까? -
MCP_SAYOTI_CMS_KEY가$HERMES_HOME/.env에 설정되었습니까? -
NINEROUTER_API_KEY가$HERMES_HOME/.env에 설정되었습니까? -
embedding_status가 WordPress 관리자에서enabled로 설정되었습니까? -
config.yaml의mcp_servers.sayoti-cms.timeout이 180으로 설정되었습니까? - 기본 탐색 메뉴가 시드되었습니까? (Appearance > Menus에서 확인)
- Next.js ISR 웹훅이 WordPress에서 구성되었습니까?
보안 참고 사항
제로 시크릿 누출 정책
- 자격 증명을 코드나 구성에 하드코딩하지 마십시오.
- 모든 민감한 값은 환경 변수를 통해 주입해야 합니다.
- 정기적으로
HERMES_HOME/.env권한을 감사하십시오 (읽기 전용600권장).
API 키 순환
MCP_SAYOTI_CMS_KEY를 정기적으로 교체하고 WordPresssayoti_mcp_settings페이지에서 업데이트하십시오.- 교체 후 모든 에이전트 인스턴스가 새 키로 업데이트되었는지 확인하십시오.