@roottale/cms-mcp 0.70.0 → 0.70.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/index.js +1 -1
- package/docs/content-models-and-exposures.md +19 -0
- package/docs/custom-redirects.md +8 -1
- package/docs/seo.md +4 -0
- package/examples/nextjs/cms/site-link-rules.example.json +12 -0
- package/examples/nextjs/lib/route-metadata.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1855,7 +1855,7 @@ function registerTools(server) {
|
|
|
1855
1855
|
}
|
|
1856
1856
|
|
|
1857
1857
|
// src/server.ts
|
|
1858
|
-
var VERSION = true ? "0.70.
|
|
1858
|
+
var VERSION = true ? "0.70.1" : "dev";
|
|
1859
1859
|
var SERVER_INSTRUCTIONS = `
|
|
1860
1860
|
roottale-cms-mcp\uB294 RootTale CMS\uB97C \uC678\uBD80 \uC0AC\uC774\uD2B8(\uC8FC\uB85C Next.js)\uC5D0 \uC5F0\uB3D9\uD558\uACE0
|
|
1861
1861
|
\uAE00\xB7\uC378\uB124\uC77C\xB7\uBCF8\uBB38 \uC774\uBBF8\uC9C0\uB97C \uC790\uB3D9\uD654\uD558\uAE30 \uC704\uD55C \uBB38\uC11C\xB7\uC608\uC2DC \uCF54\uB4DC\xB7API tool\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4.
|
|
@@ -517,3 +517,22 @@ export default async function Layout({ children }: { children: React.ReactNode }
|
|
|
517
517
|
- `GET /v1/cms/public/posts?model_key=team-member`
|
|
518
518
|
- `GET /v1/cms/public/categories?collection_key=faq` (`id`, `parent_id` 포함)
|
|
519
519
|
- `GET /v1/cms/public/exposures?slot_key=global-popup&path=%2Fabout`
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
## FRONT 전용 상세 주소로 사이트 열기
|
|
523
|
+
|
|
524
|
+
한 모델의 일부 형식만 별도 상세 화면을 쓰면 사이트 콘텐츠 계약의 해당 `models` 항목에 `siteLinkRules`를 선언합니다. 예를 들어 `blog`의 `content_format=media`는 다음처럼 연결합니다.
|
|
525
|
+
|
|
526
|
+
```json
|
|
527
|
+
{
|
|
528
|
+
"modelKey": "blog",
|
|
529
|
+
"preset": "article",
|
|
530
|
+
"siteLinkRules": [
|
|
531
|
+
{ "field": "content_format", "equals": "media", "detailPath": "/news/media/:slug" }
|
|
532
|
+
]
|
|
533
|
+
}
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
ROOT-ADMIN 글 목록·편집 화면의 공개/검수 사이트 열기가 저장된 `metaJson.acf` 값과 규칙을 대조합니다. 해당 형식만 선언한 내부 상세 주소로 열며, 다른 형식은 기존 주소를 유지합니다. 규칙이 충돌하거나 저장 주소가 없는 글에는 링크를 만들지 않습니다. 예시는 `examples/nextjs/cms/site-link-rules.example.json`에 있습니다.
|
|
537
|
+
|
|
538
|
+
이 선언은 글의 저장 주소·공개 API·주소 이력·리다이렉트를 바꾸지 않습니다. FRONT는 저장 주소를 검증하고 실제 상세·canonical·목록을 같은 전용 경로로 구현해야 합니다. 해당 FRONT 배포를 확인한 뒤 계약을 등록하세요. 관리자 링크를 고치기 위해 폐기한 개발 주소를 다시 열지 않습니다.
|
package/docs/custom-redirects.md
CHANGED
|
@@ -38,6 +38,13 @@ description: 어드민 "설정 > 주소 이동"에서 정의한 임의 경로
|
|
|
38
38
|
기존 캐시가 있으면 오래된 규칙을 우선 사용하고(stale-first), 캐시가
|
|
39
39
|
없으면 트래픽을 막지 않고 통과시킵니다(fail-soft).
|
|
40
40
|
|
|
41
|
+
Proxy는 모든 페이지 요청 앞에서 실행되므로 API 장애가 사이트 전체를 멈추지
|
|
42
|
+
않도록 다음과 같이 동작합니다.
|
|
43
|
+
|
|
44
|
+
- 규칙 조회는 최대 `timeoutMs`(기본 1.5초)만 기다립니다.
|
|
45
|
+
- 캐시가 만료돼도 기존 규칙이 있으면 기다리지 않고 쓰고, 갱신은 뒤에서 한 번만 합니다.
|
|
46
|
+
- 조회가 실패하면 30초 동안 다시 조회하지 않고, 그동안 기존 규칙(없으면 통과)을 씁니다.
|
|
47
|
+
|
|
41
48
|
```ts
|
|
42
49
|
// proxy.ts
|
|
43
50
|
import { NextResponse } from "next/server";
|
|
@@ -45,7 +52,7 @@ import { createRedirectMiddleware } from "@roottale/cms-renderer-next/routes";
|
|
|
45
52
|
|
|
46
53
|
const redirects = createRedirectMiddleware({
|
|
47
54
|
apiKey: process.env.ROOTTALE_API_KEY!,
|
|
48
|
-
// apiBase, siteId, cacheTtlMs 는 선택.
|
|
55
|
+
// apiBase, siteId, cacheTtlMs, timeoutMs 는 선택.
|
|
49
56
|
});
|
|
50
57
|
|
|
51
58
|
export async function proxy(req: Request) {
|
package/docs/seo.md
CHANGED
|
@@ -103,6 +103,10 @@ SDK 0.69.0의 `ContentPolicy`·`ContentQuery`는 `@roottale/cms-core`에서 제
|
|
|
103
103
|
`visibility`를 통과한 글만 화면에 표시하고, `indexing`까지 통과한 글만 검색에
|
|
104
104
|
허용합니다. 결과의 `visible`과 `indexable`은 별개이며 `robots`를 메타데이터
|
|
105
105
|
빌더에 전달해야 직접 설정한 `noindex: false`가 강제 제한을 풀지 못합니다.
|
|
106
|
+
관리자·공개 메타데이터 응답의 `robots.noindexReasons`는 같은 공통 스키마로
|
|
107
|
+
검증한 차단 사유 코드입니다. `robots` 전체를 보존해 전달하고, 사유 코드로
|
|
108
|
+
강제 제한을 해제하지 마세요. `version`은 정책 의존 값이 포함될 수 있는
|
|
109
|
+
불투명 문자열이므로 그대로 전달하며 숫자로 변환하거나 증가시키지 않습니다.
|
|
106
110
|
|
|
107
111
|
```ts
|
|
108
112
|
import type { ContentPolicy, ContentQuery } from "@roottale/cms-core";
|
|
@@ -20,6 +20,7 @@ export async function routeMetadata(
|
|
|
20
20
|
return buildPageMetadata({
|
|
21
21
|
...route,
|
|
22
22
|
fallback: options.fallback,
|
|
23
|
+
// noindexReasons를 포함한 공통 정책을 보존하며 직접 false로 강제 차단을 풀지 않는다.
|
|
23
24
|
robots: { ...route?.robots, forceNoindex: options.forceNoindex || route?.robots?.forceNoindex },
|
|
24
25
|
}, {
|
|
25
26
|
canonical: options.canonical,
|
package/package.json
CHANGED