UNPKG

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
#!/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); });