Skip to main content
Glama
extract-wordpress-content.ts2.38 kB
import { z } from 'zod'; import { WordPressClient } from '../clients/wordpress-client.js'; import { segmentContent } from '../services/content-analyzer.js'; import { logger } from '../services/logger.js'; import { WordPressContent, MCPError } from '../types/index.js'; const inputSchema = z.object({ siteUrl: z.string().url(), pathPattern: z.string().optional(), maxPages: z.number().int().positive().max(50).optional(), }); export const extractWordpressSchema = { type: 'object', properties: { siteUrl: { type: 'string', format: 'uri', description: 'Base URL of the WordPress site' }, pathPattern: { type: 'string', description: 'Regex to filter WordPress page and post URLs', }, maxPages: { type: 'integer', minimum: 1, maximum: 50, description: 'Maximum number of pages to fetch with pagination', }, }, required: ['siteUrl'], }; export type ExtractWordpressInput = z.infer<typeof inputSchema>; export const extractWordPressContent = async ( input: unknown, ): Promise<{ result?: WordPressContent; error?: MCPError }> => { const parsed = inputSchema.safeParse(input); if (!parsed.success) { return { error: { source: 'system', message: parsed.error.message } }; } try { let pattern: RegExp | undefined; if (parsed.data.pathPattern) { try { pattern = new RegExp(parsed.data.pathPattern); } catch (regexError) { return { error: { source: 'system', message: 'Invalid pathPattern regex provided', details: regexError, }, }; } } const client = new WordPressClient({ siteUrl: parsed.data.siteUrl, apiKey: process.env.WORDPRESS_API_KEY, oauthToken: process.env.WORDPRESS_OAUTH_TOKEN, maxPages: parsed.data.maxPages ?? (Number(process.env.MAX_PAGES_PER_REQUEST) || 5), }); const content = await client.fetchContent(pattern); content.pages = content.pages.map((page) => ({ ...page, pageType: page.pageType || segmentContent(page.title, page.contentText)[0]?.pageType, })); return { result: content }; } catch (error: any) { logger.error('extractWordPressContent failed', { error }); return { error: { source: 'wordpress', message: error?.message || 'Unknown WordPress error', }, }; } };

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/seovimalraj/locations'

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