
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
npx @wix/mcp
Run locally with:
npx /Users/absolute/path/to/repo/dir/.
Or directly with Node:
node /Users/absolute/path/to/build/bin-standalone.js
Enable specific standard tools (all enabled by default):
--tools=WDS,REST,SDK,WIX_HEADLESS,BUILD_APPS,VELO,BUSINESS_SOLUTIONS
Enable experimental tools (disabled by default):
--experimental=WIX_API,CLI_COMMAND,GET_TO_KNOW_WIX,VELO_README,WIX_API_THROUGH_FS
Specify CLI mode:
--cli=wix-one
Set logging output:
--logger=mcp (default, logs to MCP server)--logger=file (logs to ~/wix-mcp-log.txt)Standard Tools:
WDS: Wix Design System Documentation (SearchWixWDSDocumentation)REST: Wix REST API Documentation (SearchWixRESTDocumentation)SDK: Wix SDK Documentation (SearchWixSDKDocumentation)BUILD_APPS: Build Apps Documentation (SearchBuildAppsDocumentation)WIX_HEADLESS: Wix Headless Documentation (SearchWixHeadlessDocumentation)VELO: Velo Documentation (SearchWixVeloDocumentation)BUSINESS_SOLUTIONS: Business solutions recipes (WixBusinessFlowsDocumentation)CLI: Wix CLI Documentation (SearchWixCLIDocumentation)Experimental Tools:
WIX_API: Wix API tools (CallWixSiteAPI) using provided --wixAuthorization tokenCLI_COMMAND: CLI commands for Wix apps (RunWixCliCommand)GET_TO_KNOW_WIX: Enables WixREADME and adjusts docs tools to depend on itVELO_README: Provides Velo-specific project context (VeloREADME)WIX_API_THROUGH_FS: Adds CallWixSiteAPI authenticated via local Wix CLI filesExperimental tools are in early development and may have limited functionality or breaking changes. They must be explicitly enabled with
--experimental.
The Toolkit API lets you use @wix/mcp tools in-process without running an MCP server. This is the recommended approach for AI agent integrations (Vercel AI SDK, LangChain, custom agent loops, etc.).
import { createWixToolkit, extractText } from '@wix/mcp';
const toolkit = createWixToolkit({
auth: {
siteToken: async (siteId) => ({ Authorization: `Bearer ${myToken}` }),
accountToken: async () => ({ Authorization: `Bearer ${myToken}` }),
},
docs: { tools: ['REST'], getToKnowWixEnabled: true },
api: { tools: ['CallWixSiteAPI'] },
defaults: { siteId: 'my-site-id' },
clientName: 'my-app',
});
// Get all tools as plain objects
for (const tool of toolkit.getTools()) {
console.log(tool.name, tool.description);
console.log(tool.inputSchema); // Zod schema
}
// Execute a tool
const result = await toolkit.getTool('SearchWixRESTDocumentation')!
.execute({ searchTerm: 'query products', reason: 'find endpoint' });
console.log(extractText(result));
// Pre-load WixREADME content for system prompt injection
const readme = await toolkit.preloadReadme();
createWixToolkit(options)Returns a WixToolkit with the following methods:
| Method | Returns | Description |
|---|---|---|
getTools() | WixTool[] | All registered tools |
getTool(name) | WixTool | undefined | Look up a tool by name |
getToolNames() | string[] | List of tool names |
preloadReadme() | Promise<string | null> | Pre-load WixREADME content |
| Option | Type | Description |
|---|---|---|
auth | WixToolkitAuth | Required. Auth headers for API calls. Either { siteToken, accountToken } functions or a full McpAuthenticationStrategy. |
docs | WixToolkitDocsConfig | Docs tools config. tools selects sources ('REST', 'SDK', etc.). getToKnowWixEnabled: true enables WixREADME. |
api | WixToolkitApiConfig | API tools config. tools selects which API tools to register ('CallWixSiteAPI', 'ListWixSites', 'ManageWixSite'). |
defaults | Record<string, any> | Values to hide from tool schemas and auto-inject at execute time. Commonly used for siteId. |
exclude | string[] | Tool names to filter out after registration. |
clientName | string | Consumer identifier for BI tracking. |
hooks | WixToolkitHooks | Lifecycle callbacks for observability (see below). |
WixTool InterfaceEach tool returned by getTools() has:
interface WixTool {
name: string; // e.g. 'CallWixSiteAPI'
description: string; // LLM-facing description
inputSchema: z.ZodObject<any>; // Zod schema for parameters
annotations?: ToolAnnotations; // MCP annotations (readOnlyHint, etc.)
execute(args: Record<string, any>): Promise<CallToolResult>;
}
defaults — Hiding and Injecting ParametersUse defaults to remove fields from tool schemas and auto-inject values at execute time. This is how you handle parameters the LLM shouldn't control (e.g., siteId):
const toolkit = createWixToolkit({
auth: { ... },
api: { tools: ['CallWixSiteAPI'] },
defaults: { siteId: 'my-site-id' },
});
// CallWixSiteAPI schema no longer has siteId — the LLM won't see it
// When execute() is called, siteId is automatically merged into args
const tool = toolkit.getTool('CallWixSiteAPI')!;
await tool.execute({ url: 'https://...', method: 'GET', reason: '...' });
// internally calls the API with { siteId: 'my-site-id', url: '...', method: 'GET', ... }
const toolkit = createWixToolkit({
// ...
hooks: {
beforeExecute: (toolName, args) => {
console.log(`[${toolName}] starting`, args);
},
afterExecute: (toolName, result, durationMs) => {
console.log(`[${toolName}] done in ${durationMs}ms`, result.isError ? 'ERROR' : 'OK');
},
onError: (toolName, error, durationMs) => {
console.error(`[${toolName}] threw after ${durationMs}ms`, error);
},
},
});
Hooks are separate from the library's internal Panorama/BI telemetry, which runs automatically.
extractText(result)Helper to extract text content from a CallToolResult:
import { extractText } from '@wix/mcp';
const result = await tool.execute({ searchTerm: 'products' });
const text = extractText(result); // concatenated text blocks, non-text filtered out
import { createWixToolkit, extractText } from '@wix/mcp';
import { tool } from 'ai';
import { zodToJsonSchema } from 'zod-to-json-schema';
const toolkit = createWixToolkit({ auth: { ... }, docs: { tools: ['REST'] } });
// Convert WixTools to Vercel AI SDK tools
const aiTools = Object.fromEntries(
toolkit.getTools().map(t => [
t.name,
tool({
description: t.description,
parameters: t.inputSchema,
execute: async (args) => extractText(await t.execute(args)),
}),
])
);
The resource feature provides access to Wix documentation via the MCP server:
Resources use the wix-docs:// URI scheme, which maps to Wix Docs URLs:
https://dev.wix.com/docs/...wix-docs://...To load all docs from a portal:
--portals=<docs-portal-name>
See: https://docs.cursor.com/context/model-context-protocol
~/.cursor/mcp.json){
"mcpServers": {
"wix-local-mcp": {
"command": "npx",
"args": ["-y", "@wix/mcp"]
}
}
}
{
"mcpServers": {
"wix-local-mcp": {
"command": "npx",
"args": ["/Users/absolute/path/to/repo/dir/."]
}
}
}
{
"mcpServers": {
"wix-local-mcp": {
"command": "node",
"args": ["/Users/absolute/path/to/build/bin-standalone.js"]
}
}
}
MCP usage analytics and BI events can be viewed in the BI catalog:
-y and the correct npm registryindex.ts directly"wix-mcp-remote-prod": {
"command": "npx",
"args": ["-y", "@wix/mcp-remote", "https://mcp.wix.com/sse"],
"env": {
"PATH": "<path-to-your-nvm-node-version>/bin"
}
}
{
"mcpServers": {
"wix-mcp-remote-prod": {
"command": "sh",
"args": [
"-c",
"eval $(fnm env) && npx -y @wix/mcp-remote https://mcp.wix.com/sse"
]
}
}
}
Node 20 is required to build.
FAQs
A Model Context Protocol server for Wix AI tools
We found that @wix/mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 22 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.