Indexes and searches Jekyll blog content, enabling tools to search posts by keyword/category/tags, retrieve full post content by slug, compare drafts against published posts to detect duplicates, and list all categories and tags with post counts.
Jekyll MCP Server
A Model Context Protocol (MCP) server that indexes and searches Jekyll blog content, enabling AI assistants like Claude to interact with your blog posts.
Features
Index Jekyll blog posts and drafts with front matter parsing
Search posts by keyword, category, or tags
Retrieve full post content by slug
Compare draft content against published posts to detect duplicates
List all categories and tags with post counts
Support for both Markdown (.md) and AsciiDoc (.adoc) formats
Fast keyword-based search
Installation
Using uv (recommended)
Using pip
From source
Configuration
The server needs to know where your Jekyll blog content is located. There are two ways to configure this:
Option 1: Environment Variables
Set these environment variables before running the server:
Option 2: Run from Jekyll Project Directory
If you run the server from your Jekyll project root (where _posts and _drafts directories exist), it will automatically detect them.
Usage
With Claude Code
Add to your Claude Code MCP configuration:
Then restart Claude Code. The server will start automatically when needed.
Manual Launch
Create a launch script (see examples/launch-server.sh):
Make it executable and run:
Available MCP Tools
Once connected, the server provides these tools to AI assistants:
search_posts
Search for blog posts by keyword, category, or tags.
Parameters:
query(string, optional): Search term to find in title, content, or slugcategory(string, optional): Filter by categorytags(string, optional): Comma-separated list of tagslimit(number, optional): Maximum results (default: 10)
Example:
get_post
Retrieve full content of a specific post by slug.
Parameters:
slug(string, required): The post slug
Example:
list_categories
List all blog categories with post counts.
Example:
list_tags
List all blog tags with post counts.
Example:
compare_draft
Compare draft content against published posts to find similar content (helps avoid duplicate posts).
Parameters:
draft_content(string, required): The draft text to comparelimit(number, optional): Maximum similar posts to return (default: 5)
Example:
Example Workflow
Here's how you might use this with Claude Code:
Before writing a new post:
Search my posts for "AI writing process"Check if you've covered a topic:
Have I written about MCP servers before?Prevent duplicate content:
Compare this draft against my published posts: [paste draft]Retrieve existing content:
Get the full content of my post "working-with-the-machine"Analyze your blog:
What categories do I write about most?
Reindexing Content
The server indexes content on startup. After publishing new posts or making significant changes:
Stop the server (if running standalone)
Restart it to refresh the index
With Claude Code, the server restarts automatically when needed.
Development
Setup
Running Tests
Project Structure
Requirements
Python 3.10 or higher
Jekyll blog with standard
_postsdirectory structurePosts with YAML front matter
License
MIT License - see LICENSE file for details.
Contributing
Contributions welcome! Please feel free to submit a Pull Request.
Acknowledgments
Built using the Model Context Protocol by Anthropic.
Created with assistance from Claude Code.