@pressmaticai/wp-mcp-bridge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,10 @@
1
+ # @pressmaticai/wp-mcp-bridge
2
+
3
+ Run Pressmatic MCP over stdio with no helper files.
4
+
5
+ ```bash
6
+ npx -y @pressmaticai/wp-mcp-bridge connect --site-id SITE_ID --bridge-url https://bridge-url --token MCP_ACCESS_TOKEN
7
+ ```
8
+
9
+ Use this command directly in MCP client config under `command: npx` + `args`.
10
+
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.js ADDED
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
+ import { z } from "zod";
7
+ function parseArgs(argv) {
8
+ const command = argv[2];
9
+ if (command !== "connect") {
10
+ throw new Error("Usage: npx @pressmaticai/wp-mcp-bridge connect --site-id SITE_ID --bridge-url URL --token TOKEN");
11
+ }
12
+ const get = (flag) => {
13
+ const index = argv.indexOf(flag);
14
+ const value = index >= 0 ? argv[index + 1] : void 0;
15
+ if (!value) {
16
+ throw new Error(`Missing required argument ${flag}`);
17
+ }
18
+ return value;
19
+ };
20
+ return {
21
+ siteId: get("--site-id"),
22
+ bridgeUrl: get("--bridge-url"),
23
+ token: get("--token")
24
+ };
25
+ }
26
+ async function forwardTool(args, tool, input) {
27
+ const url = `${args.bridgeUrl.replace(/\/$/, "")}/mcp/${args.siteId}/tools`;
28
+ const res = await fetch(url, {
29
+ method: "POST",
30
+ headers: {
31
+ "Content-Type": "application/json",
32
+ Authorization: `Bearer ${args.token}`
33
+ },
34
+ body: JSON.stringify({ tool, input })
35
+ });
36
+ const json = await res.json();
37
+ if (!res.ok || json.ok === false) {
38
+ throw new Error(json.error ?? `Bridge returned ${res.status}`);
39
+ }
40
+ return json.data ?? {};
41
+ }
42
+ function registerTool(server, args, tool, description, inputSchema) {
43
+ server.registerTool(
44
+ tool,
45
+ {
46
+ description,
47
+ inputSchema: inputSchema ?? {}
48
+ },
49
+ async (input = {}) => {
50
+ const data = await forwardTool(args, tool, input);
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: JSON.stringify(data, null, 2)
56
+ }
57
+ ],
58
+ structuredContent: data
59
+ };
60
+ }
61
+ );
62
+ }
63
+ async function main() {
64
+ const args = parseArgs(process.argv);
65
+ const server = new McpServer({
66
+ name: "pressmatic-wordpress-bridge-client",
67
+ version: "0.1.0"
68
+ });
69
+ registerTool(server, args, "site.health", "Check WordPress health");
70
+ registerTool(server, args, "site.context", "Fetch site context");
71
+ registerTool(server, args, "builders.detect", "Detect available builders");
72
+ registerTool(server, args, "builders.capabilities", "Get builder capabilities", { builder_key: z.string() });
73
+ registerTool(server, args, "skills.list", "List builder-aware skills", { builder_key: z.string().optional() });
74
+ registerTool(server, args, "page.create", "Create page using native builder elements", {
75
+ builder_key: z.string().optional(),
76
+ prompt: z.string().optional(),
77
+ plan: z.record(z.any()).optional(),
78
+ native_structure: z.record(z.any()).optional(),
79
+ strict_mode: z.boolean().optional(),
80
+ status: z.string().optional()
81
+ });
82
+ registerTool(server, args, "page.update", "Update existing page", {
83
+ builder_key: z.string().optional(),
84
+ page_id: z.string(),
85
+ data: z.record(z.any()).optional()
86
+ });
87
+ registerTool(server, args, "page.read", "Read page structure", { builder_key: z.string().optional(), page_id: z.string() });
88
+ registerTool(server, args, "page.validate", "Validate structure purity", {
89
+ builder_key: z.string().optional(),
90
+ structure: z.record(z.any()),
91
+ strict_mode: z.boolean().optional()
92
+ });
93
+ registerTool(server, args, "page.publish", "Publish or keep draft", {
94
+ builder_key: z.string().optional(),
95
+ page_id: z.string(),
96
+ publish: z.boolean().optional()
97
+ });
98
+ registerTool(server, args, "media.upload", "Upload media", {
99
+ file_name: z.string(),
100
+ mime_type: z.string(),
101
+ file_base64: z.string()
102
+ });
103
+ registerTool(server, args, "media.search", "Search media", { query: z.string() });
104
+ registerTool(server, args, "theme.get_context", "Get theme context");
105
+ registerTool(server, args, "design.plan_from_prompt", "Create design plan from prompt", { prompt: z.string() });
106
+ registerTool(server, args, "design.plan_from_mockup", "Create design plan from mockup description", {
107
+ mockup_description: z.string()
108
+ });
109
+ registerTool(server, args, "design.apply", "Apply plan into native structure", {
110
+ builder_key: z.string().optional(),
111
+ plan: z.record(z.any()),
112
+ strict_mode: z.boolean().optional()
113
+ });
114
+ registerTool(server, args, "design.audit", "Audit design fidelity", { page_id: z.string().optional() });
115
+ registerTool(server, args, "design.fix", "Fix layout issues", {
116
+ page_id: z.string().optional(),
117
+ issues: z.array(z.string()).optional()
118
+ });
119
+ registerTool(server, args, "design.return_preview_url", "Return preview URL", { page_id: z.string() });
120
+ const transport = new StdioServerTransport();
121
+ await server.connect(transport);
122
+ }
123
+ main().catch((error) => {
124
+ console.error(error instanceof Error ? error.message : error);
125
+ process.exit(1);
126
+ });
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@pressmaticai/wp-mcp-bridge",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Pressmatic MCP connector for WordPress design bridge",
6
+ "bin": {
7
+ "wp-mcp-bridge": "dist/cli.js"
8
+ },
9
+ "main": "dist/cli.js",
10
+ "types": "dist/cli.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "dev": "tsx src/cli.ts",
16
+ "build": "tsup src/cli.ts --format esm --dts",
17
+ "lint": "eslint src --ext .ts",
18
+ "typecheck": "tsc -p tsconfig.json --noEmit",
19
+ "format": "prettier --write \"src/**/*.ts\""
20
+ },
21
+ "dependencies": {
22
+ "@modelcontextprotocol/sdk": "^1.22.0",
23
+ "zod": "^3.25.76"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^20.19.41",
27
+ "tsup": "^8.5.0",
28
+ "tsx": "^4.20.3",
29
+ "typescript": "^5.9.3"
30
+ }
31
+ }
32
+