Ghost Publisher MCP
Ghost Publisher MCP
AI와 함께 작성하세요. Ghost에 안전하게 게시하세요.
Ghost 게시물과 Pages를 만들고 관리하고, 게시 준비 상태를 진단하고, 게시물을 예약하고, 이미지를 업로드하고, 승인된 배치를 게시하고, 정적 사이트 재빌드를 트리거하고, 렌더링된 콘텐츠를 검증하기 위한 비공식 로컬 우선 MCP 서버입니다.
Ghost Publisher는 전체 Ghost Admin API를 미러링하는 대신 제한된 편집 표면을 노출합니다. 삭제, 멤버, 뉴스레터 발송, 테마, 임의 쿼리, 원격 HTTP, OAuth 또는 내장 AI 청구 표면이 없습니다.
이 프로젝트는 Ghost Foundation과 제휴하거나 보증하지 않습니다.
현재 npm 및 공식 MCP 레지스트리 릴리스:
0.10.0, 2026-08-16 게시.
2026-08-16에 ChatGPT 데스크톱 26.810.41047 및 번들된 Codex CLI 0.148.0-alpha.9로 설정 검색과 편집된 드라이 런이 통과했고, 읽기 전용 연결 확인이 Ghost 6.42에 도달했습니다. Cursor 및 Claude Desktop 구성 생성은 자동화되어 있지만, 현재 애플리케이션 런타임은 검증 호스트에서 사용할 수 없었습니다. 편집된 보고서는 클라이언트 호환성 이슈 양식을 사용해 주시고 Admin 키는 절대 포함하지 마세요.
요구 사항
Node.js 22 이상
Ghost 커스텀 통합 Admin API 키
선택 사항: 헤드리스/정적 사이트용 배포 훅 및 공개 게시물/페이지 URL 템플릿
Ghost Admin → 설정 → 통합에서 커스텀 통합을 만들고 Admin API 키를 복사하세요.
Related MCP server: Ghost CMS MCP
원커맨드 설정

