Skip to content
SocialHelper
Join waitlist

Ghost data, from one API.

Connect Ghost once, then run its reports and lookups from your code or your AI agent through one REST API and MCP server.

Live Connects with credentials 6 tools

Tools

Ghost tools.

Call them with POST /api/v1/accounts/{id}/tools/{tool}, or let your agent use list_account_tools and run_account_tool over MCP. Results come back straight away.

site_info

read-only

Describe the Ghost site: its title, description, URL and Ghost version, how many posts are published, drafted and scheduled, and how many members it has (just the number, when the key may read members).

list_posts

read-only

List the site's posts with their ID, title, status, URL, dates, excerpt, tag names and feature image, plus pagination. Ghost lists scheduled posts first, then drafts, then published posts, newest first.

status string
Which posts to list. all | draft | published | scheduled default: 'all'
search string
Only posts whose title contains this text.
filter string
An extra Ghost NQL filter, e.g. "tag:news" or "featured:true" (https://docs.ghost.org/content-api/filtering).
limit integer
How many to return per page (1–100). default: 15
page integer
Which page of results, starting at 1. default: 1

get_post

read-only

Read one post, with its HTML and the same details list_posts gives.

id* string
The post's ID, from list_posts or create_post.

create_post

makes changes

Write a new post from HTML. It is saved as a draft unless status says otherwise: "published" puts it live on the site now, "scheduled" publishes it at published_at. Posts are never emailed to newsletter subscribers. Returns the post's ID, status, URL and updated_at.

title* string
The post's title.
html* string
The post's content as HTML, up to 200,000 characters. Ghost converts it to its editor format, which may change some markup; wrap it in <!--kg-card-begin: html--> and <!--kg-card-end: html--> to keep it exactly as written.
status string
"draft" to save it unpublished, "published" to publish it now, or "scheduled" to publish it at published_at. draft | published | scheduled default: 'draft'
published_at string
When the post is or was published: an ISO 8601 date and time with a timezone, e.g. 2026-10-12T09:00:00Z. Needed to schedule a post, and then in the future.
tags array<string>
Tag names. Tags that don't exist yet are created.
custom_excerpt string
A short summary shown instead of the automatic excerpt.
feature_image string
The URL of the image shown at the top of the post.
slug string
The post's URL slug, e.g. "my-first-post". Ghost makes one from the title if there is none.
visibility string
Who can read it: "public", "members" (signed-in members) or "paid" (paying members). Left out of a new post, Ghost uses the site's default. public | members | paid

update_post

makes changes

Change an existing post. Anything left out stays as it is. Setting status publishes ("published"), schedules ("scheduled") or unpublishes ("draft") it. Posts are never emailed: publishing or scheduling a post set up in Ghost Admin to be emailed is refused. Returns the post's ID, status, URL and updated_at.

id* string
The post's ID, from list_posts or create_post.
updated_at string
The post's updated_at as you last read it. Ghost refuses the change if the post was edited since. Left out, the latest is fetched first.
title string
A new title.
html string
New content as HTML, up to 200,000 characters, replacing the current content. Ghost converts it to its editor format; wrap it in <!--kg-card-begin: html--> and <!--kg-card-end: html--> to keep it exactly as written.
status string
"draft" to unpublish it, "published" to publish it now, or "scheduled" to publish it at published_at. draft | published | scheduled
published_at string
When the post is or was published: an ISO 8601 date and time with a timezone, e.g. 2026-10-12T09:00:00Z. Needed to schedule a post, and then in the future.
tags array<string>
Tag names, replacing all of the post's tags ([] removes them). Tags that don't exist yet are created.
custom_excerpt string
A short summary shown instead of the automatic excerpt.
feature_image string
The URL of the image shown at the top of the post.
slug string
The post's URL slug, e.g. "my-first-post". Ghost makes one from the title if there is none.
visibility string
Who can read it: "public", "members" (signed-in members) or "paid" (paying members). Left out of a new post, Ghost uses the site's default. public | members | paid

list_tags

read-only

List the site's tags with their ID, name, slug, visibility ("internal" for #hidden tags) and how many posts use each, plus pagination.

limit integer
How many to return per page (1–100). default: 15
page integer
Which page of results, starting at 1. default: 1

Connect

Connect Ghost once.

Open Accounts in the SocialHelper dashboard and choose Ghost. The connect form asks for the details below, and explains where to find each one.

Admin API URL
In Ghost Admin, open Settings → Integrations → Add custom integration, name it SocialHelper and save. Copy the API URL it shows: your site’s address, such as https://example.ghost.io.
Admin API key
From the same integration, copy the Admin API key (not the Content API key). It is an ID, a colon, then a long code.

SocialHelper calls Ghost’s official API for you. Ghost API reference ↗

FAQ

Ghost questions.

Do I need my own Ghost developer app?

No. You paste these from your own Ghost account into the connect form: admin api url, admin api key.

Can my AI agent use Ghost?

Yes. Connect the SocialHelper MCP server at https://socialhelper.app/mcp and your agent can list and run Ghost’s tools.

How much does it cost?

SocialHelper is free during early access, Ghost included.

Ship your Ghost integration today.

SocialHelper is invite-only during early access. Join the waitlist: the first 100 people to sign up get a Founding account with higher limits, free for 12 months.