{"_id":"@elementor/wp-search-mcp","_rev":"5-aaf8614cf6f9b7f580b71e23e7ad37f3","name":"@elementor/wp-search-mcp","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@elementor/wp-search-mcp","version":"1.0.0","keywords":[],"license":"MIT","_id":"@elementor/wp-search-mcp@1.0.0","maintainers":[{"name":"kingyes","email":"yakir@elementor.com"},{"name":"mati1000","email":"mati@elementor.com"},{"name":"nevoss","email":"nevog@elementor.com"},{"name":"chene","email":"chene@elementor.com"},{"name":"cloud-devops","email":"cloud-devops@elementor.com"}],"homepage":"https://github.com/elementor/angie-mcp-utils#readme","bugs":{"url":"https://github.com/elementor/angie-mcp-utils/issues"},"dist":{"shasum":"b5c64123c6619a59a130340494ad75b275169afe","tarball":"https://registry.npmjs.org/@elementor/wp-search-mcp/-/wp-search-mcp-1.0.0.tgz","fileCount":21,"integrity":"sha512-VCRKoAOuGB00KwVp93ohQrfqdGj5/AC+eUlFsG+KUYFgIkS0hONPeI0RSy1LqpkyEep0CdXInjLGy2IqrzBCMg==","signatures":[{"sig":"MEUCIGRJm/u9FGP8BdPP40O7WQVPd9HksgOndSJQwqt55YxzAiEAskCpgv5V/JiOvOh6bv/cV4bRwB/8ZXpcXLQt7rFIKTo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":716864},"main":"./dist/index.js","type":"module","_from":"file:elementor-wp-search-mcp-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"build":"pnpm run build:ui && tsc --build tsconfig.lib.json && pnpm run embed:ui","build:ui":"INPUT=src/lib/apps/response-app.html vite build --config vite.ui.config.ts","embed:ui":"node scripts/embed-response-app-html.mjs"},"_npmUser":{"name":"cloud-devops","email":"cloud-devops@elementor.com"},"_resolved":"/tmp/fdea3f4e7b6b9641551a7ae2672def9b/elementor-wp-search-mcp-1.0.0.tgz","_integrity":"sha512-VCRKoAOuGB00KwVp93ohQrfqdGj5/AC+eUlFsG+KUYFgIkS0hONPeI0RSy1LqpkyEep0CdXInjLGy2IqrzBCMg==","repository":{"url":"git+https://github.com/elementor/angie-mcp-utils.git","type":"git"},"_npmVersion":"10.9.8","description":"Configurable WordPress REST search MCP server with search, read, and response tools","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.25.76","tslib":"^2.3.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"^1.7.4"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","marked":"^17.0.0","dompurify":"^3.3.0","vite-plugin-singlefile":"^2.3.3"},"peerDependencies":{"vite":"^5.0.0 || ^6.0.0 || ^7.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/wp-search-mcp_1.0.0_1781710881037_0.6078080060381756","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@elementor/wp-search-mcp","version":"1.1.0","keywords":[],"license":"MIT","_id":"@elementor/wp-search-mcp@1.1.0","maintainers":[{"name":"kingyes","email":"yakir@elementor.com"},{"name":"mati1000","email":"mati@elementor.com"},{"name":"nevoss","email":"nevog@elementor.com"},{"name":"chene","email":"chene@elementor.com"},{"name":"cloud-devops","email":"cloud-devops@elementor.com"}],"dist":{"shasum":"afe14296205656b53aa5b15dd4fe67f6000e9627","tarball":"https://registry.npmjs.org/@elementor/wp-search-mcp/-/wp-search-mcp-1.1.0.tgz","fileCount":21,"integrity":"sha512-Yixa3ZxJACNA7hbCIikHXNfFU/ovUR+WITHAk1fdMNVU5PiJ6bawe/cLk+kLmBgkV1/9dnwzR5+MEPhkIB1TNA==","signatures":[{"sig":"MEYCIQCSgUWeKxrBh9KjhnJJSNBfAVlfsfGn/clH9Yd7eSu9ewIhANIampDw19XOlVHI9uJUCO+HeI0vdqVxVEGUds//ckML","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718517},"main":"./dist/index.js","type":"module","_from":"file:elementor-wp-search-mcp-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"pnpm run build:ui && tsc --build tsconfig.lib.json && pnpm run embed:ui","build:ui":"INPUT=src/lib/apps/response-app.html vite build --config vite.ui.config.ts","embed:ui":"node scripts/embed-response-app-html.mjs"},"_npmUser":{"name":"cloud-devops","email":"cloud-devops@elementor.com"},"_resolved":"/tmp/661720236e210439a6dda15f9cd4c36e/elementor-wp-search-mcp-1.1.0.tgz","_integrity":"sha512-Yixa3ZxJACNA7hbCIikHXNfFU/ovUR+WITHAk1fdMNVU5PiJ6bawe/cLk+kLmBgkV1/9dnwzR5+MEPhkIB1TNA==","_npmVersion":"10.9.8","description":"Configurable WordPress REST search MCP server with search, read, and response tools","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.25.76","tslib":"^2.3.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"^1.7.4"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","marked":"^17.0.0","dompurify":"^3.3.0","vite-plugin-singlefile":"^2.3.3"},"peerDependencies":{"vite":"^5.0.0 || ^6.0.0 || ^7.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/wp-search-mcp_1.1.0_1781791132418_0.41217953281473907","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@elementor/wp-search-mcp","version":"1.1.1","keywords":[],"license":"MIT","_id":"@elementor/wp-search-mcp@1.1.1","maintainers":[{"name":"kingyes","email":"yakir@elementor.com"},{"name":"mati1000","email":"mati@elementor.com"},{"name":"nevoss","email":"nevog@elementor.com"},{"name":"chene","email":"chene@elementor.com"},{"name":"cloud-devops","email":"cloud-devops@elementor.com"}],"dist":{"shasum":"959a4122a7b47cde5aef5ccbb3682f3b3005a158","tarball":"https://registry.npmjs.org/@elementor/wp-search-mcp/-/wp-search-mcp-1.1.1.tgz","fileCount":21,"integrity":"sha512-2q6woPe2HaNs0E33njmURUw2FhMd40XQU39LwB7YXyZp2DIDgN1/2rh6ytIpjp2F6nyfm+tx+DjRRcWea08gsg==","signatures":[{"sig":"MEYCIQDu7LpP2pPS3yapagsBNgFfEtf7cHfu9bKKr8gkfNT6ngIhANcyiaJkPf4cCxnhY3AvQV/XbGbx+yyQDwgDisuaZUoa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719179},"main":"./dist/index.js","type":"module","_from":"file:elementor-wp-search-mcp-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"pnpm run build:ui && tsc --build tsconfig.lib.json && pnpm run embed:ui","build:ui":"INPUT=src/lib/apps/response-app.html vite build --config vite.ui.config.ts","embed:ui":"node scripts/embed-response-app-html.mjs"},"_npmUser":{"name":"cloud-devops","email":"cloud-devops@elementor.com"},"_resolved":"/tmp/1b812ce49e8239f044ef16e9fe1fdd7a/elementor-wp-search-mcp-1.1.1.tgz","_integrity":"sha512-2q6woPe2HaNs0E33njmURUw2FhMd40XQU39LwB7YXyZp2DIDgN1/2rh6ytIpjp2F6nyfm+tx+DjRRcWea08gsg==","_npmVersion":"10.9.8","description":"Configurable WordPress REST search MCP server with search, read, and response tools","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.76","tslib":"^2.3.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"^1.7.4"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","marked":"^17.0.0","dompurify":"^3.3.0","vite-plugin-singlefile":"^2.3.3"},"peerDependencies":{"vite":"^5.0.0 || ^6.0.0 || ^7.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/wp-search-mcp_1.1.1_1785064434650_0.9902645712251381","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@elementor/wp-search-mcp","version":"1.2.0","keywords":[],"license":"MIT","_id":"@elementor/wp-search-mcp@1.2.0","maintainers":[{"name":"kingyes","email":"yakir@elementor.com"},{"name":"mati1000","email":"mati@elementor.com"},{"name":"nevoss","email":"nevog@elementor.com"},{"name":"chene","email":"chene@elementor.com"},{"name":"cloud-devops","email":"cloud-devops@elementor.com"}],"dist":{"shasum":"07c48f18e8c31d68551505cc201a784a857ed9e7","tarball":"https://registry.npmjs.org/@elementor/wp-search-mcp/-/wp-search-mcp-1.2.0.tgz","fileCount":21,"integrity":"sha512-+3Q1AMfupI+mHXy2iNi22OxMGj6LX+MU+dO+02pKvBlWrMTAo6mX2KuxQRKwA/2WAqBguxVAaSCYs1VYq/36Bg==","signatures":[{"sig":"MEQCIHUao14hetd7+nd1w7lfEOt8l5J67bc61K+f3FV/uvJkAiBIem4svqM+xyuJEkFh+pliBnziteDSj452ioXDVWo/MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":721221},"main":"./dist/index.js","type":"module","_from":"file:elementor-wp-search-mcp-1.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"pnpm run build:ui && tsc --build tsconfig.lib.json && pnpm run embed:ui","build:ui":"INPUT=src/lib/apps/response-app.html vite build --config vite.ui.config.ts","embed:ui":"node scripts/embed-response-app-html.mjs"},"_npmUser":{"name":"cloud-devops","email":"cloud-devops@elementor.com"},"_resolved":"/tmp/9a52dc3b77873595f7ab54b46ee650a0/elementor-wp-search-mcp-1.2.0.tgz","_integrity":"sha512-+3Q1AMfupI+mHXy2iNi22OxMGj6LX+MU+dO+02pKvBlWrMTAo6mX2KuxQRKwA/2WAqBguxVAaSCYs1VYq/36Bg==","_npmVersion":"10.9.8","description":"Configurable WordPress REST search MCP server with search, read, and response tools","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.25.76","tslib":"^2.3.0","@modelcontextprotocol/sdk":"1.29.0","@modelcontextprotocol/ext-apps":"^1.7.4"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","marked":"^17.0.0","dompurify":"^3.3.0","vite-plugin-singlefile":"^2.3.3"},"peerDependencies":{"vite":"^5.0.0 || ^6.0.0 || ^7.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/wp-search-mcp_1.2.0_1785073170810_0.18471616358988419","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-06-17T15:41:20.869Z","modified":"2026-09-15T13:13:24.938Z","1.0.0":"2026-06-17T15:41:21.293Z","1.1.0":"2026-06-18T13:58:52.597Z","1.1.1":"2026-07-26T11:13:54.830Z","1.2.0":"2026-07-26T13:39:31.098Z"},"license":"MIT","keywords":[],"description":"Configurable WordPress REST search MCP server with search, read, and response tools","maintainers":[{"email":"yakir@elementor.com","name":"kingyes"},{"email":"mati@elementor.com","name":"mati1000"},{"email":"chene@elementor.com","name":"chene"},{"email":"cloud-devops@elementor.com","name":"cloud-devops"}],"readme":"# @elementor/wp-search-mcp\n\nMCP server that lets AI agents search and read published WordPress content, then render answers in an inline MCP App UI.\n\n## Overview\n\n`WpSearchMcpServer` wraps the WordPress REST API and exposes three MCP tools:\n\n| Tool | Purpose |\n|------|---------|\n| `search` | Find published content by keyword |\n| `read` | Fetch full rendered HTML for selected articles |\n| `response` | Render the final answer in an inline UI card (markdown, media, source links) |\n\nThe server also registers MCP App instructions that guide agents through a `search` → `read` → `response` workflow.\n\n## Requirements\n\n- A WordPress site with the REST API enabled\n- The core `/wp/v2/search` endpoint available for the configured post types\n- An MCP host that supports [MCP Apps](https://github.com/modelcontextprotocol/ext-apps) (required for the `response` tool UI)\n\n## Installation\n\n```bash\nnpm install @elementor/wp-search-mcp\n# or\npnpm add @elementor/wp-search-mcp\n```\n\nPeer dependency: `@modelcontextprotocol/sdk` (installed automatically as a transitive dependency).\n\n## Quick start\n\n```typescript\nimport { WpSearchMcpServer } from '@elementor/wp-search-mcp';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\nconst wpSearch = new WpSearchMcpServer({\n  url: 'https://example.com',\n  server: {\n    name: 'my-wp-search',\n    title: 'My Site Docs',\n  },\n});\n\nconst transport = new StdioServerTransport();\nawait wpSearch.server.connect(transport);\n```\n\nPass `wpSearch.server` to any MCP transport your host uses (stdio, SSE, streamable HTTP, etc.).\n\n## Configuration\n\n```typescript\ntype WpSearchMcpConfig = {\n  /** WordPress site root URL, e.g. https://example.com */\n  url: string;\n  /**\n   * Maps search subtype → REST collection segment.\n   * Defaults to { post: 'posts' }.\n   */\n  postTypes?: Record<string, string>;\n  server?: {\n    name?: string;    // default: 'wp-search'\n    version?: string; // default: '1.0.0'\n    title?: string;   // default: 'WordPress Search'\n  };\n};\n```\n\n### Post types\n\n`postTypes` controls which WordPress content types are searched and how `read` resolves REST paths.\n\n```typescript\nconst wpSearch = new WpSearchMcpServer({\n  url: 'https://example.com',\n  postTypes: {\n    post: 'posts',\n    page: 'pages',\n  },\n});\n```\n\nKeys are passed to `/wp/v2/search` as `subtype[]` values. Values are the REST collection segments used by `/wp/v2/{segment}/{id}`.\n\n## Tools\n\n### `search`\n\nSearches published content using one or more keywords.\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `keywords` | `string[]` | — | 1–3 keyword variations |\n| `perPage` | `number` | `5` | Results per keyword (max 100) |\n\nReturns JSON: `[{ id, title, type }, ...]`\n\n### `read`\n\nFetches full rendered content for up to three articles.\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `articles` | `{ id: number; type: string }[]` | 1–3 articles from search results |\n\nReturns JSON: `[{ title, content, link }, ...]`\n\n`type` must be one of the keys configured in `postTypes`.\n\n### `response`\n\nFinal step in the agent workflow. Renders the answer in an inline MCP App card above the chat.\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `response` | `string` | — | Markdown answer text |\n| `mediaUrls` | `{ url, type }[]` | `[]` | Images, videos, or YouTube embeds |\n| `sourceLinks` | `{ title, url }[]` | `[]` | Attribution links |\n\n`type` for media: `'image' | 'video' | 'youtube'`\n\n## Agent workflow\n\nThe server injects instructions telling agents to:\n\n1. **Search** — derive 2–3 single-word keyword variations from the user's question (translate to English if needed)\n2. **Read** — fetch the 1–3 most relevant articles\n3. **Response** — synthesize an answer with markdown, media URLs, and source links\n\nAfter calling `response`, the agent should reply with one short sentence pointing at the answer card (e.g. \"See the steps above.\").\n\n## License\n\nMIT\n","readmeFilename":"README.md"}