@maasy-ai/mcp-server 1.0.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,170 @@
1
+ # 🐙 @maasy/mcp-server
2
+
3
+ **MCP server for Maasy AI Marketing Copilot** — connect Claude to your marketing intelligence.
4
+
5
+ ## What it does
6
+
7
+ This MCP server exposes maasy's marketing AI capabilities as tools that Claude (Desktop, Code, or any MCP client) can use directly. Think of it as giving Claude a direct line to your marketing operations.
8
+
9
+ ### 18 Tools Available
10
+
11
+ **Brand Intelligence (3)**
12
+ | Tool | Description |
13
+ |------|-------------|
14
+ | `maasy_list_brands` | List all brands with health status |
15
+ | `maasy_scan_brand` | Deep health scan: DNA, campaigns, content, CRM, SEO, alerts |
16
+ | `maasy_get_brand_context` | Full brand DNA: tone, ICP, value prop, assets, references |
17
+
18
+ **Skills Management (5)** — Teach maasy new marketing knowledge
19
+ | Tool | Description |
20
+ |------|-------------|
21
+ | `maasy_list_skills` | Browse all knowledge skills by category |
22
+ | `maasy_get_skill` | Read a skill's full content |
23
+ | `maasy_create_skill` | Create new marketing knowledge (auto-generates quick action pills) |
24
+ | `maasy_update_skill` | Update skill content, category, or priority |
25
+ | `maasy_delete_skill` | Remove a skill permanently |
26
+
27
+ **Marketing Intelligence (10)**
28
+ | Tool | Description |
29
+ |------|-------------|
30
+ | `maasy_get_alerts` | Pending copilot alerts (anomalies, opportunities, gaps) |
31
+ | `maasy_get_campaign_metrics` | Ad performance: spend, CTR, CPC, ROAS |
32
+ | `maasy_get_crm_summary` | CRM pipeline: leads, contacts, opportunities |
33
+ | `maasy_get_content_pipeline` | Content status: drafts, scheduled, published |
34
+ | `maasy_get_seo_status` | SEO/GEO scores and keyword rankings |
35
+ | `maasy_generate_content` | Generate on-brand social content |
36
+ | `maasy_discover_keywords` | AI keyword discovery |
37
+ | `maasy_get_daily_summary` | Today's operations summary |
38
+ | `maasy_execute_action` | Execute actions: reports, budget, creatives, leads |
39
+
40
+ ### 3 Prompt Templates
41
+
42
+ | Prompt | Description |
43
+ |--------|-------------|
44
+ | `brand-audit` | Complete marketing audit with recommendations |
45
+ | `teach-maasy` | Create a new skill to teach maasy expertise |
46
+ | `weekly-strategy` | Day-by-day marketing action plan |
47
+
48
+ ### 2 Resources
49
+
50
+ | Resource | URI |
51
+ |----------|-----|
52
+ | Active Brand Context | `maasy://brand/active` |
53
+ | Skills Catalog | `maasy://skills/catalog` |
54
+
55
+ ---
56
+
57
+ ## Setup
58
+
59
+ ### 1. Get your credentials
60
+
61
+ You only need your **maasy login credentials** (same email/password you use in the app):
62
+
63
+ - **Email**: Your maasy account email
64
+ - **Password**: Your maasy account password
65
+ - **Project ID**: (Optional) Your default brand UUID — if omitted, you'll need to pass it to each tool
66
+
67
+ No service role key needed. The MCP server authenticates like a normal user.
68
+
69
+ ### 2. Configure Claude Desktop
70
+
71
+ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
72
+
73
+ ```json
74
+ {
75
+ "mcpServers": {
76
+ "maasy": {
77
+ "command": "node",
78
+ "args": ["/path/to/maas-core-engine-main/mcp-server/dist/index.js"],
79
+ "env": {
80
+ "MAASY_SUPABASE_URL": "https://vdlaoswrgppbimjykugn.supabase.co",
81
+ "MAASY_SUPABASE_ANON_KEY": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
82
+ "MAASY_EMAIL": "you@email.com",
83
+ "MAASY_PASSWORD": "yourpassword"
84
+ }
85
+ }
86
+ }
87
+ }
88
+ ```
89
+
90
+ ### 3. Configure Claude Code
91
+
92
+ Add to `.claude/settings.local.json` or project MCP config:
93
+
94
+ ```json
95
+ {
96
+ "mcpServers": {
97
+ "maasy": {
98
+ "command": "node",
99
+ "args": ["./mcp-server/dist/index.js"],
100
+ "env": {
101
+ "MAASY_SUPABASE_URL": "https://vdlaoswrgppbimjykugn.supabase.co",
102
+ "MAASY_SUPABASE_ANON_KEY": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
103
+ "MAASY_EMAIL": "you@email.com",
104
+ "MAASY_PASSWORD": "yourpassword"
105
+ }
106
+ }
107
+ }
108
+ }
109
+ ```
110
+
111
+ ### 4. Restart Claude
112
+
113
+ After configuring, restart Claude Desktop or Claude Code. You should see the maasy tools appear.
114
+
115
+ ---
116
+
117
+ ## Usage Examples
118
+
119
+ ### Ask Claude to audit your brand
120
+ > "Use maasy to scan my brand health and give me a marketing action plan"
121
+
122
+ ### Teach maasy new knowledge
123
+ > "Create a maasy skill about TikTok viral content strategies for e-commerce brands"
124
+
125
+ ### Get marketing intelligence
126
+ > "What are my pending marketing alerts? Which campaigns need attention?"
127
+
128
+ ### Generate content via Claude
129
+ > "Generate 5 Instagram posts for my brand using maasy, focused on our new product launch"
130
+
131
+ ### Cross-brand analysis (agency use)
132
+ > "List all my brands in maasy, scan each one, and tell me which needs the most attention this week"
133
+
134
+ ---
135
+
136
+ ## Development
137
+
138
+ ```bash
139
+ # Install dependencies
140
+ npm install
141
+
142
+ # Build
143
+ npm run build
144
+
145
+ # Run in dev mode (with tsx)
146
+ npm run dev
147
+
148
+ # Test manually
149
+ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | MAASY_SUPABASE_URL=... MAASY_SUPABASE_SERVICE_KEY=... node dist/index.js
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Architecture
155
+
156
+ ```
157
+ Claude Desktop / Claude Code / Any MCP Client
158
+ ↓ MCP Protocol (stdio)
159
+ @maasy/mcp-server (Node.js)
160
+ ↓ Supabase Client (service role)
161
+ Supabase PostgreSQL + Edge Functions
162
+
163
+ maasy AI Engine (Gemini 2.5 Flash/Pro)
164
+ ```
165
+
166
+ The MCP server reuses the same Supabase infrastructure that powers the maasy web app. Skills created via MCP are immediately available in the web copilot, and vice versa.
167
+
168
+ ---
169
+
170
+ Built with 🐙 by the maasy team
package/dist/icon.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const MAASY_ICON = "data:image/png;base64,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";
package/dist/icon.js ADDED
@@ -0,0 +1,3 @@
1
+ // Maasy favicon 64x64 PNG as base64 data URI
2
+ export const MAASY_ICON = "data:image/png;base64,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";
3
+ //# sourceMappingURL=icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.js","sourceRoot":"","sources":["../src/icon.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,UAAU,GACrB,wsHAAwsH,CAAC"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @maasy/mcp-server
4
+ *
5
+ * MCP server for Maasy AI Marketing Copilot.
6
+ * Connects Claude (or any MCP client) to your marketing intelligence.
7
+ *
8
+ * Auth: API key generated in maasy Settings.
9
+ * No service role key, no email/password needed.
10
+ *
11
+ * Required env vars:
12
+ * MAASY_SUPABASE_URL — https://vdlaoswrgppbimjykugn.supabase.co
13
+ * MAASY_API_KEY — Your maasy API key (msy_...)
14
+ */
15
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,296 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @maasy/mcp-server
4
+ *
5
+ * MCP server for Maasy AI Marketing Copilot.
6
+ * Connects Claude (or any MCP client) to your marketing intelligence.
7
+ *
8
+ * Auth: API key generated in maasy Settings.
9
+ * No service role key, no email/password needed.
10
+ *
11
+ * Required env vars:
12
+ * MAASY_SUPABASE_URL — https://vdlaoswrgppbimjykugn.supabase.co
13
+ * MAASY_API_KEY — Your maasy API key (msy_...)
14
+ */
15
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
16
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
17
+ import { z } from "zod";
18
+ import { initGateway, callGateway } from "./supabase.js";
19
+ import { MAASY_ICON } from "./icon.js";
20
+ const DEFAULT_PROJECT_ID = process.env.MAASY_PROJECT_ID || "";
21
+ // ─── Helper: wrap tool call ──────────────────────────────────────────
22
+ function toolHandler(toolName, argsFn) {
23
+ return async (args) => {
24
+ try {
25
+ const gatewayArgs = argsFn ? argsFn(args) : args;
26
+ // Auto-inject default project_id if not provided
27
+ if (DEFAULT_PROJECT_ID && !gatewayArgs.project_id) {
28
+ gatewayArgs.project_id = DEFAULT_PROJECT_ID;
29
+ }
30
+ const result = await callGateway(toolName, gatewayArgs);
31
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
32
+ }
33
+ catch (e) {
34
+ return {
35
+ content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : String(e)}` }],
36
+ isError: true,
37
+ };
38
+ }
39
+ };
40
+ }
41
+ // ─── Create MCP Server ──────────────────────────────────────────────
42
+ const server = new McpServer({
43
+ name: "maasy",
44
+ version: "0.1.0",
45
+ description: "Maasy AI Marketing Copilot — marketing intelligence, brand scanning, content generation, skill management",
46
+ icons: [{ src: MAASY_ICON, mimeType: "image/png", sizes: ["64x64"] }],
47
+ });
48
+ // ═══════════════════════════════════════════════════════════════════════
49
+ // BRAND TOOLS (3)
50
+ // ═══════════════════════════════════════════════════════════════════════
51
+ server.tool("maasy_list_brands", "List all brands (projects) in your maasy account with basic info", {}, toolHandler("list_brands"));
52
+ server.tool("maasy_scan_brand", "Deep health scan: DNA completeness, campaigns, content, CRM, SEO, alerts. Returns traffic-light status per area.", { project_id: z.string().optional().describe("Brand UUID (uses default if omitted)") }, toolHandler("scan_brand"));
53
+ server.tool("maasy_get_brand_context", "Full brand DNA: name, industry, tone, ICP, value prop, assets, references. Essential for on-brand generation.", { project_id: z.string().optional().describe("Brand UUID") }, toolHandler("get_brand_context"));
54
+ // ═══════════════════════════════════════════════════════════════════════
55
+ // SKILLS TOOLS (5) — Teach maasy new marketing knowledge
56
+ // ═══════════════════════════════════════════════════════════════════════
57
+ server.tool("maasy_list_skills", "List all maasy copilot skills — modular knowledge packages (SEO, ads, CRM playbooks, etc).", {
58
+ category: z
59
+ .enum([
60
+ "copilot",
61
+ "ads",
62
+ "ads_manager",
63
+ "seo_geo",
64
+ "content",
65
+ "email",
66
+ "crm",
67
+ "funnels",
68
+ "landing",
69
+ "video",
70
+ "cultural",
71
+ "general",
72
+ ])
73
+ .optional(),
74
+ active_only: z.boolean().optional().default(true),
75
+ }, toolHandler("list_skills"));
76
+ server.tool("maasy_get_skill", "Get full details of a skill including content and auto-generated quick action pills.", { skill_id: z.string().describe("Skill UUID") }, toolHandler("get_skill"));
77
+ server.tool("maasy_create_skill", "Create a new knowledge skill for maasy. Write actionable marketing knowledge in markdown — frameworks, checklists, strategies. " +
78
+ "Auto-generates quick action pills after creation. maasy loads relevant skills based on which tool the user is using.", {
79
+ name: z.string().min(3).max(100).describe("Skill name (e.g. 'Meta Ads Scaling Framework')"),
80
+ slug: z
81
+ .string()
82
+ .min(3)
83
+ .max(60)
84
+ .regex(/^[a-z0-9-]+$/)
85
+ .describe("URL-safe slug (e.g. 'meta-ads-scaling')"),
86
+ category: z
87
+ .enum([
88
+ "copilot",
89
+ "ads",
90
+ "ads_manager",
91
+ "seo_geo",
92
+ "content",
93
+ "email",
94
+ "crm",
95
+ "funnels",
96
+ "landing",
97
+ "video",
98
+ "cultural",
99
+ "general",
100
+ ])
101
+ .describe("Which module loads this: copilot=always, ads=Ads Studio, seo_geo=SEO, content=Content Gen, email=Email, crm=CRM, general=everywhere"),
102
+ description: z.string().max(300).optional().describe("Short description"),
103
+ content: z
104
+ .string()
105
+ .min(50)
106
+ .describe("Knowledge content in markdown. Include frameworks, processes, best practices, examples. Max ~2000 words."),
107
+ priority: z.number().min(0).max(100).optional().default(50).describe("Loading priority (higher=first)"),
108
+ max_tokens: z.number().min(100).max(2000).optional().default(500),
109
+ }, toolHandler("create_skill"));
110
+ server.tool("maasy_update_skill", "Update a skill's content, category, priority, or active status. Regenerates quick action pills if content changes.", {
111
+ skill_id: z.string().describe("Skill UUID"),
112
+ name: z.string().optional(),
113
+ description: z.string().optional(),
114
+ category: z
115
+ .enum([
116
+ "copilot",
117
+ "ads",
118
+ "ads_manager",
119
+ "seo_geo",
120
+ "content",
121
+ "email",
122
+ "crm",
123
+ "funnels",
124
+ "landing",
125
+ "video",
126
+ "cultural",
127
+ "general",
128
+ ])
129
+ .optional(),
130
+ content: z.string().optional(),
131
+ priority: z.number().min(0).max(100).optional(),
132
+ max_tokens: z.number().min(100).max(2000).optional(),
133
+ is_active: z.boolean().optional(),
134
+ }, toolHandler("update_skill"));
135
+ server.tool("maasy_delete_skill", "Permanently delete a skill. Removes the knowledge from maasy.", { skill_id: z.string().describe("Skill UUID") }, toolHandler("delete_skill"));
136
+ // ═══════════════════════════════════════════════════════════════════════
137
+ // MARKETING INTELLIGENCE TOOLS (9)
138
+ // ═══════════════════════════════════════════════════════════════════════
139
+ server.tool("maasy_get_alerts", "Pending copilot alerts: campaign anomalies, lead opportunities, content gaps, SEO drops.", {
140
+ project_id: z.string().optional().describe("Brand UUID"),
141
+ limit: z.number().optional().default(20),
142
+ }, toolHandler("get_alerts"));
143
+ server.tool("maasy_get_campaign_metrics", "Ad campaign performance: spend, impressions, clicks, CTR, CPC, conversions, ROAS.", {
144
+ project_id: z.string().optional().describe("Brand UUID"),
145
+ days: z.number().optional().default(7).describe("Lookback days"),
146
+ }, toolHandler("get_campaign_metrics"));
147
+ server.tool("maasy_get_crm_summary", "CRM pipeline: leads by status, hot leads, contacts, opportunities, total pipeline value.", { project_id: z.string().optional().describe("Brand UUID") }, toolHandler("get_crm_summary"));
148
+ server.tool("maasy_get_content_pipeline", "Content pipeline: drafts, scheduled, published, by status, last N days.", {
149
+ project_id: z.string().optional().describe("Brand UUID"),
150
+ days: z.number().optional().default(30),
151
+ }, toolHandler("get_content_pipeline"));
152
+ server.tool("maasy_get_seo_status", "SEO/GEO scores, keyword rankings, visibility trends, top queries.", { project_id: z.string().optional().describe("Brand UUID") }, toolHandler("get_seo_status"));
153
+ server.tool("maasy_generate_content", "Generate on-brand social content using maasy AI. Respects brand DNA, tone, ICP.", {
154
+ project_id: z.string().optional().describe("Brand UUID"),
155
+ prompt: z.string().describe("What to generate (e.g. '3 Instagram posts about our product launch')"),
156
+ platform: z
157
+ .enum(["instagram", "facebook", "linkedin", "twitter", "tiktok", "general"])
158
+ .optional()
159
+ .default("general"),
160
+ }, toolHandler("generate_content"));
161
+ server.tool("maasy_discover_keywords", "AI keyword discovery: clusters, volume estimates, difficulty scores.", {
162
+ project_id: z.string().optional().describe("Brand UUID"),
163
+ seed_topic: z.string().optional().describe("Focus topic"),
164
+ }, toolHandler("discover_keywords"));
165
+ server.tool("maasy_get_daily_summary", "Today's operations summary: what happened, what needs attention, recommended actions.", { project_id: z.string().optional().describe("Brand UUID") }, toolHandler("get_daily_summary"));
166
+ server.tool("maasy_execute_action", "Execute a copilot action: generate report, redistribute budget, rotate creatives, diagnose campaigns, etc.", {
167
+ project_id: z.string().optional().describe("Brand UUID"),
168
+ action: z.enum([
169
+ "generate_weekly_report",
170
+ "redistribute_budget",
171
+ "rotate_creatives",
172
+ "recalculate_scores",
173
+ "send_followup_leads",
174
+ "diagnose_campaigns",
175
+ "fill_content_gap",
176
+ "check_email_health",
177
+ ]),
178
+ }, toolHandler("execute_action"));
179
+ // ═══════════════════════════════════════════════════════════════════════
180
+ // RESOURCES
181
+ // ═══════════════════════════════════════════════════════════════════════
182
+ server.resource("active-brand", "maasy://brand/active", async (uri) => {
183
+ if (!DEFAULT_PROJECT_ID) {
184
+ return {
185
+ contents: [
186
+ {
187
+ uri: uri.href,
188
+ mimeType: "text/plain",
189
+ text: "No default brand. Set MAASY_PROJECT_ID or use maasy_list_brands.",
190
+ },
191
+ ],
192
+ };
193
+ }
194
+ try {
195
+ const ctx = await callGateway("get_brand_context", { project_id: DEFAULT_PROJECT_ID });
196
+ return { contents: [{ uri: uri.href, mimeType: "application/json", text: JSON.stringify(ctx, null, 2) }] };
197
+ }
198
+ catch (e) {
199
+ return {
200
+ contents: [
201
+ { uri: uri.href, mimeType: "text/plain", text: `Error: ${e instanceof Error ? e.message : String(e)}` },
202
+ ],
203
+ };
204
+ }
205
+ });
206
+ server.resource("skills-catalog", "maasy://skills/catalog", async (uri) => {
207
+ try {
208
+ const skills = await callGateway("list_skills", { active_only: true });
209
+ return { contents: [{ uri: uri.href, mimeType: "application/json", text: JSON.stringify(skills, null, 2) }] };
210
+ }
211
+ catch (e) {
212
+ return {
213
+ contents: [
214
+ { uri: uri.href, mimeType: "text/plain", text: `Error: ${e instanceof Error ? e.message : String(e)}` },
215
+ ],
216
+ };
217
+ }
218
+ });
219
+ // ═══════════════════════════════════════════════════════════════════════
220
+ // PROMPTS
221
+ // ═══════════════════════════════════════════════════════════════════════
222
+ server.prompt("brand-audit", "Complete brand health audit with actionable recommendations", { project_id: z.string().optional().describe("Brand UUID") }, async (args) => ({
223
+ messages: [
224
+ {
225
+ role: "user",
226
+ content: {
227
+ type: "text",
228
+ text: [
229
+ `Run a complete marketing audit for my brand${args.project_id ? ` (project: ${args.project_id})` : ""}.`,
230
+ "",
231
+ "1. maasy_scan_brand → overall health",
232
+ "2. maasy_get_campaign_metrics → ad performance",
233
+ "3. maasy_get_crm_summary → pipeline status",
234
+ "4. maasy_get_content_pipeline → content status",
235
+ "5. maasy_get_seo_status → SEO/GEO scores",
236
+ "6. maasy_get_alerts → pending issues",
237
+ "",
238
+ "Provide: executive summary (3 bullets), top 3 critical issues, top 3 opportunities, weekly action plan.",
239
+ ].join("\n"),
240
+ },
241
+ },
242
+ ],
243
+ }));
244
+ server.prompt("teach-maasy", "Create a new skill to teach maasy specialized marketing knowledge", {
245
+ topic: z.string().describe("Marketing topic (e.g. 'B2B LinkedIn Strategy')"),
246
+ category: z.string().optional().describe("Module: ads, seo_geo, content, email, crm, funnels, landing, general"),
247
+ }, async (args) => ({
248
+ messages: [
249
+ {
250
+ role: "user",
251
+ content: {
252
+ type: "text",
253
+ text: [
254
+ `Teach maasy about: "${args.topic}"`,
255
+ "",
256
+ "1. Use maasy_list_skills to see current knowledge",
257
+ `2. Use maasy_create_skill with category "${args.category || "general"}"`,
258
+ "",
259
+ "Content should include: framework/methodology, best practices, metrics + benchmarks, 2-3 examples, decision tree.",
260
+ "Write as instructions for an AI copilot. Markdown. Under 2000 words.",
261
+ ].join("\n"),
262
+ },
263
+ },
264
+ ],
265
+ }));
266
+ server.prompt("weekly-strategy", "Generate a weekly marketing strategy and action plan", { project_id: z.string().optional().describe("Brand UUID") }, async (args) => ({
267
+ messages: [
268
+ {
269
+ role: "user",
270
+ content: {
271
+ type: "text",
272
+ text: [
273
+ `Weekly marketing strategy for my brand${args.project_id ? ` (${args.project_id})` : ""}.`,
274
+ "",
275
+ "Scan brand, check alerts, get 14-day campaign metrics, check content pipeline.",
276
+ "Then create Mon-Fri plan: audit, content, campaigns, CRM, reporting.",
277
+ "For each day, suggest maasy_execute_action calls.",
278
+ ].join("\n"),
279
+ },
280
+ },
281
+ ],
282
+ }));
283
+ // ═══════════════════════════════════════════════════════════════════════
284
+ // START
285
+ // ═══════════════════════════════════════════════════════════════════════
286
+ async function main() {
287
+ initGateway();
288
+ const transport = new StdioServerTransport();
289
+ await server.connect(transport);
290
+ console.error("🐙 Maasy MCP server running — 17 tools, 2 resources, 3 prompts");
291
+ }
292
+ main().catch((err) => {
293
+ console.error(`❌ ${err.message}`);
294
+ process.exit(1);
295
+ });
296
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Gateway client — calls mcp-gateway edge function with API key auth.
3
+ * No service role key or email/password needed.
4
+ */
5
+ export declare function initGateway(): void;
6
+ /**
7
+ * Call a tool via the mcp-gateway edge function.
8
+ */
9
+ export declare function callGateway(tool: string, args?: Record<string, unknown>): Promise<unknown>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Gateway client — calls mcp-gateway edge function with API key auth.
3
+ * No service role key or email/password needed.
4
+ */
5
+ const GATEWAY_URL_TEMPLATE = "{base}/functions/v1/mcp-gateway";
6
+ let gatewayUrl = "";
7
+ let apiKey = "";
8
+ export function initGateway() {
9
+ const base = process.env.MAASY_SUPABASE_URL;
10
+ apiKey = process.env.MAASY_API_KEY || "";
11
+ if (!base) {
12
+ throw new Error("Missing MAASY_SUPABASE_URL.\n" + "Set it to: https://vdlaoswrgppbimjykugn.supabase.co");
13
+ }
14
+ if (!apiKey) {
15
+ throw new Error("Missing MAASY_API_KEY.\n" + "Generate one in maasy → Settings → API Key, then add it to your MCP config.");
16
+ }
17
+ gatewayUrl = GATEWAY_URL_TEMPLATE.replace("{base}", base);
18
+ console.error(`✅ Gateway: ${gatewayUrl}`);
19
+ }
20
+ /**
21
+ * Call a tool via the mcp-gateway edge function.
22
+ */
23
+ export async function callGateway(tool, args = {}) {
24
+ const res = await fetch(gatewayUrl, {
25
+ method: "POST",
26
+ headers: {
27
+ "Content-Type": "application/json",
28
+ "x-api-key": apiKey,
29
+ },
30
+ body: JSON.stringify({ tool, args }),
31
+ });
32
+ const data = await res.json();
33
+ if (!res.ok) {
34
+ throw new Error(data.error || `Gateway error (${res.status})`);
35
+ }
36
+ return data.result;
37
+ }
38
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,oBAAoB,GAAG,iCAAiC,CAAC;AAE/D,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5C,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;IAEzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,qDAAqD,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,0BAA0B,GAAG,6EAA6E,CAC3G,CAAC;IACJ,CAAC;IAED,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAgC,EAAE;IAChF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;QAClC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,MAAM;SACpB;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KACrC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@maasy-ai/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Maasy AI Marketing Copilot — connect Claude to your marketing intelligence",
5
+ "type": "module",
6
+ "bin": {
7
+ "maasy-mcp": "dist/index.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx src/index.ts",
13
+ "start": "node dist/index.js",
14
+ "prepare": "npm run build"
15
+ },
16
+ "keywords": ["mcp", "maasy", "marketing", "ai", "copilot", "anthropic", "claude", "model-context-protocol"],
17
+ "license": "MIT",
18
+ "author": "Maasy <hola@maasy.io>",
19
+ "homepage": "https://maasy.io",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/maasy-ai/mcp-server"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/maasy-ai/mcp-server/issues"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.12.1",
32
+ "@supabase/supabase-js": "^2.95.3",
33
+ "zod": "^3.23.8"
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "^5.8.0",
37
+ "tsx": "^4.19.0",
38
+ "@types/node": "^22.0.0"
39
+ },
40
+ "engines": {
41
+ "node": ">=18"
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "README.md"
46
+ ]
47
+ }