Skip to main content
Glama
SEOToolDefinitions.ts10.6 kB
/** * SEO Tool Definitions for MCP Registration * * Defines all SEO-related tools with their schemas, descriptions, * and handler functions for the Model Context Protocol. * * @since 2.7.0 */ import type { Tool } from "@modelcontextprotocol/sdk/types.js"; /** * Analyze content for SEO optimization opportunities */ export const analyzeContentTool: Tool = { name: "wp_seo_analyze_content", description: "Analyze WordPress post content for SEO optimization opportunities including readability, keyword density, structure, and technical factors", inputSchema: { type: "object", properties: { postId: { type: "number", description: "WordPress post ID to analyze", }, analysisType: { type: "string", enum: ["readability", "keywords", "structure", "full"], description: "Type of SEO analysis to perform (default: full)", }, focusKeywords: { type: "array", items: { type: "string" }, description: "Primary keywords to analyze for optimization", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["postId"], }, }; /** * Generate optimized metadata for posts */ export const generateMetadataTool: Tool = { name: "wp_seo_generate_metadata", description: "Generate SEO-optimized metadata including title tags, meta descriptions, OpenGraph, and Twitter Card data", inputSchema: { type: "object", properties: { postId: { type: "number", description: "WordPress post ID", }, title: { type: "string", description: "Custom title to optimize (optional, uses post title if not provided)", }, description: { type: "string", description: "Custom description to optimize (optional, uses excerpt if not provided)", }, focusKeyword: { type: "string", description: "Primary keyword to include in metadata", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["postId"], }, }; /** * Bulk update metadata for multiple posts */ export const bulkUpdateMetadataTool: Tool = { name: "wp_seo_bulk_update_metadata", description: "Update SEO metadata for multiple posts with progress tracking and error handling", inputSchema: { type: "object", properties: { postIds: { type: "array", items: { type: "number" }, description: "Array of WordPress post IDs to update", }, updates: { type: "object", properties: { title: { type: "string" }, description: { type: "string" }, focusKeyword: { type: "string" }, canonical: { type: "string" }, }, description: "Metadata fields to update for all posts", }, dryRun: { type: "boolean", description: "Perform a dry run without making actual changes", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["postIds", "updates"], }, }; /** * Generate structured data schema markup */ export const generateSchemaTool: Tool = { name: "wp_seo_generate_schema", description: "Generate JSON-LD structured data schema for enhanced search results", inputSchema: { type: "object", properties: { postId: { type: "number", description: "WordPress post ID", }, schemaType: { type: "string", enum: [ "Article", "Product", "FAQ", "HowTo", "Organization", "Website", "BreadcrumbList", "Event", "Recipe", "Course", "LocalBusiness", "Person", "Review", "VideoObject", ], description: "Type of schema.org structured data to generate", }, customData: { type: "object", description: "Additional custom data for the schema", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["postId", "schemaType"], }, }; /** * Validate schema markup */ export const validateSchemaTool: Tool = { name: "wp_seo_validate_schema", description: "Validate JSON-LD schema markup for correctness and compliance", inputSchema: { type: "object", properties: { schema: { type: "object", description: "JSON-LD schema object to validate", }, schemaType: { type: "string", description: "Expected schema type for validation", }, useGoogleValidator: { type: "boolean", description: "Use Google's Rich Results Test API for validation", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["schema"], }, }; /** * Suggest internal linking opportunities */ export const suggestInternalLinksTool: Tool = { name: "wp_seo_suggest_internal_links", description: "Analyze content and suggest relevant internal linking opportunities for better SEO", inputSchema: { type: "object", properties: { postId: { type: "number", description: "WordPress post ID to analyze for linking opportunities", }, maxSuggestions: { type: "number", description: "Maximum number of link suggestions (default: 5)", }, minimumRelevance: { type: "number", description: "Minimum relevance score (0-100) for suggestions", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["postId"], }, }; /** * Perform comprehensive site audit */ export const performSiteAuditTool: Tool = { name: "wp_seo_site_audit", description: "Perform comprehensive SEO audit of the WordPress site including technical, content, and performance analysis", inputSchema: { type: "object", properties: { auditType: { type: "string", enum: ["technical", "content", "performance", "full"], description: "Type of audit to perform (default: full)", }, maxPages: { type: "number", description: "Maximum number of pages to audit (default: 100)", }, includeExternalLinks: { type: "boolean", description: "Include external link validation in audit", }, force: { type: "boolean", description: "Force refresh, bypassing cached audit results", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: [], }, }; /** * Track SERP positions */ export const trackSERPPositionsTool: Tool = { name: "wp_seo_track_serp", description: "Track search engine result page positions for target keywords", inputSchema: { type: "object", properties: { keywords: { type: "array", items: { type: "string" }, description: "Keywords to track positions for", }, url: { type: "string", description: "Specific URL to track (optional, uses site home if not provided)", }, searchEngine: { type: "string", enum: ["google", "bing", "yahoo"], description: "Search engine to track positions on", }, location: { type: "string", description: "Geographic location for localized results", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["keywords"], }, }; /** * Keyword research and suggestions */ export const keywordResearchTool: Tool = { name: "wp_seo_keyword_research", description: "Research keywords and get suggestions based on topic and competition analysis", inputSchema: { type: "object", properties: { seedKeyword: { type: "string", description: "Seed keyword or topic to research", }, includeVariations: { type: "boolean", description: "Include keyword variations and long-tail keywords", }, includeQuestions: { type: "boolean", description: "Include question-based keywords", }, maxResults: { type: "number", description: "Maximum number of keyword suggestions", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["seedKeyword"], }, }; /** * Test SEO integration with WordPress */ export const testSEOIntegrationTool: Tool = { name: "wp_seo_test_integration", description: "Test SEO plugin integration and detect available SEO plugins on the WordPress site", inputSchema: { type: "object", properties: { checkPlugins: { type: "boolean", description: "Check which SEO plugins are installed and active", }, testMetadataAccess: { type: "boolean", description: "Test ability to read/write SEO metadata", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: [], }, }; /** * Get live SEO data from WordPress */ export const getLiveSEODataTool: Tool = { name: "wp_seo_get_live_data", description: "Retrieve live SEO data from WordPress including plugin-specific metadata and configurations", inputSchema: { type: "object", properties: { postId: { type: "number", description: "WordPress post ID to get SEO data for", }, includeAnalysis: { type: "boolean", description: "Include SEO analysis of the live data", }, includeRecommendations: { type: "boolean", description: "Include optimization recommendations", }, site: { type: "string", description: "Site identifier for multi-site setups", }, }, required: ["postId"], }, }; /** * Export all SEO tool definitions */ export const seoToolDefinitions: Tool[] = [ analyzeContentTool, generateMetadataTool, bulkUpdateMetadataTool, generateSchemaTool, validateSchemaTool, suggestInternalLinksTool, performSiteAuditTool, trackSERPPositionsTool, keywordResearchTool, testSEOIntegrationTool, getLiveSEODataTool, ]; export default seoToolDefinitions;

Implementation Reference

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/docdyhr/mcp-wordpress'

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