npm package: @mtane0412/ghost-mcp-server
Description: Ghost MCP Server for interacting with Ghost CMS API
Author: mtane0412
Latest version: 1.0.2

# Ghost MCP Server

A Model Context Protocol (MCP) server that integrates with the Ghost Admin API. This server enables programmatic access to Ghost CMS features including post management, page management, member management, and more.

## Features

- Post Management (create, read, update, delete, search)
- Page Management (create, read, update, delete)
- Tag Management
- Author Management
- Member Management (create, read, update, delete, search)
- Image Upload Support

## Prerequisites

- Node.js (v18 or higher recommended)
- Ghost CMS instance
- Ghost Admin API key

## Installation

Install the package using npm:

```bash
npm install @mtane0412/ghost-mcp-server
```

## Configuration

1. Create a new custom integration in your Ghost Admin dashboard under Settings > Integrations.

2. Set the following environment variables:

```bash
# macOS/Linux
export GHOST_URL="https://your-ghost-blog.com"
export GHOST_ADMIN_API_KEY="your_admin_api_key"

# Windows (PowerShell)
$env:GHOST_URL="https://your-ghost-blog.com"
$env:GHOST_ADMIN_API_KEY="your_admin_api_key"
```

Alternatively, you can create a `.env` file:

```env
GHOST_URL=https://your-ghost-blog.com
GHOST_ADMIN_API_KEY=your_admin_api_key
```

## Usage

After installation, start the server with:

```bash
npx @mtane0412/ghost-mcp-server
```

## Available Tools

### get_posts
Retrieves a list of blog posts.

Input:
```json
{
  "limit": "number", // Optional: Number of posts to retrieve (1-100, default: 10)
  "page": "number"   // Optional: Page number (default: 1)
}
```

### get_post
Retrieves a specific post by ID.

Input:
```json
{
  "id": "string" // Required: Post ID
}
```

### search_posts
Searches for posts.

Input:
```json
{
  "query": "string", // Required: Search query
  "limit": "number"  // Optional: Number of posts to retrieve (1-100, default: 10)
}
```

### create_post
Creates a new post.

Input:
```json
{
  "title": "string",     // Required: Post title
  "html": "string",      // Optional: HTML content
  "lexical": "string",   // Optional: Lexical content
  "status": "string",    // Optional: Post status (published/draft/scheduled)
  "visibility": "string" // Optional: Visibility level (public/members/paid/tiers)
}
```

### update_post
Updates an existing post.

Input:
```json
{
  "id": "string",       // Required: Post ID
  "title": "string",    // Optional: Post title
  "html": "string",     // Optional: HTML content
  "lexical": "string",  // Optional: Lexical content
  "status": "string"    // Optional: Post status
}
```

### delete_post
Deletes a post.

Input:
```json
{
  "id": "string" // Required: Post ID
}
```

### get_pages
Retrieves a list of pages.

Input:
```json
{
  "limit": "number",     // Optional: Number of pages to retrieve (1-100, default: 10)
  "page": "number",      // Optional: Page number (default: 1)
  "order": "string",     // Optional: Sort order
  "formats": ["string"], // Optional: Content formats (html/mobiledoc/lexical)
  "include": ["string"]  // Optional: Related data to include (authors/tags)
}
```

### get_members
Retrieves a list of members.

Input:
```json
{
  "limit": "number",     // Optional: Number of members to retrieve (1-100, default: 10)
  "page": "number",      // Optional: Page number (default: 1)
  "order": "string",     // Optional: Sort order
  "include": ["string"]  // Optional: Related data to include (labels/newsletters)
}
```

### search_members
Searches for members.

Input:
```json
{
  "query": "string",     // Required: Search query
  "limit": "number",     // Optional: Number of members to retrieve (1-100, default: 10)
  "include": ["string"]  // Optional: Related data to include (labels/newsletters)
}
```

### upload_image
Uploads an image.

Input:
```json
{
  "file": "string",   // Required: Base64 encoded image data
  "purpose": "string" // Optional: Image purpose (image/profile_image/icon)
}
```

### Debugging

Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector), which is available as a package script:

```bash
npm run inspect
```

The Inspector will provide a URL to access debugging tools in your browser.

## License

MIT License