myaidev-method
Version:
Comprehensive development framework with SPARC methodology for AI-assisted software development, multi-platform publishing (WordPress, PayloadCMS, Astro, Docusaurus, Mintlify), and Coolify deployment
182 lines (161 loc) • 4.61 kB
JavaScript
#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import fetch from "node-fetch";
import dotenv from "dotenv";
// Load environment variables
dotenv.config();
// WordPress API configuration from environment
const WORDPRESS_URL = process.env.WORDPRESS_URL;
const WORDPRESS_USERNAME = process.env.WORDPRESS_USERNAME;
const WORDPRESS_APP_PASSWORD = process.env.WORDPRESS_APP_PASSWORD;
// Validate environment variables
if (!WORDPRESS_URL || !WORDPRESS_USERNAME || !WORDPRESS_APP_PASSWORD) {
console.error("Missing required environment variables: WORDPRESS_URL, WORDPRESS_USERNAME, WORDPRESS_APP_PASSWORD");
process.exit(1);
}
// Create MCP server
const server = new McpServer({
name: "wordpress-mcp-server",
version: "2.0.0",
description: "Enhanced WordPress MCP Server with session management"
});
// Simple WordPress API helper
async function wordpressRequest(endpoint, method = 'GET', data = null) {
const baseUrl = WORDPRESS_URL.replace(/\/$/, '');
const apiPath = '/wp-json/wp/v2';
const auth = Buffer.from(`${WORDPRESS_USERNAME}:${WORDPRESS_APP_PASSWORD}`).toString('base64');
const options = {
method,
headers: {
'Authorization': `Basic ${auth}`,
'Content-Type': 'application/json'
}
};
if (data && method !== 'GET') {
options.body = JSON.stringify(data);
}
const response = await fetch(`${baseUrl}${apiPath}${endpoint}`, options);
if (!response.ok) {
const error = await response.text();
throw new Error(`WordPress API Error: ${response.status} - ${error}`);
}
return response.json();
}
// Health check tool
server.registerTool("wp_health_check", {
title: "WordPress Health Check",
description: "Check WordPress API connectivity",
inputSchema: {
type: "object",
properties: {},
additionalProperties: false
}
}, async (params) => {
try {
// Test basic API connectivity
const response = await wordpressRequest('/');
return {
content: [{
type: "text",
text: JSON.stringify({
success: true,
message: "WordPress API is responding",
site_url: WORDPRESS_URL,
server_version: "2.0.0"
}, null, 2)
}]
};
} catch (error) {
return {
content: [{
type: "text",
text: JSON.stringify({
success: false,
error: error.message
}, null, 2)
}]
};
}
});
// Create post tool
server.registerTool("wp_create_post", {
title: "Create WordPress Post",
description: "Create a new WordPress post",
inputSchema: {
type: "object",
properties: {
title: {
type: "string",
description: "Post title"
},
content: {
type: "string",
description: "Post content"
},
status: {
type: "string",
enum: ["draft", "publish", "private"],
description: "Post status",
default: "draft"
},
excerpt: {
type: "string",
description: "Post excerpt"
}
},
required: ["title", "content"],
additionalProperties: false
}
}, async (params) => {
try {
const postData = {
title: params.title,
content: params.content,
status: params.status || 'draft'
};
if (params.excerpt) {
postData.excerpt = params.excerpt;
}
const post = await wordpressRequest('/posts', 'POST', postData);
return {
content: [{
type: "text",
text: JSON.stringify({
success: true,
post_id: post.id,
post_url: post.link,
edit_url: `${WORDPRESS_URL.replace(/\/$/, '')}/wp-admin/post.php?post=${post.id}&action=edit`,
status: post.status,
message: "Post created successfully"
}, null, 2)
}]
};
} catch (error) {
return {
content: [{
type: "text",
text: JSON.stringify({
success: false,
error: error.message
}, null, 2)
}]
};
}
});
// Start the MCP server
async function main() {
try {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Enhanced WordPress MCP Server v2.0.0 running...");
console.error(`Connected to WordPress site: ${WORDPRESS_URL}`);
} catch (error) {
console.error("Failed to start server:", error.message);
process.exit(1);
}
}
main().catch((error) => {
console.error("Server startup error:", error);
process.exit(1);
});