Github-Oauth MCP Server
# 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