
cms mcp
A Content Management System (CMS) with Model Context Protocol (MCP) integration
Repository Info
About This Server
A Content Management System (CMS) with Model Context Protocol (MCP) integration
Model Context Protocol (MCP) - This server can be integrated with AI applications to provide additional context and capabilities, enabling enhanced AI interactions and functionality.
Documentation
CMS-MCP Integration
A Content Management System (CMS) with Model Context Protocol (MCP) integration, providing both REST API and MCP interfaces for managing content, brands, campaigns, and social media publishing.
Features
- Content Management: Create, schedule, and publish content across different brands
- Brand Management: Manage brand identities, guidelines, and social media configurations
- Campaign Planning: Create and manage content campaigns with micro and master plans
- Social Media Integration: Automated publishing to Twitter
- Dual Interface:
- REST API for traditional web applications
- MCP interface for AI/LLM integration
- Scheduled Publishing: Automated content publishing based on schedules
- Swagger Documentation: Comprehensive API documentation
Architecture
The system consists of several key components:
- REST API Server: Express.js based API with Swagger documentation
- MCP Server: Model Context Protocol server for AI/LLM integration
- Scheduler Service: Handles automated content publishing
- Twitter Service: Manages Twitter integration and publishing
- MongoDB Database: Stores all system data
Prerequisites
- Node.js 23.3.0 or higher
- Docker and Docker Compose
- MongoDB 6.0 or higher
- Twitter API credentials (for social media integration)
Installation
- Clone the repository:
git clone <repository-url>
cd cms-mcp
- Install dependencies:
npm install
- Create a
.envfile with the following variables:
MONGODB_URI=mongodb://localhost:27017/cms-mcp
SCHEDULER_INTERVAL=60000
API_PORT=3000
TWITTER_USERNAME=your_username
TWITTER_PASSWORD=your_password
TWITTER_EMAIL=your_email
Running the System
There are multiple ways to run the CMS-MCP system depending on your needs:
Complete System with Docker
To run the entire application (API server, scheduler, and MongoDB) in development mode:
docker-compose -f docker-compose-dev.yml up --build
For production:
docker-compose up --build
This will:
- Start MongoDB in a container
- Start the API server (main entry point in
src/index.ts) - Start the scheduler service
- Expose the API on port 3000
Run API Server Only
If you already have MongoDB running, you can start just the API server:
npm run build
npm start
This executes the main entry point (src/index.ts), which starts the API server and scheduler.
Run MCP Server Using Claude Desktop
The MCP server can now be run directly from Claude Desktop:
- Make sure the main Docker container with MongoDB is already running:
docker-compose up
- Create a
.env.mcpfile in the project root (optional, will fall back to.envif not found):
MONGODB_URI=mongodb://localhost:27017/cms-mcp
NODE_ENV=development
TWITTER_USERNAME=your_username
TWITTER_PASSWORD=your_password
TWITTER_EMAIL=your_email
- Run the MCP server script from Claude Desktop:
npm run build
node dist/mcp/index.js
The MCP server (src/mcp/index.ts) connects to the same MongoDB instance but runs independently from the API server.
Run MCP Server In Docker (Standalone)
You can also run the MCP server in its own Docker container:
cd src/mcp
docker-compose -f docker-compose.mcp.yml up --build
Note: This setup requires MongoDB. You can either:
- Use the MongoDB from the main docker-compose setup
- Uncomment the MongoDB service in
docker-compose.mcp.ymlto run it alongside the MCP server
API Documentation
Once the application is running, access the Swagger documentation at:
http://localhost:3000/api-docs
API Endpoints
Brands
GET /api/v1/brands- List all brandsGET /api/v1/brands/:id- Get brand by IDPOST /api/v1/brands- Create new brandPUT /api/v1/brands/:id- Update brand
Campaigns
GET /api/v1/campaigns- List all campaignsGET /api/v1/campaigns/:id- Get campaign by IDPOST /api/v1/campaigns- Create new campaignPUT /api/v1/campaigns/:id- Update campaign
Plans
GET /api/v1/plans- List all plansGET /api/v1/plans/:id- Get plan by IDPOST /api/v1/plans- Create new planPUT /api/v1/plans/:id- Update plan
Content
GET /api/v1/content- List all contentGET /api/v1/content/:id- Get content by IDPOST /api/v1/content- Create new contentPUT /api/v1/content/:id- Update content
MCP Tools
The system provides several MCP tools for AI/LLM integration:
Brand Tools
createBrand- Create a new brandgetBrand- Retrieve brand detailsgetAllBrands- List all brandsupdateBrandGuidelines- Update brand content guidelines
Content Tools
createContent- Create new contentgetContent- Retrieve content detailsscheduleContent- Schedule content for publishingapproveContent- Approves contentpublishContent- Publish content immediately
Campaign Tools
createCampaign- Create a new campaigngetCampaign- Retrieve campaign detailslistCampaigns- Lists all campaignsudpdateCampaign- Updates a specified campaignaddPlanToCampaign- Add a plan to a campaign
Plan Tools
createPlan- Create a new plangetPlan- Retrieve plan detailsaddContentToPlan- Add content to a plan
Twitter Tools
getUserTweets- Retrieve tweets from a specified Twitter user's timelinegetTweetById- Retrieve a specific tweet by its IDgetUserTimeline- Retrieve tweets from the authenticated user's home timelinesearchTweets- Search for tweets matching a specific querysendTweet- Post a new tweet, optionally as a reply to another tweetsendTweetWithPoll- Post a new tweet with a poll attachedlikeTweet- Like a specific tweetretweet- Retweet a specific tweetquoteTweet- Quote a specific tweet with additional textgetUserProfile- Retrieve a Twitter user's profile informationfollowUser- Follow a specific Twitter usergetFollowers- Retrieve a list of followers for a specific Twitter usergetFollowing- Retrieve a list of users that a specific Twitter user is followinggetUserMentions- Retrieve tweets that mention the authenticated userpublishToTwitter- Publish a content item directly to Twitter
Database Schema
Brand
{
_id: string;
name: string;
description: string;
guidelines?: {
tone: string[];
vocabulary: string[];
avoidedTerms: string[];
visualIdentity?: {
primaryColor?: string;
secondaryColor?: string;
};
narratives?: {
elevatorPitch?: string;
shortNarrative?: string;
fullNarrative?: string;
};
keyMessages?: Array<{
audienceSegment: string;
message: string;
}>;
};
created_at: Date;
updated_at: Date;
}
Content
{
_id: string;
microPlanId?: string;
brandId?: string;
title: string;
content: string;
state: "draft" | "ready" | "published";
format?: string;
platform?: string;
mediaRequirements?: {
type: string;
description: string;
};
targetAudience?: string;
keywords?: string[];
publishedMetadata?: {
url?: string;
postId?: string;
platformSpecificData?: Record<string, any>;
};
stateMetadata: {
updatedAt: Date;
updatedBy: string;
comments?: string;
scheduledFor?: Date;
publishedAt?: Date;
publishedUrl?: string;
};
created_at: Date;
updated_at: Date;
}
Campaign
{
_id: string;
brandId: string;
name: string;
description?: string;
objectives?: string[];
startDate: Date;
endDate: Date;
goals?: Array<{
type: string;
description: string;
priority: number;
kpis: Array<{
metric: string;
target: number;
}>;
completionCriteria?: string;
}>;
audience?: Array<{
segment: string;
characteristics: string[];
painPoints: string[];
}>;
contentMix?: Array<{
category: string;
ratio: number;
platforms: Array<{
name: string;
format: string;
}>;
}>;
majorMilestones?: Array<{
date: Date;
description: string;
status: "pending" | "completed";
}>;
status: "draft" | "active" | "completed" | "archived";
stateMetadata?: {
updatedAt: Date;
updatedBy: string;
comments?: string;
};
created_at: Date;
updated_at: Date;
}
Plan
{
_id: string;
title: string;
type: "master" | "micro";
dateRange: {
start: Date;
end: Date;
};
goals: string[];
targetAudience: string;
channels: string[];
state: "draft" | "review" | "approved" | "active";
stateMetadata: {
version: number;
updatedAt: Date;
updatedBy: string;
comments?: string;
};
isActive: boolean;
// Master Plan specific fields (when type is "master")
campaignId?: string;
planGoals?: Array<{
campaignGoalId: string;
description: string;
metrics: Array<{
name: string;
target: number;
}>;
}>;
contentStrategy?: {
approach: string;
keyThemes: string[];
distribution: Record<string, number>;
};
timeline?: Array<{
date: Date;
description: string;
type: string;
status: "pending" | "in-progress" | "completed";
}>;
// Micro Plan specific fields (when type is "micro")
masterPlanId?: string;
contentSeries?: {
name?: string;
description?: string;
expectedPieces?: number;
theme?: string;
};
performanceMetrics?: Array<{
metricName: string;
target: number;
actual?: number;
}>;
created_at: Date;
updated_at: Date;
}
Contributing
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
License
[Add your license information here]
Quick Start
Clone the repository
git clone https://github.com/theo-nash/cms-mcpInstall dependencies
cd cms-mcp
npm installFollow the documentation
Check the repository's README.md file for specific installation and usage instructions.
Repository Details
Recommended MCP Servers
Discord MCP
Enable AI assistants to seamlessly interact with Discord servers, channels, and messages.
Knit MCP
Connect AI agents to 200+ SaaS applications and automate workflows.
Apify MCP Server
Deploy and interact with Apify actors for web scraping and data extraction.
BrowserStack MCP
BrowserStack MCP Server for automated testing across multiple browsers.
Zapier MCP
A Zapier server that provides automation capabilities for various apps.