Skip to main content
Glama
wordpress-tools.ts12.8 kB
// WordPress MCP Tools import { z } from 'zod'; import { WordPressService } from '../services/wordpress/wordpress-service.js'; import { logger } from '../utils/logger.js'; export function createWordPressTools(wpService: WordPressService) { const tools: any[] = []; // ========== POSTS TOOLS ========== tools.push({ name: 'get_posts', description: 'Retrieve WordPress posts with optional filtering', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of posts to retrieve (default: 10)', default: 10 }, status: { type: 'string', description: 'Post status (publish, draft, private, etc.)', default: 'publish' }, search: { type: 'string', description: 'Search term to filter posts' }, author: { type: 'number', description: 'Filter by author ID' } } }, handler: async (args: any) => { const result = await wpService.posts.listPosts(args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'get_post', description: 'Get a specific WordPress post by ID', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Post ID to retrieve' } }, required: ['id'] }, handler: async (args: any) => { const result = await wpService.posts.getPost(args.id); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'create_post', description: 'Create a new WordPress post', inputSchema: { type: 'object', properties: { title: { type: 'string', description: 'Post title' }, content: { type: 'string', description: 'Post content (HTML)' }, status: { type: 'string', description: 'Post status (draft, publish, private)', default: 'draft' }, excerpt: { type: 'string', description: 'Post excerpt' }, categories: { type: 'array', items: { type: 'number' }, description: 'Array of category IDs' }, tags: { type: 'array', items: { type: 'number' }, description: 'Array of tag IDs' } }, required: ['title', 'content'] }, handler: async (args: any) => { const result = await wpService.posts.createPost(args); return { content: [{ type: 'text', text: `Post created successfully with ID: ${result.id}` }] }; } }); tools.push({ name: 'update_post', description: 'Update an existing WordPress post', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Post ID to update' }, title: { type: 'string', description: 'Post title' }, content: { type: 'string', description: 'Post content (HTML)' }, status: { type: 'string', description: 'Post status' }, excerpt: { type: 'string', description: 'Post excerpt' } }, required: ['id'] }, handler: async (args: any) => { const result = await wpService.posts.updatePost(args); return { content: [{ type: 'text', text: `Post ${args.id} updated successfully` }] }; } }); // ========== PAGES TOOLS ========== tools.push({ name: 'get_pages', description: 'Retrieve WordPress pages', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of pages to retrieve (default: 10)', default: 10 }, status: { type: 'string', description: 'Page status (publish, draft, private, etc.)', default: 'publish' } } }, handler: async (args: any) => { const result = await wpService.pages.listPages(args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'create_page', description: 'Create a new WordPress page', inputSchema: { type: 'object', properties: { title: { type: 'string', description: 'Page title' }, content: { type: 'string', description: 'Page content (HTML)', default: '' }, status: { type: 'string', description: 'Page status (draft, publish, private)', default: 'draft' }, parent: { type: 'number', description: 'Parent page ID' } }, required: ['title'] }, handler: async (args: any) => { const result = await wpService.pages.createPage(args); return { content: [{ type: 'text', text: `Page created successfully with ID: ${result.id}` }] }; } }); tools.push({ name: 'update_page', description: 'Update an existing WordPress page', inputSchema: { type: 'object', properties: { id: { type: 'number', description: 'Page ID to update' }, title: { type: 'string', description: 'Page title' }, content: { type: 'string', description: 'Page content (HTML)' }, status: { type: 'string', description: 'Page status' } }, required: ['id'] }, handler: async (args: any) => { const result = await wpService.pages.updatePage(args); return { content: [{ type: 'text', text: `Page ${args.id} updated successfully` }] }; } }); // ========== MEDIA TOOLS ========== tools.push({ name: 'get_media', description: 'Get WordPress media library items', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of media items to retrieve (default: 10)', default: 10 }, media_type: { type: 'string', description: 'Filter by media type (image, video, audio)' } } }, handler: async (args: any) => { const result = await wpService.media.getMedia(args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'upload_media', description: 'Upload media file to WordPress', inputSchema: { type: 'object', properties: { file_path: { type: 'string', description: 'Path to the file to upload' }, title: { type: 'string', description: 'Media title' }, alt_text: { type: 'string', description: 'Alternative text for images' } }, required: ['file_path'] }, handler: async (args: any) => { const result = await wpService.media.uploadMedia(args.file_path, { title: args.title, alt_text: args.alt_text }); return { content: [{ type: 'text', text: `Media uploaded successfully. ID: ${result.id}, URL: ${result.source_url}` }] }; } }); tools.push({ name: 'list_all_content', description: 'List all posts and pages with their IDs and Elementor status', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of items per type (default: 50)', default: 50 }, include_all_statuses: { type: 'boolean', description: 'Include draft, private content (default: false)', default: false } } }, handler: async (args: any) => { const result = await wpService.pages.listAllContent( args.per_page || 50, args.include_all_statuses || false ); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); // ========== USER MANAGEMENT ========== tools.push({ name: 'get_users', description: 'Get WordPress users', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of users (default: 10)', default: 10 }, roles: { type: 'array', items: { type: 'string' }, description: 'Filter by user roles' } } }, handler: async (args: any) => { const result = await wpService.users.listUsers(args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'create_user', description: 'Create a new WordPress user', inputSchema: { type: 'object', properties: { username: { type: 'string', description: 'Username' }, email: { type: 'string', description: 'Email address' }, password: { type: 'string', description: 'Password' }, roles: { type: 'array', items: { type: 'string' }, description: 'User roles' } }, required: ['username', 'email', 'password'] }, handler: async (args: any) => { const result = await wpService.users.createUser(args); return { content: [{ type: 'text', text: `User created successfully with ID: ${result.id}` }] }; } }); // ========== TAXONOMY TOOLS ========== tools.push({ name: 'get_categories', description: 'Get WordPress categories', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of categories (default: 10)', default: 10 } } }, handler: async (args: any) => { const result = await wpService.taxonomy.listCategories(args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'create_category', description: 'Create a new category', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Category name' }, description: { type: 'string', description: 'Category description' }, parent: { type: 'number', description: 'Parent category ID' } }, required: ['name'] }, handler: async (args: any) => { const result = await wpService.taxonomy.createCategory(args); return { content: [{ type: 'text', text: `Category created successfully with ID: ${result.id}` }] }; } }); tools.push({ name: 'get_tags', description: 'Get WordPress tags', inputSchema: { type: 'object', properties: { per_page: { type: 'number', description: 'Number of tags (default: 10)', default: 10 } } }, handler: async (args: any) => { const result = await wpService.taxonomy.listTags(args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } }); tools.push({ name: 'create_tag', description: 'Create a new tag', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Tag name' }, description: { type: 'string', description: 'Tag description' } }, required: ['name'] }, handler: async (args: any) => { const result = await wpService.taxonomy.createTag(args); return { content: [{ type: 'text', text: `Tag created successfully with ID: ${result.id}` }] }; } }); return tools; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mbrown1837/Ultimate-Elementor-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server