Share

Ghost 블로그를 관리하는 pi 익스텐션 소개

Ghost 블로그를 다루는 pi 익스텐션

이번에 만든 익스텐션은 Ghost 블로그의 글을 읽고, 찾고, 쓰고, 수정하고, 삭제할 수 있게 해줍니다. 단순한 조회 도구가 아니라, 블로그 운영 흐름 전체를 pi 안에서 이어서 처리할 수 있다는 점이 핵심입니다.

무엇을 할 수 있나

  • ghost_list_posts: 글 목록 조회
  • ghost_search_posts: 제목, 슬러그, 요약, 본문 기준 검색
  • ghost_get_post: 특정 글 조회
  • ghost_create_post: 새 글 작성
  • ghost_update_post: 기존 글 수정
  • ghost_delete_post: 글 삭제

동작 방식

이 익스텐션은 Ghost Admin API를 사용합니다. 설정 파일 .pi/ghost-blog.json에 사이트 주소와 API 키를 넣으면, 내부에서 JWT를 만들어 인증한 뒤 Ghost API를 호출합니다.

코드 소개

핵심은 pi에 도구를 등록하고, 각 도구가 Ghost API를 호출하도록 연결하는 부분입니다.

pi.registerTool({
  name: "ghost_list_posts",
  label: "Ghost 글 목록",
  description: "Ghost 블로그 글 목록을 가져옵니다.",
  execute: async (_toolCallId, params, signal) => {
    const config = await loadConfig();
    const result = await browsePosts(config, signal, { limit: params.limit });
    return {
      content: [{ type: "text", text: result.posts.length ? "..." : "글이 없습니다." }],
      details: result,
    };
  },
});

설정 파일은 아래처럼 둡니다.

{
  "siteUrl": "https://example.com",
  "apiKey": "id:secret",
  "apiVersion": "v6.0",
  "defaultLimit": 15
}

인증은 Admin API key로 JWT를 만들어 처리합니다. 즉, 별도 로그인 없이 익스텐션이 Ghost 관리 API를 직접 호출합니다.

왜 Admin API인가

읽기 전용 공개 글만 다루는 경우에는 Content API도 선택지가 될 수 있습니다. 하지만 이 익스텐션은 작성, 수정, 삭제까지 포함하므로 Admin API 하나로 통일하는 편이 더 단순하고 관리하기 좋습니다.

사용할 때의 장점

  • 글을 찾고 수정하는 작업을 한 곳에서 처리할 수 있습니다.
  • 검색과 목록 조회를 함께 제공해 운영 편의성이 좋습니다.
  • 삭제 전 확인을 거쳐 실수 가능성을 줄였습니다.
  • HTML 또는 Lexical 기반 본문을 모두 다룰 수 있습니다.

정리

이 익스텐션은 Ghost 블로그 운영을 자동화하고, 글 관리 작업을 pi 안으로 가져오기 위한 도구입니다. 앞으로 블로그 글을 자주 다루는 환경이라면 꽤 유용하게 쓸 수 있습니다.

Subscribe to yubikiri

Sign up now to get access to the library of members-only issues.
[email protected]
Subscribe