zuckerbot-mcp 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/LICENSE +21 -0
- package/README.md +133 -0
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +83 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/tools.d.ts +4 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +299 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +184 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 DatalisHQ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# zuckerbot-mcp
|
|
2
|
+
|
|
3
|
+
**MCP server for ZuckerBot — let AI agents run Facebook ad campaigns.**
|
|
4
|
+
|
|
5
|
+
Give any MCP-compatible AI agent (Claude Desktop, OpenClaw, Cursor, etc.) the ability to create, launch, optimize, and monitor Meta ad campaigns through natural conversation.
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
### Claude Desktop
|
|
10
|
+
|
|
11
|
+
Add to your `claude_desktop_config.json`:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"mcpServers": {
|
|
16
|
+
"zuckerbot": {
|
|
17
|
+
"command": "npx",
|
|
18
|
+
"args": ["-y", "zuckerbot-mcp"],
|
|
19
|
+
"env": {
|
|
20
|
+
"ZUCKERBOT_API_KEY": "zb_live_your_key_here"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### OpenClaw
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
/skill install zuckerbot
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Or add to your OpenClaw config:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"zuckerbot": {
|
|
39
|
+
"command": "npx",
|
|
40
|
+
"args": ["-y", "zuckerbot-mcp"],
|
|
41
|
+
"env": {
|
|
42
|
+
"ZUCKERBOT_API_KEY": "zb_live_your_key_here"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### npx (standalone)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
ZUCKERBOT_API_KEY=zb_live_your_key_here npx zuckerbot-mcp
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Install globally
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm install -g zuckerbot-mcp
|
|
59
|
+
ZUCKERBOT_API_KEY=zb_live_your_key_here zuckerbot-mcp
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Environment Variables
|
|
63
|
+
|
|
64
|
+
| Variable | Required | Default | Description |
|
|
65
|
+
|----------|----------|---------|-------------|
|
|
66
|
+
| `ZUCKERBOT_API_KEY` | ✅ | — | Your ZuckerBot API key. Get one at [zuckerbot.ai/dashboard](https://zuckerbot.ai/dashboard). |
|
|
67
|
+
| `ZUCKERBOT_API_URL` | — | `https://zuckerbot.ai/api/v1` | API base URL (override for self-hosted or staging). |
|
|
68
|
+
|
|
69
|
+
## Tools
|
|
70
|
+
|
|
71
|
+
| Tool | Description | Required Inputs |
|
|
72
|
+
|------|-------------|-----------------|
|
|
73
|
+
| `zuckerbot_preview_campaign` | Generate ad preview from a URL (no Meta account needed) | `url` |
|
|
74
|
+
| `zuckerbot_create_campaign` | Create full campaign with strategy, targeting, and creatives | `url` |
|
|
75
|
+
| `zuckerbot_launch_campaign` | Launch a draft campaign on Meta (spends real money) | `campaign_id`, `meta_access_token`, `meta_ad_account_id`, `meta_page_id` |
|
|
76
|
+
| `zuckerbot_pause_campaign` | Pause or resume a live campaign | `campaign_id` |
|
|
77
|
+
| `zuckerbot_get_performance` | Get real-time campaign metrics | `campaign_id` |
|
|
78
|
+
| `zuckerbot_sync_conversion` | Send lead conversion feedback to Meta's algorithm | `campaign_id`, `lead_id`, `quality`, `meta_access_token` |
|
|
79
|
+
| `zuckerbot_research_reviews` | Get review intelligence for a business | `business_name` |
|
|
80
|
+
| `zuckerbot_research_competitors` | Analyze competitor ads in a category | `industry`, `location` |
|
|
81
|
+
| `zuckerbot_research_market` | Get market intelligence and ad benchmarks | `industry`, `location` |
|
|
82
|
+
| `zuckerbot_generate_creatives` | Generate ad copy and images independently | `business_name`, `description` |
|
|
83
|
+
|
|
84
|
+
## Example Conversation
|
|
85
|
+
|
|
86
|
+
> **User:** Can you set up Facebook ads for my yoga studio? Website is serenity-yoga.com
|
|
87
|
+
>
|
|
88
|
+
> **Agent:** Let me research your business first…
|
|
89
|
+
> *(calls `zuckerbot_research_reviews` + `zuckerbot_research_competitors` in parallel)*
|
|
90
|
+
>
|
|
91
|
+
> Your studio has a 4.9-star rating with 89 reviews! Customers love the "calming atmosphere" and "expert instructors." Your competitors are running generic discount ads — none mention reviews or instructor credentials. That's your edge.
|
|
92
|
+
>
|
|
93
|
+
> Let me generate a preview of what your ads would look like…
|
|
94
|
+
> *(calls `zuckerbot_preview_campaign`)*
|
|
95
|
+
>
|
|
96
|
+
> Here are two ad concepts:
|
|
97
|
+
> 1. **"4.9 Stars, 89 Reviews"** — Leads with social proof. Your competitors aren't doing this.
|
|
98
|
+
> 2. **"First Class Free"** — Low-commitment offer to get people in the door.
|
|
99
|
+
>
|
|
100
|
+
> Want me to create a full campaign with targeting and budget recommendations?
|
|
101
|
+
>
|
|
102
|
+
> **User:** Yes! Budget is $15/day.
|
|
103
|
+
>
|
|
104
|
+
> *(calls `zuckerbot_create_campaign` → reviews strategy → calls `zuckerbot_launch_campaign` with user's Meta credentials)*
|
|
105
|
+
>
|
|
106
|
+
> **Agent:** Your campaign is live! I'll check performance in 3 days.
|
|
107
|
+
|
|
108
|
+
## Typical Agent Flow
|
|
109
|
+
|
|
110
|
+
1. **Research** → `research_reviews` + `research_competitors` (parallel)
|
|
111
|
+
2. **Preview** → `preview_campaign` (show the user what ads look like)
|
|
112
|
+
3. **Create** → `create_campaign` (full strategy + creatives)
|
|
113
|
+
4. **Launch** → `launch_campaign` (go live on Meta)
|
|
114
|
+
5. **Monitor** → `get_performance` (check metrics periodically)
|
|
115
|
+
6. **Optimize** → `sync_conversion` (feed back lead quality)
|
|
116
|
+
|
|
117
|
+
## Development
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
git clone https://github.com/DatalisHQ/zuckerbot.git
|
|
121
|
+
cd zuckerbot/mcp-server
|
|
122
|
+
npm install
|
|
123
|
+
npm run build
|
|
124
|
+
npm start
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## API Documentation
|
|
128
|
+
|
|
129
|
+
Full API reference: [zuckerbot.ai/docs](https://zuckerbot.ai/docs)
|
|
130
|
+
|
|
131
|
+
## License
|
|
132
|
+
|
|
133
|
+
MIT — see [LICENSE](./LICENSE)
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class ZuckerBotApiError extends Error {
|
|
2
|
+
readonly statusCode: number;
|
|
3
|
+
readonly errorCode: string;
|
|
4
|
+
readonly retryAfter?: number | undefined;
|
|
5
|
+
constructor(statusCode: number, errorCode: string, message: string, retryAfter?: number | undefined);
|
|
6
|
+
}
|
|
7
|
+
export declare class ZuckerBotClient {
|
|
8
|
+
private readonly baseUrl;
|
|
9
|
+
private readonly apiKey;
|
|
10
|
+
private readonly userAgent;
|
|
11
|
+
constructor();
|
|
12
|
+
private headers;
|
|
13
|
+
private handleResponse;
|
|
14
|
+
get(path: string): Promise<unknown>;
|
|
15
|
+
post(path: string, body?: Record<string, unknown>): Promise<unknown>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,qBAAa,iBAAkB,SAAQ,KAAK;aAExB,UAAU,EAAE,MAAM;aAClB,SAAS,EAAE,MAAM;aAEjB,UAAU,CAAC,EAAE,MAAM;gBAHnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;;IAkBnC,OAAO,CAAC,OAAO;YAQD,cAAc;IAgDtB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAS3E"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ── ZuckerBot API Client ─────────────────────────────────────────────
|
|
2
|
+
const VERSION = "0.1.0";
|
|
3
|
+
export class ZuckerBotApiError extends Error {
|
|
4
|
+
statusCode;
|
|
5
|
+
errorCode;
|
|
6
|
+
retryAfter;
|
|
7
|
+
constructor(statusCode, errorCode, message, retryAfter) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.errorCode = errorCode;
|
|
11
|
+
this.retryAfter = retryAfter;
|
|
12
|
+
this.name = "ZuckerBotApiError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class ZuckerBotClient {
|
|
16
|
+
baseUrl;
|
|
17
|
+
apiKey;
|
|
18
|
+
userAgent;
|
|
19
|
+
constructor() {
|
|
20
|
+
this.baseUrl = (process.env.ZUCKERBOT_API_URL || "https://zuckerbot.ai/api/v1").replace(/\/+$/, "");
|
|
21
|
+
const key = process.env.ZUCKERBOT_API_KEY;
|
|
22
|
+
if (!key) {
|
|
23
|
+
throw new Error("ZUCKERBOT_API_KEY environment variable is required. " +
|
|
24
|
+
"Get your API key at https://zuckerbot.ai/dashboard");
|
|
25
|
+
}
|
|
26
|
+
this.apiKey = key;
|
|
27
|
+
this.userAgent = `zuckerbot-mcp/${VERSION}`;
|
|
28
|
+
}
|
|
29
|
+
headers() {
|
|
30
|
+
return {
|
|
31
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
32
|
+
"Content-Type": "application/json",
|
|
33
|
+
"User-Agent": this.userAgent,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async handleResponse(response) {
|
|
37
|
+
const body = await response.text();
|
|
38
|
+
let data;
|
|
39
|
+
try {
|
|
40
|
+
data = JSON.parse(body);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
data = { raw: body };
|
|
44
|
+
}
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
const err = data && typeof data === "object" && "error" in data
|
|
47
|
+
? data.error
|
|
48
|
+
: null;
|
|
49
|
+
const code = err?.code || `http_${response.status}`;
|
|
50
|
+
const message = err?.message || `API request failed with status ${response.status}`;
|
|
51
|
+
const retryAfter = err?.retry_after;
|
|
52
|
+
switch (response.status) {
|
|
53
|
+
case 401:
|
|
54
|
+
throw new ZuckerBotApiError(401, code, `Authentication failed: ${message}. Check your ZUCKERBOT_API_KEY.`);
|
|
55
|
+
case 429:
|
|
56
|
+
throw new ZuckerBotApiError(429, code, `Rate limit exceeded: ${message}${retryAfter ? ` Retry after ${retryAfter}s.` : ""}`, retryAfter);
|
|
57
|
+
case 502:
|
|
58
|
+
throw new ZuckerBotApiError(502, code, `Meta API error: ${message}`);
|
|
59
|
+
default:
|
|
60
|
+
throw new ZuckerBotApiError(response.status, code, message, retryAfter);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return data;
|
|
64
|
+
}
|
|
65
|
+
async get(path) {
|
|
66
|
+
const url = `${this.baseUrl}${path.startsWith("/") ? path : `/${path}`}`;
|
|
67
|
+
const response = await fetch(url, {
|
|
68
|
+
method: "GET",
|
|
69
|
+
headers: this.headers(),
|
|
70
|
+
});
|
|
71
|
+
return this.handleResponse(response);
|
|
72
|
+
}
|
|
73
|
+
async post(path, body) {
|
|
74
|
+
const url = `${this.baseUrl}${path.startsWith("/") ? path : `/${path}`}`;
|
|
75
|
+
const response = await fetch(url, {
|
|
76
|
+
method: "POST",
|
|
77
|
+
headers: this.headers(),
|
|
78
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
79
|
+
});
|
|
80
|
+
return this.handleResponse(response);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ── ZuckerBot MCP Server ─────────────────────────────────────────────
|
|
3
|
+
//
|
|
4
|
+
// Exposes the ZuckerBot API as MCP tools for AI agents.
|
|
5
|
+
// Connect via stdio transport (standard for MCP servers).
|
|
6
|
+
//
|
|
7
|
+
// Environment variables:
|
|
8
|
+
// ZUCKERBOT_API_KEY — Required. Your ZuckerBot API key.
|
|
9
|
+
// ZUCKERBOT_API_URL — Optional. API base URL (default: https://zuckerbot.ai/api/v1)
|
|
10
|
+
//
|
|
11
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
13
|
+
import { ZuckerBotClient } from "./client.js";
|
|
14
|
+
import { registerTools } from "./tools.js";
|
|
15
|
+
async function main() {
|
|
16
|
+
// Initialize the API client (validates ZUCKERBOT_API_KEY)
|
|
17
|
+
const client = new ZuckerBotClient();
|
|
18
|
+
// Create the MCP server
|
|
19
|
+
const server = new McpServer({
|
|
20
|
+
name: "zuckerbot",
|
|
21
|
+
version: "0.1.0",
|
|
22
|
+
});
|
|
23
|
+
// Register all 10 tools
|
|
24
|
+
registerTools(server, client);
|
|
25
|
+
// Connect via stdio
|
|
26
|
+
const transport = new StdioServerTransport();
|
|
27
|
+
await server.connect(transport);
|
|
28
|
+
}
|
|
29
|
+
main().catch((err) => {
|
|
30
|
+
console.error("Fatal error starting ZuckerBot MCP server:", err.message || err);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,wEAAwE;AACxE,EAAE;AACF,wDAAwD;AACxD,0DAA0D;AAC1D,EAAE;AACF,yBAAyB;AACzB,2DAA2D;AAC3D,uFAAuF;AACvF,EAAE;AAEF,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,0DAA0D;IAC1D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAErC,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,wBAAwB;IACxB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,oBAAoB;IACpB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAqB,MAAM,aAAa,CAAC;AAkDjE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAkT9E"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// ── ZuckerBot MCP Tool Definitions ───────────────────────────────────
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { ZuckerBotApiError } from "./client.js";
|
|
4
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
5
|
+
function formatResult(data) {
|
|
6
|
+
return {
|
|
7
|
+
content: [
|
|
8
|
+
{
|
|
9
|
+
type: "text",
|
|
10
|
+
text: JSON.stringify(data, null, 2),
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function formatError(err) {
|
|
16
|
+
if (err instanceof ZuckerBotApiError) {
|
|
17
|
+
return {
|
|
18
|
+
content: [
|
|
19
|
+
{
|
|
20
|
+
type: "text",
|
|
21
|
+
text: JSON.stringify({
|
|
22
|
+
error: true,
|
|
23
|
+
code: err.errorCode,
|
|
24
|
+
status: err.statusCode,
|
|
25
|
+
message: err.message,
|
|
26
|
+
...(err.retryAfter ? { retry_after: err.retryAfter } : {}),
|
|
27
|
+
}, null, 2),
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
isError: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// ── Register all tools ───────────────────────────────────────────────
|
|
44
|
+
export function registerTools(server, client) {
|
|
45
|
+
// ── 1. Preview Campaign ─────────────────────────────────────────
|
|
46
|
+
server.tool("zuckerbot_preview_campaign", "Generate a campaign preview from a business URL. Returns AI-generated ad creatives (headlines, copy, images) without needing a Meta account. Great for showing users what their ads would look like before they commit.", {
|
|
47
|
+
url: z.string().describe("Business website URL to generate ads for"),
|
|
48
|
+
ad_count: z
|
|
49
|
+
.number()
|
|
50
|
+
.int()
|
|
51
|
+
.min(1)
|
|
52
|
+
.max(3)
|
|
53
|
+
.default(2)
|
|
54
|
+
.describe("Number of ad variants to generate (1-3)"),
|
|
55
|
+
}, async ({ url, ad_count }) => {
|
|
56
|
+
try {
|
|
57
|
+
const result = await client.post("/campaigns/preview", {
|
|
58
|
+
url,
|
|
59
|
+
ad_count,
|
|
60
|
+
});
|
|
61
|
+
return formatResult(result);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
return formatError(err);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
// ── 2. Create Campaign ──────────────────────────────────────────
|
|
68
|
+
server.tool("zuckerbot_create_campaign", "Create a full campaign with strategy, targeting, budget recommendations, and ad creatives. Returns a draft campaign ready to launch. Does NOT spend money or touch Meta until you call launch.", {
|
|
69
|
+
url: z.string().describe("Business website URL"),
|
|
70
|
+
business_name: z.string().optional().describe("Business name (auto-detected from URL if omitted)"),
|
|
71
|
+
business_type: z
|
|
72
|
+
.string()
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("Business category (e.g., 'restaurant', 'fitness', 'roofing')"),
|
|
75
|
+
location: z
|
|
76
|
+
.object({
|
|
77
|
+
city: z.string().optional(),
|
|
78
|
+
state: z.string().optional(),
|
|
79
|
+
country: z.string().optional(),
|
|
80
|
+
lat: z.number().optional(),
|
|
81
|
+
lng: z.number().optional(),
|
|
82
|
+
})
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("Business location for geo-targeting"),
|
|
85
|
+
budget_daily_cents: z
|
|
86
|
+
.number()
|
|
87
|
+
.int()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Daily budget in cents (e.g., 2000 = $20/day)"),
|
|
90
|
+
objective: z
|
|
91
|
+
.enum(["leads", "traffic", "awareness"])
|
|
92
|
+
.optional()
|
|
93
|
+
.describe("Campaign objective"),
|
|
94
|
+
}, async ({ url, business_name, business_type, location, budget_daily_cents, objective }) => {
|
|
95
|
+
try {
|
|
96
|
+
const body = { url };
|
|
97
|
+
if (business_name)
|
|
98
|
+
body.business_name = business_name;
|
|
99
|
+
if (business_type)
|
|
100
|
+
body.business_type = business_type;
|
|
101
|
+
if (location)
|
|
102
|
+
body.location = location;
|
|
103
|
+
if (budget_daily_cents !== undefined)
|
|
104
|
+
body.budget_daily_cents = budget_daily_cents;
|
|
105
|
+
if (objective)
|
|
106
|
+
body.objective = objective;
|
|
107
|
+
const result = await client.post("/campaigns/create", body);
|
|
108
|
+
return formatResult(result);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
return formatError(err);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// ── 3. Launch Campaign ──────────────────────────────────────────
|
|
115
|
+
server.tool("zuckerbot_launch_campaign", "Launch a draft campaign on Meta (Facebook/Instagram). This is the money endpoint — it creates real ads on the user's Meta ad account and starts spending their budget. Requires Meta credentials.", {
|
|
116
|
+
campaign_id: z.string().describe("ZuckerBot campaign ID from the create step"),
|
|
117
|
+
meta_access_token: z.string().describe("User's Meta/Facebook access token"),
|
|
118
|
+
meta_ad_account_id: z.string().describe("Meta ad account ID (format: act_XXXXX)"),
|
|
119
|
+
meta_page_id: z.string().describe("Facebook Page ID for the lead form"),
|
|
120
|
+
variant_index: z
|
|
121
|
+
.number()
|
|
122
|
+
.int()
|
|
123
|
+
.default(0)
|
|
124
|
+
.describe("Which creative variant to launch (0-indexed)"),
|
|
125
|
+
daily_budget_cents: z
|
|
126
|
+
.number()
|
|
127
|
+
.int()
|
|
128
|
+
.optional()
|
|
129
|
+
.describe("Override daily budget in cents"),
|
|
130
|
+
radius_km: z.number().int().optional().describe("Override targeting radius in km"),
|
|
131
|
+
}, async ({ campaign_id, meta_access_token, meta_ad_account_id, meta_page_id, variant_index, daily_budget_cents, radius_km, }) => {
|
|
132
|
+
try {
|
|
133
|
+
const body = {
|
|
134
|
+
meta_access_token,
|
|
135
|
+
meta_ad_account_id,
|
|
136
|
+
meta_page_id,
|
|
137
|
+
variant_index,
|
|
138
|
+
};
|
|
139
|
+
if (daily_budget_cents !== undefined)
|
|
140
|
+
body.daily_budget_cents = daily_budget_cents;
|
|
141
|
+
if (radius_km !== undefined)
|
|
142
|
+
body.radius_km = radius_km;
|
|
143
|
+
const result = await client.post(`/campaigns/${campaign_id}/launch`, body);
|
|
144
|
+
return formatResult(result);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
return formatError(err);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
// ── 4. Pause / Resume Campaign ─────────────────────────────────
|
|
151
|
+
server.tool("zuckerbot_pause_campaign", "Pause or resume a running campaign on Meta. Pausing stops ad delivery and spend immediately. Resuming restarts delivery.", {
|
|
152
|
+
campaign_id: z.string().describe("ZuckerBot campaign ID"),
|
|
153
|
+
action: z
|
|
154
|
+
.enum(["pause", "resume"])
|
|
155
|
+
.default("pause")
|
|
156
|
+
.describe("Whether to pause or resume the campaign"),
|
|
157
|
+
}, async ({ campaign_id, action }) => {
|
|
158
|
+
try {
|
|
159
|
+
const result = await client.post(`/campaigns/${campaign_id}/pause`, {
|
|
160
|
+
action,
|
|
161
|
+
});
|
|
162
|
+
return formatResult(result);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
return formatError(err);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
// ── 5. Get Performance ──────────────────────────────────────────
|
|
169
|
+
server.tool("zuckerbot_get_performance", "Get real-time performance metrics for a campaign. Returns impressions, clicks, spend, leads, cost-per-lead, click-through rate, and a performance status (learning/healthy/underperforming/paused).", {
|
|
170
|
+
campaign_id: z.string().describe("ZuckerBot campaign ID"),
|
|
171
|
+
}, async ({ campaign_id }) => {
|
|
172
|
+
try {
|
|
173
|
+
const result = await client.get(`/campaigns/${campaign_id}/performance`);
|
|
174
|
+
return formatResult(result);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
return formatError(err);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
// ── 6. Sync Conversion ─────────────────────────────────────────
|
|
181
|
+
server.tool("zuckerbot_sync_conversion", "Send conversion feedback to Meta's algorithm. When a lead converts (or doesn't), this teaches Meta to find more (or fewer) people like them. Critical for improving lead quality over time.", {
|
|
182
|
+
campaign_id: z.string().describe("ZuckerBot campaign ID"),
|
|
183
|
+
lead_id: z.string().describe("Lead ID to report conversion for"),
|
|
184
|
+
quality: z
|
|
185
|
+
.enum(["good", "bad"])
|
|
186
|
+
.describe("Lead quality: 'good' = converted/contacted, 'bad' = lost/unresponsive"),
|
|
187
|
+
meta_access_token: z.string().describe("User's Meta access token for CAPI"),
|
|
188
|
+
user_data: z
|
|
189
|
+
.object({
|
|
190
|
+
email: z.string().optional(),
|
|
191
|
+
phone: z.string().optional(),
|
|
192
|
+
first_name: z.string().optional(),
|
|
193
|
+
last_name: z.string().optional(),
|
|
194
|
+
})
|
|
195
|
+
.optional()
|
|
196
|
+
.describe("Optional user data to improve match rate"),
|
|
197
|
+
}, async ({ campaign_id, lead_id, quality, meta_access_token, user_data }) => {
|
|
198
|
+
try {
|
|
199
|
+
const body = {
|
|
200
|
+
lead_id,
|
|
201
|
+
quality,
|
|
202
|
+
meta_access_token,
|
|
203
|
+
};
|
|
204
|
+
if (user_data)
|
|
205
|
+
body.user_data = user_data;
|
|
206
|
+
const result = await client.post(`/campaigns/${campaign_id}/conversions`, body);
|
|
207
|
+
return formatResult(result);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
return formatError(err);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
// ── 7. Research Reviews ─────────────────────────────────────────
|
|
214
|
+
server.tool("zuckerbot_research_reviews", "Get review intelligence for a business. Searches Google Reviews, Yelp, and other sources, then synthesizes themes, best quotes, and sentiment. Use this data to inform ad copy.", {
|
|
215
|
+
business_name: z.string().describe("Business name to research"),
|
|
216
|
+
location: z
|
|
217
|
+
.string()
|
|
218
|
+
.optional()
|
|
219
|
+
.describe("City/region for more accurate results (e.g., 'Austin, TX')"),
|
|
220
|
+
}, async ({ business_name, location }) => {
|
|
221
|
+
try {
|
|
222
|
+
const body = { business_name };
|
|
223
|
+
if (location)
|
|
224
|
+
body.location = location;
|
|
225
|
+
const result = await client.post("/research/reviews", body);
|
|
226
|
+
return formatResult(result);
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
return formatError(err);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
// ── 8. Research Competitors ─────────────────────────────────────
|
|
233
|
+
server.tool("zuckerbot_research_competitors", "Analyze competitor ads for a business category and location. Searches Meta Ad Library and web results to find active competitor campaigns, common hooks, and gaps you can exploit.", {
|
|
234
|
+
industry: z.string().describe("Business category (e.g., 'pizza restaurant', 'yoga studio')"),
|
|
235
|
+
location: z.string().describe("City/region (e.g., 'Austin, TX')"),
|
|
236
|
+
country: z
|
|
237
|
+
.string()
|
|
238
|
+
.default("US")
|
|
239
|
+
.describe("Country code (default: US)"),
|
|
240
|
+
}, async ({ industry, location, country }) => {
|
|
241
|
+
try {
|
|
242
|
+
const result = await client.post("/research/competitors", {
|
|
243
|
+
industry,
|
|
244
|
+
location,
|
|
245
|
+
country,
|
|
246
|
+
});
|
|
247
|
+
return formatResult(result);
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
return formatError(err);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
// ── 9. Research Market ──────────────────────────────────────────
|
|
254
|
+
server.tool("zuckerbot_research_market", "Get market intelligence for an industry and location. Returns market size, trends, audience demographics, and advertising benchmarks to inform campaign strategy.", {
|
|
255
|
+
industry: z.string().describe("Industry/business category (e.g., 'fitness', 'dental')"),
|
|
256
|
+
location: z.string().describe("City/region (e.g., 'Austin, TX')"),
|
|
257
|
+
}, async ({ industry, location }) => {
|
|
258
|
+
try {
|
|
259
|
+
const result = await client.post("/research/market", {
|
|
260
|
+
industry,
|
|
261
|
+
location,
|
|
262
|
+
});
|
|
263
|
+
return formatResult(result);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
return formatError(err);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
// ── 10. Generate Creatives ──────────────────────────────────────
|
|
270
|
+
server.tool("zuckerbot_generate_creatives", "Generate ad creatives (copy + images) independently from campaign creation. Useful for refreshing creatives on an existing campaign or generating options to show a user.", {
|
|
271
|
+
business_name: z.string().describe("Business name"),
|
|
272
|
+
description: z.string().describe("Brief description of the business"),
|
|
273
|
+
count: z
|
|
274
|
+
.number()
|
|
275
|
+
.int()
|
|
276
|
+
.min(1)
|
|
277
|
+
.max(5)
|
|
278
|
+
.default(2)
|
|
279
|
+
.describe("Number of creative variants to generate (1-5)"),
|
|
280
|
+
generate_images: z
|
|
281
|
+
.boolean()
|
|
282
|
+
.default(true)
|
|
283
|
+
.describe("Whether to generate AI images (set false for copy-only)"),
|
|
284
|
+
}, async ({ business_name, description, count, generate_images }) => {
|
|
285
|
+
try {
|
|
286
|
+
const result = await client.post("/creatives/generate", {
|
|
287
|
+
business_name,
|
|
288
|
+
description,
|
|
289
|
+
count,
|
|
290
|
+
generate_images,
|
|
291
|
+
});
|
|
292
|
+
return formatResult(result);
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
return formatError(err);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/** Standard API error envelope */
|
|
2
|
+
export interface ApiError {
|
|
3
|
+
error: {
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
retry_after?: number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface PreviewRequest {
|
|
10
|
+
url: string;
|
|
11
|
+
ad_count?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface AdVariant {
|
|
14
|
+
headline: string;
|
|
15
|
+
copy: string;
|
|
16
|
+
rationale: string;
|
|
17
|
+
image_url?: string;
|
|
18
|
+
image_base64?: string;
|
|
19
|
+
cta?: string;
|
|
20
|
+
angle?: string;
|
|
21
|
+
image_prompt?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PreviewResponse {
|
|
24
|
+
id: string;
|
|
25
|
+
business_name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
ads: AdVariant[];
|
|
28
|
+
enrichment?: Record<string, unknown>;
|
|
29
|
+
created_at: string;
|
|
30
|
+
}
|
|
31
|
+
export interface LocationInput {
|
|
32
|
+
city?: string;
|
|
33
|
+
state?: string;
|
|
34
|
+
country?: string;
|
|
35
|
+
lat?: number;
|
|
36
|
+
lng?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface CreateCampaignRequest {
|
|
39
|
+
url: string;
|
|
40
|
+
business_name?: string;
|
|
41
|
+
business_type?: string;
|
|
42
|
+
location?: LocationInput;
|
|
43
|
+
budget_daily_cents?: number;
|
|
44
|
+
objective?: "leads" | "traffic" | "awareness";
|
|
45
|
+
}
|
|
46
|
+
export interface CampaignStrategy {
|
|
47
|
+
objective: string;
|
|
48
|
+
summary: string;
|
|
49
|
+
strengths?: string[];
|
|
50
|
+
opportunities?: string[];
|
|
51
|
+
recommended_daily_budget_cents?: number;
|
|
52
|
+
projected_cpl_cents?: number;
|
|
53
|
+
projected_monthly_leads?: number;
|
|
54
|
+
}
|
|
55
|
+
export interface CampaignTargeting {
|
|
56
|
+
age_min?: number;
|
|
57
|
+
age_max?: number;
|
|
58
|
+
radius_km?: number;
|
|
59
|
+
interests?: string[];
|
|
60
|
+
geo_locations?: Record<string, unknown>;
|
|
61
|
+
publisher_platforms?: string[];
|
|
62
|
+
facebook_positions?: string[];
|
|
63
|
+
instagram_positions?: string[];
|
|
64
|
+
}
|
|
65
|
+
export interface CreateCampaignResponse {
|
|
66
|
+
id: string;
|
|
67
|
+
status: string;
|
|
68
|
+
business_name?: string;
|
|
69
|
+
business_type?: string;
|
|
70
|
+
strategy?: CampaignStrategy;
|
|
71
|
+
targeting?: CampaignTargeting;
|
|
72
|
+
variants?: AdVariant[];
|
|
73
|
+
roadmap?: Record<string, string[]>;
|
|
74
|
+
created_at: string;
|
|
75
|
+
}
|
|
76
|
+
export interface LaunchCampaignRequest {
|
|
77
|
+
campaign_id: string;
|
|
78
|
+
meta_access_token: string;
|
|
79
|
+
meta_ad_account_id: string;
|
|
80
|
+
meta_page_id: string;
|
|
81
|
+
variant_index?: number;
|
|
82
|
+
daily_budget_cents?: number;
|
|
83
|
+
radius_km?: number;
|
|
84
|
+
}
|
|
85
|
+
export interface LaunchCampaignResponse {
|
|
86
|
+
id: string;
|
|
87
|
+
status: string;
|
|
88
|
+
meta_campaign_id: string;
|
|
89
|
+
meta_adset_id: string;
|
|
90
|
+
meta_ad_id: string;
|
|
91
|
+
meta_leadform_id: string;
|
|
92
|
+
daily_budget_cents: number;
|
|
93
|
+
launched_at: string;
|
|
94
|
+
}
|
|
95
|
+
export interface PauseCampaignRequest {
|
|
96
|
+
campaign_id: string;
|
|
97
|
+
action?: "pause" | "resume";
|
|
98
|
+
}
|
|
99
|
+
export interface PerformanceResponse {
|
|
100
|
+
campaign_id: string;
|
|
101
|
+
status: string;
|
|
102
|
+
performance_status: string;
|
|
103
|
+
metrics: {
|
|
104
|
+
impressions: number;
|
|
105
|
+
clicks: number;
|
|
106
|
+
spend_cents: number;
|
|
107
|
+
leads_count: number;
|
|
108
|
+
cpl_cents: number;
|
|
109
|
+
ctr_pct: number;
|
|
110
|
+
};
|
|
111
|
+
hours_since_launch: number;
|
|
112
|
+
last_synced_at: string;
|
|
113
|
+
}
|
|
114
|
+
export interface UserData {
|
|
115
|
+
email?: string;
|
|
116
|
+
phone?: string;
|
|
117
|
+
first_name?: string;
|
|
118
|
+
last_name?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface SyncConversionRequest {
|
|
121
|
+
campaign_id: string;
|
|
122
|
+
lead_id: string;
|
|
123
|
+
quality: "good" | "bad";
|
|
124
|
+
meta_access_token: string;
|
|
125
|
+
user_data?: UserData;
|
|
126
|
+
}
|
|
127
|
+
export interface SyncConversionResponse {
|
|
128
|
+
success: boolean;
|
|
129
|
+
capi_sent: boolean;
|
|
130
|
+
events_received: number;
|
|
131
|
+
quality: string;
|
|
132
|
+
lead_id: string;
|
|
133
|
+
}
|
|
134
|
+
export interface ResearchReviewsRequest {
|
|
135
|
+
business_name: string;
|
|
136
|
+
location?: string;
|
|
137
|
+
}
|
|
138
|
+
export interface ResearchReviewsResponse {
|
|
139
|
+
business_name: string;
|
|
140
|
+
rating: number;
|
|
141
|
+
review_count: number;
|
|
142
|
+
themes: string[];
|
|
143
|
+
best_quotes: string[];
|
|
144
|
+
sentiment_breakdown?: {
|
|
145
|
+
positive: number;
|
|
146
|
+
neutral: number;
|
|
147
|
+
negative: number;
|
|
148
|
+
};
|
|
149
|
+
sources: string[];
|
|
150
|
+
}
|
|
151
|
+
export interface ResearchCompetitorsRequest {
|
|
152
|
+
industry: string;
|
|
153
|
+
location: string;
|
|
154
|
+
country?: string;
|
|
155
|
+
}
|
|
156
|
+
export interface ResearchCompetitorsResponse {
|
|
157
|
+
competitor_ads: Array<{
|
|
158
|
+
page_name: string;
|
|
159
|
+
ad_body_text: string;
|
|
160
|
+
started_running_date?: string;
|
|
161
|
+
platforms?: string;
|
|
162
|
+
}>;
|
|
163
|
+
insights: {
|
|
164
|
+
summary: string;
|
|
165
|
+
common_hooks: string[];
|
|
166
|
+
gaps: string[];
|
|
167
|
+
opportunity: string;
|
|
168
|
+
};
|
|
169
|
+
ad_count: number;
|
|
170
|
+
}
|
|
171
|
+
export interface ResearchMarketRequest {
|
|
172
|
+
industry: string;
|
|
173
|
+
location: string;
|
|
174
|
+
}
|
|
175
|
+
export interface GenerateCreativesRequest {
|
|
176
|
+
business_name: string;
|
|
177
|
+
description: string;
|
|
178
|
+
count?: number;
|
|
179
|
+
generate_images?: boolean;
|
|
180
|
+
}
|
|
181
|
+
export interface GenerateCreativesResponse {
|
|
182
|
+
creatives: AdVariant[];
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAID,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAID,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,mBAAmB,CAAC,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,cAAc,EAAE,KAAK,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,SAAS,EAAE,CAAC;CACxB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zuckerbot-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for ZuckerBot — let AI agents run Facebook ad campaigns",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"zuckerbot-mcp": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"dev": "tsc --watch",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"mcp",
|
|
23
|
+
"model-context-protocol",
|
|
24
|
+
"zuckerbot",
|
|
25
|
+
"facebook-ads",
|
|
26
|
+
"meta-ads",
|
|
27
|
+
"ai-agents",
|
|
28
|
+
"advertising",
|
|
29
|
+
"claude",
|
|
30
|
+
"openai",
|
|
31
|
+
"llm"
|
|
32
|
+
],
|
|
33
|
+
"author": "DatalisHQ",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/DatalisHQ/zuckerbot.git",
|
|
38
|
+
"directory": "mcp-server"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://zuckerbot.ai",
|
|
41
|
+
"bugs": {
|
|
42
|
+
"url": "https://github.com/DatalisHQ/zuckerbot/issues"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^22.0.0",
|
|
49
|
+
"typescript": "^5.7.0"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
}
|
|
54
|
+
}
|