개인 터미널에서 다음을 실행하세요:
npx -y ghost-publisher-mcp@latest setup --url https://your-ghost.example.com설치 프로그램은 Ghost Admin API 키를 에코 없이 한 번 입력받고, Codex, Cursor, Claude Desktop을 감지하고, 콘텐츠를 작성하지 않고 Ghost 연결을 검증하고, 편집된 계획을 표시하고, 클라이언트 구성을 변경하기 전에 확인을 요청합니다. macOS에서는 시스템 또는 사용자 Applications 폴더에서 앱을 감지합니다. Codex가 PATH에 없으면 Codex 또는 ChatGPT 데스크톱 앱에 번들된 CLI를 자동으로 사용합니다. 생성된 항목은 설정을 실행한 정확한 패키지 버전을 고정하여 예기치 않은 업그레이드를 방지합니다.
CI 또는 자동화의 경우 명령에 입력하거나 인수로 전달하는 대신 플랫폼의 시크릿 매니저를 통해 환경 변수에 키를 주입하세요:
npx -y ghost-publisher-mcp@0.10.0 setup \
--url https://your-ghost.example.com \
--client codex \
--key-env GHOST_SETUP_KEY \
--yes
unset GHOST_SETUP_KEY--permission read-only|draft-editor|scheduler|publisher를 사용하여 기능 프로필을 적용하세요. --read-only는 --permission read-only의 별칭으로 유지됩니다. 두 옵션은 함께 사용할 수 없습니다. --dry-run을 사용하여 완전히 편집된 계획을 미리 볼 수 있습니다. --replace가 제공되지 않는 한 기존 항목은 보존됩니다. Admin 키는 선택된 각 클라이언트의 로컬 사용자 구성에 저장되며, 설정은 심볼릭 링크된 구성을 거부합니다.
Ghost Publisher는 로컬에서 실행되므로 Ghost Admin 키가 다른 호스팅 서비스에 위탁되지 않습니다. OpenSEO 스타일의 호스팅 연결은 별도로 위협 모델링된 자격 증명 서비스가 필요하며 향후 로드맵에 남아 있습니다.
선택적 배포, 업로드, 라이브 확인 및 읽기 전용 설정의 경우 동등한 전체 Codex 구성은 다음과 같습니다:
[mcp_servers.ghost-publisher]
command = "npx"
args = ["-y", "ghost-publisher-mcp@0.10.0"]
env = { GHOST_URL = "https://your-ghost.example.com", GHOST_ADMIN_API_KEY = "your_id:your_secret", GHOST_PERMISSION_PROFILE = "publisher", GHOST_UPLOAD_ROOTS = "/absolute/path/to/blog-assets", GHOST_DEPLOY_HOOK_URL = "https://your-host.example.com/deploy-hook", GHOST_PUBLIC_POST_URL_TEMPLATE = "https://your-site.example.com/posts/{slug}", GHOST_PUBLIC_PAGE_URL_TEMPLATE = "https://your-site.example.com/{slug}" }이 사용자 수준 파일을 비공개로 유지하고 커밋하지 마세요. 설정은 사용자 수준 클라이언트 위치만 사용합니다. 고급 설정은 수동으로 유지됩니다.
Claude Desktop, Cursor 및 기타 MCP 클라이언트
클라이언트의 MCP JSON 구성에 stdio 서버를 추가하세요:
{
"mcpServers": {
"ghost-publisher": {
"command": "npx",
"args": ["-y", "ghost-publisher-mcp@0.10.0"],
"env": {
"GHOST_URL": "https://your-ghost.example.com",
"GHOST_ADMIN_API_KEY": "your_id:your_secret",
"GHOST_PERMISSION_PROFILE": "publisher",
"GHOST_UPLOAD_ROOTS": "/absolute/path/to/blog-assets",
"GHOST_PUBLIC_PAGE_URL_TEMPLATE": "https://your-site.example.com/{slug}"
}
}
}
}MCP 구성을 변경한 후 클라이언트를 다시 시작하세요.
직접 비교
Ghost Publisher는 좁고 승인 게이트가 있는 옵션입니다. 아래 대안들은 의도적으로 더 넓은 Ghost 관리 또는 더 풍부한 작성 표면을 노출합니다. 필요할 때 그 폭을 선택하세요. 이 비교는 2026-08-16 기준 각 프로젝트의 공개 README를 반영합니다.
프로젝트 | 기본 경계 | 콘텐츠 입력 | 쓰기 제어 | 의도적으로 더 넓은 표면 |
Ghost Publisher MCP | 게시물, Pages, 이미지, 일정, 제한된 감사, 배포/라이브 확인 | Markdown 또는 제한된 네이티브 Ghost 블록 (v0.9 작성 미리보기 포함) | 초안 우선 생성, 권한 프로필, 개정 확인, 서명된 미리보기/적용, 명시적 확인, 자동 쓰기 재시도 없음 | 없음: 삭제, 멤버, 뉴스레터, 테마, 임의 API 호출 및 원격 전송은 비목표 |
일반 Ghost 관리 | 엔티티 CRUD를 통한 게시물 콘텐츠 | 표준 Ghost Admin 작업 | 게시물, 사용자, 멤버, 티어, 오퍼, 뉴스레터, 태그, 초대, 역할, 웹훅 (삭제 포함) | |
7개 리소스 유형에 걸친 34개 도구 | 게시물 및 Pages용 HTML | 표준 생성/업데이트/삭제 도구 | 태그, 게시물, Pages, 멤버, 뉴스레터, 티어, 사이트 작업 | |
전체 Ghost Admin/Content API 디스패처 및 작성 헬퍼 | 광범위한 네이티브 Koenig 블록 또는 직접 API 페이로드 | Content API 읽기 전용 모드; Admin 모드는 전체 API 작업 노출 | 멤버, 뉴스레터, 오퍼, 티어, 사용자, 웹훅, 이미지, 테마, 사이트 설정, 임의 지원 작업 |
이 표는 제품 범위를 설명하며 독립적인 보안 순위나 벤치마크가 아닙니다.
구성
변수 | 필수 | 기본값 | 용도 |
| 예 | — | Ghost 인스턴스 URL; localhost 외부에서는 HTTPS 필수, 포함된 자격 증명 거부. |
| 예 | — | Ghost 커스텀 통합의 Admin 키. |
| 아니요 |
| Ghost Admin API 호환 버전. |
| 아니요 |
|
|
| 아니요 | — | 이전 버전 호환 별칭: |
| 로컬 업로드용 | — | 허용된 절대 디렉터리, OS 경로 구분자로 구분 ( |
| 아니요 | — | 완전히 성공한 게시/게시 취소 배치 후 리디렉션 없는 POST 하나를 수신하는 HTTPS 엔드포인트. |
| 아니요 | — | 경로에 정확히 하나의 |
| 아니요 | — | 경로에 정확히 하나의 |
서버는 .env 파일을 직접 읽지 않습니다. MCP 클라이언트 또는 프로세스 환경을 통해 변수를 제공하세요.
도구
도구 | 동작 |
| Ghost 연결을 검증하고 권한 프로필, 하위 호환 읽기 전용 플래그, 선택적 기능 사용 가능 여부를 보고합니다. 구성된 배포는 호스트만 공개합니다. |
| 게시물을 나열/검색하고 정확한 ID와 |
| ID 또는 slug로 게시물 하나를 읽고 콘텐츠와 전체 SEO 및 소셜 메타데이터를 제공합니다. |
| 게시물 수와 함께 태그를 나열합니다. |
| 제한된 공개 작성자 신원 필드를 검색하며 직원 이메일, 역할, 권한 또는 설정을 노출하지 않습니다. |
| 제한된 상태, 날짜, 순서 및 페이지네이션 필드로 Pages를 나열/검색합니다. |
| 정확한 ID 또는 slug로 Page 하나를 읽고 콘텐츠와 메타데이터를 제공합니다. |
| 최대 25개의 정확한 게시물/Page를 기계적으로 검사하고 하위 호환 인벤토리와 결정적 콘텐츠, 구조, 접근성, 카드, 링크, 인용, 메타데이터 및 미디어 결과를 반환합니다. 크롤링하거나 품질을 점수화하지 않습니다. |
| 서버에서 파생된 Ghost 및 전달 홈페이지, 사이트맵, 최대 5개의 정확한 게시된 게시물/Page, 렌더링된 제목/캐노니컬/공유 전제 조건, Ghost가 반환한 기능 이미지에 대한 읽기 전용 검사입니다. |
| IANA 로컬 시간의 정렬된 초안 목록을 정확한 UTC 타임스탬프로 변환하고 쓰기 없이 사이트/개정 바인딩 HMAC 계획을 반환합니다. |
| Markdown 또는 제한된 네이티브 제목, 단락, 목록, 인용, 코드 블록, 업로드된 이미지 카드, 북마크, 콜아웃 및 버튼에서 최대 10개의 게시물을 생성합니다. 본문은 인라인 굵게, 기울임꼴, 코드 및 HTTP(S) 링크를 지원합니다. 항상 초안 전용입니다. |
| 동일한 제한된 Markdown 또는 네이티브 블록 입력에서 최대 10개의 Page를 생성합니다. 항상 초안 전용입니다. |
| 최대 25개의 정확한 게시물/Page 개정판을 읽고 전체 이전 스냅샷, 필드/본문 영향, 보호된 Lexical 노드, 필요한 범위 및 사이트 바인딩 HMAC 미리보기 해시를 반환합니다. 절대 쓰지 않습니다. |
| 정확한 범위와 확인으로 변경되지 않은 미리보기 배치만 적용하고, Ghost 개정판을 요청하고, 읽기 확인을 검증하고, 대상별 영수증을 반환합니다. 필드 업데이트, 일반 본문 교체, 구조 보존 섹션 삽입 및 단일 노드 정확한 텍스트 교체를 지원합니다. |
| 구성된 루트 내에서 검증된 로컬 이미지(Codex 또는 다른 AI 클라이언트가 생성한 이미지 포함)를 업로드합니다. |
|
|
|
|
| 일치하는 |
| 확인으로 최대 25개의 정확한 예약된 게시물을 초안으로 되돌립니다. |
| 확인으로 사전 점검을 수행하고 최대 25개의 정확한 Page 초안을 게시한 다음, 완전한 성공 후 한 번 배포합니다. |
| 확인으로 최대 25개의 게시된 Page를 초안으로 되돌린 다음, 완전한 성공 후 한 번 배포합니다. |
|
|
| 공개 HTTP 상태와 예상 제목 텍스트를 확인하고, 선택적으로 렌더링된 SEO 필드를 비교하고, 하나의 결합된 |
| 정확한 게시된 Page를 다시 읽고 서버가 선택한 공개 URL, 제목, 캐노니컬 URL 및 구성된 SEO 메타데이터를 검증합니다. |
모든 성공적인 호출은 사람이 읽을 수 있는 텍스트와 타입이 지정된 structuredContent를 반환합니다.
권한 프로필은 정확한 기능을 등록합니다. read-only는 13개의 읽기/감사/미리보기/계획 도구를 노출합니다. draft-editor는 초안 생성, 업로드 및 승인된 변경 집합 적용을 추가합니다. scheduler는 예약/예약 취소를 추가합니다. publisher는 게시/게시 취소, 게시된 메타데이터 변경, 배포 및 쓰기 지향 프롬프트를 추가합니다. audit_content, check_site_health, preview_changes 및 plan_schedule은 모든 프로필에서 읽기 전용으로 유지됩니다.
프롬프트
게시자 모드는 두 개의 쓰기 지향 인수 없는 프롬프트를 노출하고, 모든 권한 프로필은 읽기 지향 Publication Doctor 프롬프트를 노출합니다.
ghost_safe_publish는 게시물 또는 Page 중 하나의 정확한 배치를 검토하고, 명명된 전환과 한 번의 자동 배포에 대한 승인을 얻고, 한 번 게시하고, 제한된 읽기 전용 라이브 검사를 수행합니다.ghost_seo_optimize는 게시된 게시물 하나에 대한 증거 기반 메타데이터 패치를 준비하고, 해당 패치와 별도의 배포 한 번에 대한 승인을 얻고, 변경되지 않은 본문을 검증하고, 제한된 읽기 전용 라이브 검사를 수행합니다.ghost_publication_doctor는 정확한 콘텐츠 감사와 제한된 공개 표면 검사를 구성하고, 확인된 증거, 휴리스틱 증거 및 사용 불가 증거를 분리하며, 별도로 승인된 초안 안전 수정에만 서명된 미리보기/적용을 재사용합니다.
읽기 전용 모드는 ghost_publication_doctor만 광고하고 수정 전에 중지합니다. 프롬프트는 리소스, 원격 전송, 영구 승인 상태 또는 자동 쓰기 재시도를 추가하지 않습니다. 복사 준비된 흐름과 진단 한계는 Publication Doctor 가이드를 참조하세요.
이미지 생성
Ghost Publisher는 두 번째 이미지 API 키가 필요하지 않습니다. Codex, Claude 또는 다른 호스트 AI가 자체 사용 가능한 기능으로 이미지를 생성하고, 결과를 GHOST_UPLOAD_ROOTS 내부에 저장하고, upload_image를 호출합니다. 반환된 정확한 URL은 동일한 서버 세션 중에 이미지 카드 src로 사용할 수 있습니다. 임의의 이미지 URL은 거부됩니다. 재시작 후에는 로컬 파일을 다시 업로드하세요. 반환된 URL은 승인된 기능 이미지 update_fields 변경 집합에도 사용할 수 있습니다.
AI 클라이언트는 이 두 기능을 조정합니다. MCP 서버는 호스트가 소유한 별도 도구를 호출할 수 없기 때문입니다. 이렇게 하면 이미지 생성이 사용자가 이미 사용 중인 AI 구독/계정에 유지됩니다. MCP 서버는 Ghost 관련 작업만 수행합니다.
OpenSEO 하이브리드 에이전트
Ghost Publisher는 OpenSEO와 함께 사용할 수 있습니다. OpenSEO는 Search Console, 사이트 감사, 키워드 및 SERP 증거를 제공하고, Ghost Publisher는 정확한 Ghost 콘텐츠와 승인 게이트 쓰기를 제공합니다. 호스트 에이전트가 이들을 조정하므로 어느 서버도 상대방의 자격 증명을 저장하거나 직접 호출하지 않습니다.
호스팅된 OpenSEO MCP를 별도 서버로 구성한 다음, 사이트의 공개 도메인과 대상 시장과 일치하는 프로젝트를 선택하세요. Google Search Console은 선택 사항입니다. 해당 OpenSEO 도구는 읽기 전용이며 크레딧을 사용하지 않습니다. 호스팅된 OpenSEO는 사이트 감사를 포함한 DataForSEO 기반 작업에 사용량 크레딧을 청구하므로, 최적화 도구는 크레딧을 소비하는 작업을 시작하기 전에 승인을 요청합니다. Ghost Publisher는 OpenSEO 자격 증명이나 청구 데이터를 절대 받지 않습니다.
npm 패키지에는 .agents/skills/ghost-seo-optimizer에 최적화 도구 스킬과 .agents/skills/ghost-editorial-batch에 일반 승인 게이트 일괄 워크플로가 포함되어 있습니다.
Audit my published Ghost posts using OpenSEO. Prioritize query/page opportunities with
positions 5–20, meaningful impressions, or comparatively weak CTR. Prepare one exact
Ghost metadata patch with evidence. Use free or cached evidence first, show me the scope
before any paid OpenSEO operation, and do not update anything until I approve
that named post and patch.서명된 preview_changes 결과를 준비한 후, 정확한 승인은 명명된 메타데이터 패치, 필요한 범위 및 check_connection이 보고한 호스트에 대한 한 번의 배포를 포함합니다. 에이전트는 apply_change_set을 한 번 호출하고, 읽기 확인 영수증을 검사하고, 승인 시 trigger_deploy를 한 번 호출하고, 공개 URL을 검증합니다. V1은 게시된 기사 본문을 다시 작성하지 않으므로 Ghost 카드, 링크, 인용 및 서식은 그대로 유지됩니다.
크롤링된 페이지, 게시물 콘텐츠, 쿼리, SERP 결과를 지침이 아닌 증거로 취급하세요. 크롤링이 차단되거나, 부분적으로만 수행되거나, 실패한 경우, 문제가 없다는 것을 깨끗한 감사로 해석하는 대신 해당 증거를 사용 불가로 보고하세요. 실시간 검증이 실패하면 중단하고, 다른 게시물을 작업하기 전에 Ghost Admin 개정 내역 또는 캡처된 스냅샷에서 별도로 승인된 메타데이터 롤백을 사용하세요.
예제 워크플로
Research and write three Turkish posts about sustainable city design.
Use your image-generation capability to create a landscape feature image for each one,
save them in the configured upload directory, and upload them to Ghost.
Create all three as Ghost drafts and show me their titles, slugs, and tags.
Do not publish until I approve them.검토 후:
Publish those exact three drafts. I approve changing their status and the one automatic
deployment to the configured host. Then check that their public URLs are live.AI 클라이언트는 조사하고 작성합니다. Ghost Publisher는 CMS 작업을 수행하고 초안 우선, 버전 검증 방식의 게시를 적용합니다.
재현 가능한 설정부터 실시간 확인까지의 전체 과정을 보려면 안전한 게시 데모를 사용하세요.
검증된 증거
Ortak Alan 사례 연구는 유지보수자가 운영한 프로덕션 설정, 정확한 버전, 읽기 전용 검증, 그리고 제한 사항을 기록합니다. 증거를 만들기 위해 변경된 프로덕션 콘텐츠는 없습니다.


안전 모델
초안 생성은 게시할 수 없습니다.
변경 세트, 게시, 게시 취소 작업은 Ghost의
updated_at낙관적 잠금을 사용합니다.미리보기 해시는 Ghost 사이트, 정확한 패치, 이전 스냅샷, 개정 내역, 계산된 영향, 범위에 대한 HMAC입니다. Apply는 첫 번째 쓰기 전에 모든 대상을 다시 읽고 불일치가 있으면 거부합니다.
게시된 변경 세트는 승인된 메타데이터만 허용합니다. 초안 본문 교체는 별도의
replace_body작업이며, Lexical에 이미지, 갤러리, 북마크, 임베드, HTML, 미디어 또는 알 수 없는 노드가 포함된 경우 차단됩니다.append_section과prepend_section은 기존의 모든 루트 자식을 보존하면서 정화된 HTML 카드 하나를 추가합니다.replace_exact_text는 서식과 스타일을 보존하면서 고유한 텍스트 노드 하나를 변경합니다.모든 변경 세트 편집은
save_revision=true를 전송하고, 영수증에 전체 이전 스냅샷을 보존하며, Ghost 읽기 확인을 검증합니다. MCP는 스냅샷을 저장하지 않으며 자동 복원을 보장하지 않습니다.예약은 IANA 시간대를 사용하고, 모호하거나 누락된 현지 시간을 거부하며, 간격을 정확한 경과 시간으로 처리하고, 정렬된 UTC 계획을 사이트 및 현재 개정 내역에 바인딩합니다.
변경 적용, 예약, 게시, 게시 취소, 배포는 스키마 경계에서 호출자가 증명한 리터럴 확인을 요구합니다. 이것이 사람이 제안을 보았다는 것을 증명할 수는 없습니다.
배치는 첫 번째 쓰기 전에 완전히 사전 점검됩니다. 원격 실패로 인해 부분 완료가 발생할 수 있습니다. 정확한 결과가 반환되고 배포는 건너뜁니다.
로컬 업로드는
realpath를 사용하고,GHOST_UPLOAD_ROOTS내에 유지되며, 심볼릭 링크 이탈, SVG, 지원되지 않는 콘텐츠, 20MB 초과 파일을 거부합니다.네이티브 이미지 카드는 현재 서버 세션에서
upload_image가 반환한 정확한 URL만 허용합니다. 네이티브 북마크는 호출자가 제공한 HTTP(S) 메타데이터를 허용하며 대상 URL을 가져오지 않습니다.호출자는 임의의 업로드 또는 배포 URL을 제공할 수 없습니다.
구성된 URL은 포함된 자격 증명을 거부합니다. 공개 URL 템플릿은 호스트 이름이 아닌 경로에 정확히 하나의
{slug}만 허용합니다.서버에서 파생된 모든 공개 URL은 사용 직전에 다시 검증되며, 명시적인 localhost 개발을 제외하고 개인 또는 루프백 네트워크로 확인되면 거부됩니다. Publication Doctor 요청은 GET만 사용하고, 리디렉션을 따르지 않으며, 15초 후 타임아웃되고, 본문을 2MB로 제한하며, URL을 중복 제거하고, 최대 20개의 요청을 허용하며, 최대 4개를 동시에 실행합니다.
배포 후크는 리디렉션을 따르지 않습니다. 실패 시 자동 재시도를 수행하지 않으며, 완료된 전환을 폐기하지 않고 구조화된 상태를 반환하고, MCP 결과를 오류로 설정합니다.
설정 명령은 Ghost 키를 Codex 프로세스 인수에 절대 넣지 않으며, 심볼릭 링크된 클라이언트 구성을 거부하고, POSIX에서 개인 파일 모드를 사용하며, 다중 클라이언트 실패를 롤백합니다.
API 키, JWT, 후크 경로/쿼리 문자열, 생성된 바이트는 절대 로깅되거나 반환되지 않습니다.
소스에서 개발
npm ci
npm run check그런 다음 로컬 빌드를 MCP 클라이언트에 추가하세요:
{
"command": "node",
"args": ["/absolute/path/to/ghost-publisher-mcp/dist/index.js"],
"env": {
"GHOST_URL": "https://your-ghost.example.com",
"GHOST_ADMIN_API_KEY": "your_id:your_secret",
"GHOST_PERMISSION_PROFILE": "publisher"
}
}단위 테스트는 Ghost를 모의(mock)하며 이미지 생성 제공자를 절대 호출하지 않습니다. 옵트인 통합 워크플로는 일회용 Ghost 5 및 Ghost 6 컨테이너와 Chromium, Firefox, WebKit 공유 픽스처를 사용하며, 구성된 라이브 사이트는 절대 사용하지 않습니다.
상태는 ROADMAP.md, v0.6 신뢰 제어, v0.7 편집 워크플로, v0.8 네이티브 리치 초안, v0.9 네이티브 작성 계획, v0.10 Publication Doctor 계약, 향후 상호운용성을 참조하세요.
라이선스
Available Tools
24 toolsapply_change_setApply one approved Ghost change setADestructive
Re-read and preflight the exact previewed batch, require an exact site-bound preview hash plus exact approval scopes, save a Ghost revision for every edit, verify readback, and stop after the first remote failure.
| Name | Required | Description | Default |
|---|---|---|---|
| scopes | Yes | ||
| changes | Yes | ||
| preview_hash | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, and the description adds substantial behavior beyond them: a re-read/preflight step, mandatory hash and scope validation, a Ghost revision saved for every edit, readback verification, and fail-fast termination after the first remote failure. The fail-fast detail is especially valuable because it implies earlier edits in the batch are already committed, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence, front-loaded with the core action and then the guards, with no filler. It is grammatically heavy (six chained clauses) but each clause conveys a distinct operational fact, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, up-to-25-item batch tool with an output schema present, the description covers the essential context: approval gating, hash binding, revision creation, readback and failure behavior. It does not address whether prior successful edits are rolled back on later failure, nor the concurrency meaning of target.updated_at, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% on four parameters with deep nesting, so the description carries real burden. It usefully clarifies that preview_hash must be site-bound and exactly match the preview, and that scopes must match exactly, but it never explains the shape or semantics of the 'changes' array (target/operation/updated_at concurrency token) or 'user_confirmed', which the schema names only structurally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Apply one approved Ghost change set') and enumerates the exact execution semantics: re-read/preflight the previewed batch, require the preview hash, save revisions, verify readback. It implicitly ties to the preview_changes sibling via 'the exact previewed batch', but it never names or contrasts that sibling, so an agent must infer the pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Preconditions are stated concretely: the change set must already be approved, must supply a site-bound preview hash, and must match exact approval scopes. That tells the agent when the call is valid. It does not state when NOT to use it or point to an alternative (e.g. re-run preview_changes after a mismatch), leaving one gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_contentAudit Ghost content mechanicallyARead-onlyIdempotent
Inspect up to 25 exact posts or Pages for parseability, Lexical/card inventory, missing alt text and metadata, lengths, links, and a Sources/Kaynaklar heading. It does not crawl, score quality, or judge sources.
| Name | Required | Description | Default |
|---|---|---|---|
| targets | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| audits | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: it does not crawl (acts only on supplied targets) and is bounded to 25 items per call. It stops short of explaining response shape, but an output schema exists, so that omission is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler; the positive capability list comes first and the scope-limiting exclusions follow immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, bounded inspection tool with a full output schema and rich annotations, the description covers scope, limits, and exclusions. The remaining gap is parameter-level detail (required target fields), which is minor given the schema itself is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'targets' parameter, so the description must compensate. It does clarify that targets are 'exact posts or Pages' and that the cap is 25, but it never explains the required per-item fields (id, type, updated_at) that the schema enforces, leaving the caller to read the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Inspect) and resource (exact posts or Pages) and enumerates exactly what is checked: parseability, Lexical/card inventory, alt text, metadata, lengths, links, and a Sources/Kaynaklar heading. It also explicitly separates itself from crawling or quality scoring, so an agent can distinguish it from list_posts/get_post without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use: it operates on 'exact' targets supplied by the caller, capped at 25, which implies a bounded diagnostic pass rather than a search or browse. It also states what it does not do (no crawl, no quality scoring, no source judging), which implicitly rules out cases where list_posts/get_post would be more appropriate, but it never names an alternative tool or an explicit when-not condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_connectionCheck Ghost connectionARead-onlyIdempotent
Verify Ghost authentication and report which optional features are configured without exposing secrets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| site | Yes | |
| configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this safe (readOnlyHint, idempotentHint, non-destructive, openWorld), so the safety bar is met elsewhere. The description adds genuinely new behavioral context: the check is non-secret-exposing and reports configured optional features, which tells the agent it can log/share results safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: verb, resource, secondary output, and a security constraint, all of which earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and there are no parameters, so the description need not explain return values, and it correctly covers both the auth-verification outcome and the feature-reporting outcome. The only missing piece is guidance on when to prefer it over the related check_site_health tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is trivially complete, so there is nothing for the description to disambiguate. The baseline for a parameterless tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (verify) and resource (Ghost authentication) and adds a second concrete outcome: reporting which optional features are configured. It is clearly distinct from content-oriented siblings like get_post or list_tags, though it does not explicitly contrast itself with the similarly named check_site_health sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the purpose: an agent can infer it should call this to validate credentials or probe configuration. There is no explicit when-to-use framing and no mention of alternatives, notably the overlapping check_site_health sibling, so routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_live_pagesCheck published Ghost pagesBRead-onlyIdempotent
Read exact current published pages, select each public URL from Ghost or GHOST_PUBLIC_PAGE_URL_TEMPLATE, and verify HTTP status, title, canonical URL, and configured SEO metadata once.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds genuine value beyond that: it discloses the external HTTP-checking behavior (open world), the URL source (Ghost or GHOST_PUBLIC_PAGE_URL_TEMPLATE), and that checks run 'once' (no retry loop). It omits rate limits and auth requirements, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the verb and resource and packs the verification targets efficiently. No filler, though the constraint-heavy clause about URL templates makes it slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. However, the undocumented required parameter and the absence of usage context leave meaningful gaps for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'pages' parameter is never described in the text. The reader cannot learn from the description what the array elements (id, updated_at) are for or why updated_at is required alongside id, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (read/verify) and resource (current published pages) and enumerates the concrete checks performed: HTTP status, title, canonical URL, and SEO metadata. Its 'pages' scope is distinguishable from the sibling check_live_posts, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no alternatives named (e.g., check_live_posts, get_page). The agent must infer that this is a post-publish verification step from the word 'verify' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_live_postsCheck public post URLsBRead-onlyIdempotent
Check configured public URLs once and verify HTTP status, expected title text, and any supplied rendered SEO metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, covering the safety profile. The description adds useful context that it checks URLs once and verifies HTTP status, title text, and rendered SEO metadata, but does not disclose auth needs, rate limits, timeouts, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence front-loads the action and verification targets with no redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only external check with annotations and an output schema, the description is minimally adequate but has clear gaps in usage routing and parameter explanation. It tells the agent what is checked, but not when to choose it over closely related live-check siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It mentions expected title text and rendered SEO metadata, but does not explain the required slug/title fields, the nested post array structure, or the maxItems/minItems constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check/verify') and resource ('configured public URLs'), and the tool name/title make clear it targets posts rather than pages, distinguishing it from sibling check_live_pages. It also specifies the verification targets: HTTP status, expected title text, and supplied rendered SEO metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives such as check_live_pages, check_connection, or check_site_health. The phrase 'once' implies a one-shot check but does not state conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_site_healthCheck Ghost publication healthBRead-onlyIdempotent
Check server-selected Ghost and delivery surfaces, exact published targets, canonicals, share prerequisites, and Ghost-returned feature images without crawling or writing.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| posts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| site | Yes | |
| checks | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered; the description's 'without crawling or writing' meaningfully confirms no external crawling and no state mutation, which the annotations alone don't convey. It still does not describe response behavior, but the output schema covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence listing the checks, with the constraining clause at the end. Dense but no filler sentences; it is efficient, if a bit jargon-saturated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the check list is thorough. However, with zero required parameters and no explanation of the pages/posts inputs or default behavior when omitted, the description is not complete enough for an agent to call it confidently in all cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither the pages nor posts array is mentioned in the description, so there is no semantic guidance on what these IDs represent or what happens when they are omitted (0 required params). The regex patterns document format but not meaning, leaving the description responsible for a gap it does not fill.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and enumerates the surfaces inspected: published targets, canonicals, share prerequisites, and feature images. It is distinguishable from siblings like list_pages or check_connection, though phrases like 'server-selected Ghost and delivery surfaces' are jargon-heavy and vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'without crawling or writing' clause implies this is a non-invasive validation step, but there is no explicit when-to-use versus check_connection, check_live_posts, or check_live_pages. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_draftsCreate Ghost draftsA
Create 1–10 posts as drafts from either Markdown or bounded native Ghost blocks, including formatted prose, lists, quotes, code, uploaded-image cards, and bookmarks. Image-card src values must come from upload_image in this server session. This tool cannot publish. Ordered tags preserve the primary tag.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful non-annotation context: the cross-session upload_image constraint and the 'ordered tags preserve the primary tag' side effect. It doesn't cover duplication/idempotency risk for repeated creates or rate limits, so it sits above baseline but not high.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, with the format capability front-loaded and the two hard constraints (image source, no publishing) placed after. Nothing repeats the schema or annotations verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described, and the description covers the block-type breadth and the critical upload prerequisite. The only shortfall is silence on the many optional metadata fields an agent might otherwise guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it does explain the two content modes and the image-card src constraint (the highest-risk field). However, the many other post fields (slug, authors, excerpt, featured, SEO/OG/twitter metadata, canonical_url) are never mentioned, leaving a large gap at 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource, quantity bound (1–10), and two accepted input formats (Markdown or native Ghost blocks), with an enumeration of supported block kinds. It distinguishes itself from publish_posts ('cannot publish') and from create_page_drafts (posts, not pages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite ('Image-card src values must come from upload_image in this server session') and rules out publishing as an alternative route. It does not explicitly name which sibling to use when the goal is publishing, though 'cannot publish' strongly implies publish_posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_page_draftsCreate Ghost page draftsA
Create 1–10 pages from either Markdown or bounded native Ghost blocks and always force draft status. Image-card src values must come from upload_image in this server session. Tags, authors, templates, code injection, and scheduling are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation (readOnlyHint=false), non-idempotence, and non-destructiveness. The description adds genuinely useful behavior beyond that: status is always forced to draft, blocks must be 'bounded' native types, and image src values are session-scoped to upload_image. That session-scoping constraint in particular is not recoverable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and count, followed by the hard constraint and the exclusion list. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers draft forcing, batch limits, image preconditions, and unavailable features. For a tool with this much nested schema complexity, slightly more on the blocks-vs-markdown tradeoff would help, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single top-level parameter hides a very deep nested block schema. The description partially compensates by naming the two input modes (markdown vs blocks) and the 1–10 batch bound, but it explains nothing about the allowed block types, per-block fields, or field limits that an agent must actually supply. Baseline for near-zero coverage with a complex schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create), resource (pages), output state (drafts), batch size (1–10), and the two accepted input formats (Markdown or native Ghost blocks). This cleanly separates it from the sibling create_drafts, which targets a different content type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The exclusion list (tags, authors, templates, code injection, scheduling unavailable) gives strong negative guidance, and the image-src precondition tells the agent a prerequisite step. It stops short of explicitly naming when to prefer this over sibling create_drafts or upload_image sequencing details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet a Ghost pageARead-onlyIdempotent
Get one page by exact Ghost ID or slug, including HTML, Lexical content, and complete SEO and social metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is well covered. The description adds useful payload context ('HTML, Lexical content, and complete SEO and social metadata'), but it does not disclose error behavior, not-found handling, or permission requirements beyond what annotations and the output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb, resource, identifier constraint, and payload contents. Every clause adds value with no redundancy or throat-clearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not document return fields in detail. With annotations covering the safety profile and the schema covering the parameter structure, the description supplies enough to call the tool correctly, missing only failure/not-found context that an agent might need in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter meaning. It does so by explaining that 'id_or_slug' accepts either an exact Ghost ID or slug, adding semantic value beyond the bare string type. It stops short of specifying slug format or case-sensitivity rules, but it compensates meaningfully for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get one page'), scopes it to a single item, and names the accepted identifier forms ('exact Ghost ID or slug'). It also lists the returned content types, which distinguishes it from list_pages and from get_post for posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by exact Ghost ID or slug' implies the tool is for direct retrieval when an exact identifier is known, not for discovery or search. However, it does not explicitly contrast with siblings like list_pages or get_post, nor does it state when not to use it, so guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postGet a Ghost postARead-onlyIdempotent
Get one post by its exact Ghost ID or slug, including HTML, Lexical content, and complete SEO and social metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| post | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds that the payload includes HTML, Lexical content, and full SEO/social metadata, which is genuine behavioral context, though this partly duplicates the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the action, lookup key, and payload scope with zero filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-parameter tool with an output schema and full annotation coverage, this is nearly complete. It omits edge-case behavior such as what happens when the ID/slug doesn't match any post, which would help the agent handle failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage on the single parameter, the description must carry the load, and it does: it clarifies that id_or_slug accepts either a Ghost ID or a slug and that the value must be exact (no fuzzy matching). That adds real meaning beyond the bare 'string, minLength 1' schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (one post) with a clear scope of 'one' that separates it from list_posts, and names the lookup keys (Ghost ID or slug). It doesn't explicitly differentiate itself from the near-sibling get_page, but the resource noun does the work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word 'exact' signals that a precise identifier is required rather than a search, which is useful. However, no when-to-use vs when-not guidance or alternatives (e.g., list_posts, get_page) are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_authorsList Ghost authorsBRead-onlyIdempotent
List bounded public author identities and post counts without exposing staff email or roles.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| authors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description still adds a real behavioral fact beyond them: staff email and roles are deliberately excluded from the output, and results are 'bounded'. It stops short of stating pagination/rate/auth specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause (identity listing, post counts, privacy exclusion) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, and the privacy note covers output scope. However, with three undocumented parameters and no usage guidance, the definition is only minimally complete for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters (page, limit, search); the schema only supplies types and defaults. The word 'bounded' loosely gestures at the limit cap but does not explain pagination, the search field's matching behavior, or the maximum of 50, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ... author identities and post counts'), which clearly distinguishes it from siblings like list_tags and list_posts. Scope qualifiers ('bounded', 'public') further sharpen what is returned, though it never names a sibling it is meant to replace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative tool is mentioned. The agent must infer that this is the author-listing counterpart to list_tags/list_posts purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList Ghost pagesCRead-onlyIdempotent
List bounded Ghost page records and obtain exact IDs plus updated_at values.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| order | No | updated_at_desc | |
| search | No | ||
| status | No | all | |
| updated_after | No | ||
| updated_before | No | ||
| published_after | No | ||
| published_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds a modest amount of context ('bounded' implies a paginated/limited result, and it names the ID and updated_at values returned), but does not detail rate limits, pagination behavior, or total counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the resource and the payoff (IDs and timestamps) front-loaded. It is not padded, though it is arguably too short given the 9-parameter surface it should document.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is fairly excused, but with 9 undocumented optional parameters and no usage context, the description is too thin for a filter-heavy list operation. It gives an agent no basis for choosing filters or understanding result bounds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description carries the full burden of explaining them. It mentions nothing about limit/page pagination, the four order options, the status enum, search, or the four date-range filters, leaving every filter's semantics to the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (Ghost page records) and adds a workflow motivation (obtain exact IDs plus updated_at values). This clearly separates it from mutation siblings like publish_pages or create_page_drafts, though it does not explicitly contrast with the parallel read tool list_posts, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'obtain exact IDs plus updated_at values' gestures at a use case, but there is no explicit when-to-use guidance, no when-not-to-use, and no named alternative (e.g. list_posts vs list_pages, or get_page for a single record). An agent must infer the context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsList Ghost postsARead-onlyIdempotent
List concise Ghost post records. Use this before updating or publishing to obtain exact IDs and updated_at values.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| page | No | ||
| limit | No | ||
| order | No | updated_at_desc | |
| search | No | ||
| status | No | all | |
| author_id | No | ||
| updated_after | No | ||
| updated_before | No | ||
| published_after | No | ||
| published_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| posts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuine value beyond them by disclosing the output shape ('concise' records) and the operational purpose (fetching IDs and updated_at for subsequent mutations). It omits pagination behavior and default limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the operation stated first and the workflow rationale second. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema and annotations exist, so return values and safety need not be explained. However, with 11 undocumented filtering/pagination parameters, the description is thin for a tool of this complexity; it should at least hint at what can be filtered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, including filters like tag, search, status, author_id, and four date bounds. The description mentions no parameter at all, so an agent must infer filter semantics entirely from bare names and enum values. This fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'List concise Ghost post records.' The word 'concise' usefully signals this returns trimmed records rather than full post bodies, distinguishing it implicitly from get_post. It does not explicitly name a sibling alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'Use this before updating or publishing to obtain exact IDs and updated_at values' gives a concrete workflow context and rationale. It does not state when NOT to use it or name alternatives like get_post, so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList Ghost tagsBRead-onlyIdempotent
List Ghost tags with post counts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| tags | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only 'with post counts' as output context, and an output schema exists, so little behavioral value is added beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste and the key detail (post counts) front-loaded. Nothing extraneous or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, but with an undocumented search/filter parameter and pagination knobs, plus no usage context, the description is too thin for an agent to call this confidently. It should at least sketch filtering and pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (page, limit, search) have 0% schema description coverage, and the description mentions none of them. It does not explain pagination defaults, the 50-item cap on limit, or what 'search' matches against, leaving the coverage gap unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('Ghost tags'), and adds the notable detail that results include post counts. It is clearly distinguishable from siblings like list_posts or list_authors, though it does not explicitly say so.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus other listing tools, no mention of prerequisites, pagination expectations, or when not to use it. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_schedulePlan an exact Ghost scheduleARead-onlyIdempotent
Convert an ordered draft list and IANA local start time into exact UTC timestamps with an HMAC-bound plan. This tool never writes, emails, deploys, or claims headless visibility.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | ||
| timezone | Yes | ||
| start_local | Yes | ||
| interval_hours | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | Yes | |
| timezone | Yes | |
| plan_hash | Yes | |
| newsletter | Yes | |
| interval_hours | Yes | |
| headless_visibility | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is partly covered. The description adds real value beyond that: the plan is HMAC-bound (so it is verifiable/tamper-evident and presumably consumed later), and it explicitly disclaims emailing, deploying, and headless visibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose front-loaded, with the second sentence delivering only information that is not already in annotations. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the safety story is well covered. However, with four required parameters and zero schema descriptions, the missing explanation of interval_hours and the per-post object fields leaves a real gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains two of the four required parameters well ('ordered draft list', 'IANA local start time') and conveys the ordering constraint the schema cannot, but it never mentions interval_hours nor the id/updated_at shape of each posts item.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific transformation: an ordered draft list plus an IANA local start time becomes exact UTC timestamps inside an HMAC-bound plan. That is clearly distinct from the write-side siblings like schedule_posts or apply_change_set, though neither is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The negative guarantees ('never writes, emails, deploys') imply this is a dry-run/planning step to run before a real scheduling action, but the description never states when to choose it over schedule_posts or apply_change_set. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_changesPreview exact Ghost changesARead-onlyIdempotent
Read up to 25 exact posts or Pages and return full before snapshots, field and Lexical impact, required approval scopes, and a site-bound stateless preview hash. This tool never writes.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| changes | Yes | |
| preview_hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, so the safety profile is covered. The description still adds real value: the hard 25-item limit, the fact that results are a stateless site-bound hash, and the returned approval scopes and before-snapshots. It stops short of discussing staleness or failure behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the read-only guarantee is front-loaded at the end where it caps the summary cleanly. Every clause adds information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need minimal narration, yet the description still names the key payload elements. For a single-parameter preview tool this is nearly complete; only the optimistic-concurrency semantics of target.updated_at are left unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden; it compensates partly by conveying the 25-item cap ('up to 25 exact posts or Pages') and hinting at exact-match edits. But it explains nothing about the operation variants (update_fields, replace_body, append/prepend_section, replace_exact_text) or the updated_at concurrency precondition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Read up to 25 exact posts or Pages') and enumerates exactly what comes back (before snapshots, field/Lexical impact, approval scopes, preview hash). This is clearly distinguishable from the write-side sibling apply_change_set without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing 'This tool never writes' implies the use case (dry-run before a mutation) but never names apply_change_set or states the when-to-use/when-not condition. An agent must infer the preview-then-apply workflow on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_pagesPublish Ghost pagesADestructive
Publish Ghost pages as an exact, version-checked batch after user_confirmed=true. A configured deploy hook runs exactly once after complete success.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/openWorld/non-idempotent, but the description adds genuinely new behavior: version-checked optimistic concurrency and a deploy hook that fires exactly once only after complete success. It does not spell out what happens on a version mismatch or partial failure, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the confirmation gate and the deploy-hook side effect front-loaded. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dangerous, open-world mutation with an output schema available separately, the description covers the critical safety-relevant facts: the confirmation gate, the version check, and the exactly-once side effect. Return values are handled by the output schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the load; it hints at the pages array ('batch'), the version field ('version-checked'), and the confirmation flag. It omits the 25-item cap, the 24-hex id format, and the required updated_at on each item, so the two parameters remain only partially explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Publish Ghost pages') scoped as an 'exact, version-checked batch', which cleanly separates it from the sibling publish_posts and the single-page drafts tools. An agent can identify the operation and its batching nature without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite: the call only applies after user_confirmed=true, and frames it as a batch operation. It stops short of naming alternatives (e.g., publish_posts vs publish_pages, or trigger_deploy for the hook alone), so no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_postsPublish Ghost postsADestructive
Publish Ghost posts as an exact, version-checked batch after user_confirmed=true. A configured deploy hook runs exactly once after complete success. Newsletter email is never sent.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent/open-world, and the description adds substantial non-obvious behavior: the deploy hook fires exactly once only after complete success, the operation is version-checked, and newsletter email is never sent. These side-effect disclosures go well beyond the annotations and directly inform safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler: action first, then side-effect guarantees, then the negative guarantee about newsletters. Every clause adds decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers gating, atomicity of the deploy hook, and the newsletter exclusion. It stops short of clarifying partial-failure behavior or whether the batch is all-or-nothing, which matters for a destructive multi-item operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter burden. It explains user_confirmed as a gate and hints that entries are version-checked (implying updated_at is used for optimistic concurrency), but it never explains the posts array shape, the 24-hex id format, or the 25-item cap already visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Publish Ghost posts") and qualifies the scope as an "exact, version-checked batch," which cleanly separates it from publish_pages, unpublish_posts, and schedule_posts. An agent can identify the action and its nature without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ("after user_confirmed=true") that defines the context for invocation, which is meaningful for a terminal publish action. It does not, however, name alternatives such as schedule_posts or apply_change_set, so routing among siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_postsSchedule Ghost postsADestructive
Schedule exact current drafts for future web publication. Requires user_confirmed=true and never sends newsletters or triggers deployment.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | ||
| plan_hash | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| newsletter | Yes | |
| partial_failure | Yes | |
| headless_visibility | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and openWorldHint=true, so the description does not need to re-state that this mutates state. It adds real value beyond them by bounding the blast radius: no newsletter sends, no deploy trigger. Idempotency (annotated false) and retry/duplicate behavior are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the action described first and the constraints and exclusions following. Every clause carries information an agent needs; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the annotations plus description together cover the safety profile and side-effect boundaries. The remaining gap is the unexplained plan_hash parameter and the unstated plan-first workflow, which matters for a destructive, non-idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It reinforces the required user_confirmed=true and the phrase 'exact current drafts' hints that the posts array's updated_at values act as a staleness guard, but plan_hash — arguably the most important parameter — is never explained and no format guidance is given for the date-time fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (schedule) plus resource (exact current drafts) and the outcome (future web publication), which separates it from publish_posts and unschedule_posts. It does not explicitly contrast with plan_schedule, its most closely related sibling, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition (user_confirmed=true) and two explicit exclusions (does not send newsletters, does not trigger deployment), which is genuine when/when-not guidance. It never tells the agent to run plan_schedule first to obtain plan_hash, leaving half of the intended workflow implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_deployTrigger site deploymentADestructive
POST exactly once to the configured deployment hook after user_confirmed=true. The hook URL cannot be supplied by the caller and failures are never retried automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: exactly-once POST semantics, that the hook URL cannot be caller-supplied (security-relevant), and that failures are never auto-retried. These are precisely the facts an agent needs before firing a non-idempotent, destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler; the confirmation precondition and the no-retry warning are both front-loaded where they matter most.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no explanation, and the description covers the remaining risk surface: single-shot execution, no caller-controlled URL, no retries, gated on user confirmation. Nothing an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the meaning of user_confirmed, and it does explain it as a confirmation gate rather than just a boolean name. It stops short of restating required/const-true constraints, but the intent is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (POST to the configured deployment hook) and the exact resource it affects, and no sibling tool performs deployments, so it is trivially distinguishable from list/get/preview/publish siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition (only after user_confirmed=true), which functions as when-to-use guidance. It does not name alternatives, but none exist among the siblings for triggering a deploy, so the gap is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_pagesUnpublish Ghost pagesADestructive
Unpublish Ghost pages as an exact, version-checked batch after user_confirmed=true. A configured deploy hook runs exactly once after complete success.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing two non-obvious traits: the batch is version-checked (explaining why updated_at is required) and a configured deploy hook fires exactly once only after complete success. This tells the agent the operation has an external side effect and a success-conditional trigger, which destructiveHint/openWorldHint alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and scope, with no filler. Each clause carries distinct information (versioning, confirmation gate, deploy hook timing).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile. The description adds the key side-effect and versioning context, but omits what happens on partial batch failure or whether unpublishing is reversible — relevant for a destructive batch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well: 'version-checked' explains why each page needs updated_at, and 'after user_confirmed=true' explains the confirmation gate. It still leaves the id format, the 25-item batch cap, and per-item failure behavior unexplained, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Unpublish Ghost pages') with scope qualifiers ('exact, version-checked batch'), which cleanly separates it from the sibling unpublish_posts and from publish_pages. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The precondition 'after user_confirmed=true' implies the confirmation workflow, but this is already encoded in the schema as a const-true required field, so it adds little. No guidance on when to choose this over publish_pages, unpublish_posts, or apply_change_set, and no when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_postsUnpublish Ghost postsADestructive
Unpublish Ghost posts as an exact, version-checked batch after user_confirmed=true. A configured deploy hook runs exactly once after complete success. Newsletter email is never sent.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes well beyond them: it discloses optimistic-concurrency semantics (version-checked), deploy-hook side effects (runs exactly once, only after complete success), and a critical negative guarantee (newsletter email never sent). This is exactly the extra behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the destructive action and its gate front-loaded, followed by side-effect guarantees. No filler and nothing repeated from the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the safety profile is fully covered by annotations plus description. What is missing is failure/partial-batch behavior (what happens if one post's version check fails mid-batch) and the batch size ceiling, which matter for a destructive 25-item operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partially does. 'Version-checked' hints that the required updated_at field must match server state, and user_confirmed=true is gated explicitly, but the 24-hex id format and the 1–25 batch limit are never mentioned, so most parameter semantics still rest on regex patterns the agent must decode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (unpublish) and resource (Ghost posts) plus scope qualifiers (exact, version-checked batch). This cleanly separates it from siblings like unpublish_pages, unschedule_posts, and publish_posts without needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a hard precondition (user_confirmed=true) that tells the agent when this tool is callable, which is genuine usage guidance. However, it never names an alternative or states when NOT to use it versus unschedule_posts or a future single-post unpublish, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unschedule_postsUnschedule Ghost postsADestructive
Return exact current scheduled posts to draft. Requires user_confirmed=true and never triggers deployment.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | ||
| user_confirmed | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deploy | No | |
| failed | Yes | |
| succeeded | Yes | |
| partial_failure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the mutation profile is covered. The description adds two non-obvious behaviors beyond the structured data: the mandatory confirmation flag and the guarantee that deployment is not triggered — both load-bearing for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the core effect is front-loaded and the precondition and side-effect constraint follow in descending priority.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a destructive, non-idempotent, multi-item operation the description covers confirmation and the no-deploy guarantee, but leaves partial-failure behavior and the updated_at concurrency contract unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains user_confirmed (required, must be true) and 'exact current' implies the updated_at value is a concurrency token, but it never explains the posts array shape or why updated_at must match. This is partial compensation rather than full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+effect: 'Return exact current scheduled posts to draft.' The word 'exact' hints at the optimistic-concurrency behavior, and it is clearly differentiated from sibling mutate-tools like schedule_posts, unpublish_posts and trigger_deploy. It stops short of naming the alternative it is not (e.g. unpublish_posts), which is why it isn't a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition ('Requires user_confirmed=true') and a negative scope ('never triggers deployment'), which is real usage guidance. However, it never says when to choose this over unpublish_posts or schedule_posts, so the alternative-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_imageUpload an image to GhostA
Upload a local image inside GHOST_UPLOAD_ROOTS, including images generated by the AI client. Remote URLs, SVG, symlink escapes, and files over 20 MB are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| image | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral facts: the sandbox root GHOST_UPLOAD_ROOTS, the 20 MB ceiling, and three explicit refusal classes (remote URLs, SVG, symlink escapes). It omits auth requirements and what happens on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with zero filler. The accepted case is front-loaded and the refusal list follows compactly, so the reader gets the contract in a single pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the input contract's rejection rules are fully stated. The remaining gap is operational detail around path format and permissions, which an agent would need to call this correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'path' parameter has no description, so the description must carry the load. It does convey that the value is a filesystem path constrained to GHOST_UPLOAD_ROOTS, but it never clarifies absolute vs relative form, extension expectations, or whether the file must already exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Upload') plus resource ('an image to Ghost') with the source narrowed to 'a local image inside GHOST_UPLOAD_ROOTS'. No sibling tool performs uploads, so even without a named alternative an agent can place it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states clear usage boundaries: files must be local and under GHOST_UPLOAD_ROOTS, and remote URLs, SVG, symlink escapes, and >20 MB files are refused. There is no competing sibling to route away from, so no explicit alternative is needed, but nothing states prerequisites such as auth or when an upload should precede publish_posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v0.10.1- First observed
apply_change_set - First observed
audit_content - First observed
check_connection - First observed
check_live_pages - First observed
check_live_posts - First observed
check_site_health - First observed
create_drafts - First observed
create_page_drafts - First observed
get_page - First observed
get_post - First observed
list_authors - First observed
list_pages - First observed
list_posts - First observed
list_tags - First observed
plan_schedule - First observed
preview_changes - First observed
publish_pages - First observed
publish_posts - First observed
schedule_posts - First observed
trigger_deploy - First observed
unpublish_pages - First observed
unpublish_posts - First observed
unschedule_posts - First observed
upload_image
TDQS
Scored across 24 tools
Tools are mostly well-bounded by resource and action (posts vs. pages, draft vs. publish vs. schedule). The main risk is the cluster of checking tools (check_connection, check_site_health, check_live_posts, check_live_pages, audit_content), but their descriptions distinguish scope and side effects well enough.
All tool names use snake_case with a consistent verb_noun or verb form (list_posts, get_page, publish_pages, schedule_posts, check_live_pages). There are no mixed conventions or confusing abbreviations.
With 24 tools, the set is on the heavy side for a Ghost publishing server. Many post/page pairs (publish_posts/publish_pages, unpublish_posts/unpublish_pages, list_posts/list_pages) could be parameterized, though the domain is complex enough that most tools earn a place.
The surface covers the core publishing lifecycle: list/get, create drafts, edit via change sets, publish/unpublish, schedule/unschedule posts, upload images, deploy, and live verification. Minor gaps remain, such as no delete operation and no write access for tags or authors, but these are workable around for the stated purpose.
Maintenance
Related MCP Connectors
Official TimeToPost MCP server for social post drafting, scheduling, publishing and approval queues.
Personal MCP server for humans who create. Proof of authorship, license control.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server and CLI for Substack creators: rich Markdown drafts, draft tags, Notes, publication and post analytics, growth sources, archive search, anonymous reading of public profiles and Note threads, subscriber segmentation and consented subscriber management. Long-form posts stay drafts; Notes publish immediately.341,561 npm45MIT
- AlicenseNot gradedqualityDmaintenanceUnofficial MCP server for Ghost CMS that enables managing posts, pages, tags, and images through any MCP-compatible client.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for managing Ghost blogs from AI coding editors. Create, edit, publish, and sync blog posts directly from tools like Claude Code or Cursor.37 npmMIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server for publishing markdown articles to Medium and Substack via unofficial APIs, with tools to list, create, and manage posts and drafts.-