@unclick/mcp-server 0.2.2 → 0.2.4

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.
Files changed (175) hide show
  1. package/dist/airtable-tool.d.ts +2 -0
  2. package/dist/airtable-tool.d.ts.map +1 -0
  3. package/dist/airtable-tool.js +154 -0
  4. package/dist/airtable-tool.js.map +1 -0
  5. package/dist/anthropic-tool.d.ts +3 -0
  6. package/dist/anthropic-tool.d.ts.map +1 -0
  7. package/dist/anthropic-tool.js +123 -0
  8. package/dist/anthropic-tool.js.map +1 -0
  9. package/dist/asana-tool.d.ts +8 -0
  10. package/dist/asana-tool.d.ts.map +1 -0
  11. package/dist/asana-tool.js +218 -0
  12. package/dist/asana-tool.js.map +1 -0
  13. package/dist/calendly-tool.d.ts +6 -0
  14. package/dist/calendly-tool.d.ts.map +1 -0
  15. package/dist/calendly-tool.js +182 -0
  16. package/dist/calendly-tool.js.map +1 -0
  17. package/dist/clickup-tool.d.ts +2 -0
  18. package/dist/clickup-tool.d.ts.map +1 -0
  19. package/dist/clickup-tool.js +153 -0
  20. package/dist/clickup-tool.js.map +1 -0
  21. package/dist/connectors/figma.d.ts +3 -0
  22. package/dist/connectors/figma.d.ts.map +1 -0
  23. package/dist/connectors/figma.js +18 -0
  24. package/dist/connectors/figma.js.map +1 -0
  25. package/dist/connectors/index.d.ts +3 -1
  26. package/dist/connectors/index.d.ts.map +1 -1
  27. package/dist/connectors/index.js +5 -1
  28. package/dist/connectors/index.js.map +1 -1
  29. package/dist/connectors/line.d.ts +3 -0
  30. package/dist/connectors/line.d.ts.map +1 -0
  31. package/dist/connectors/line.js +18 -0
  32. package/dist/connectors/line.js.map +1 -0
  33. package/dist/ebay-tool.d.ts +5 -0
  34. package/dist/ebay-tool.d.ts.map +1 -0
  35. package/dist/ebay-tool.js +179 -0
  36. package/dist/ebay-tool.js.map +1 -0
  37. package/dist/elevenlabs-tool.d.ts +6 -0
  38. package/dist/elevenlabs-tool.d.ts.map +1 -0
  39. package/dist/elevenlabs-tool.js +166 -0
  40. package/dist/elevenlabs-tool.js.map +1 -0
  41. package/dist/etsy-tool.d.ts +6 -0
  42. package/dist/etsy-tool.d.ts.map +1 -0
  43. package/dist/etsy-tool.js +125 -0
  44. package/dist/etsy-tool.js.map +1 -0
  45. package/dist/exchangerate-tool.d.ts +5 -0
  46. package/dist/exchangerate-tool.d.ts.map +1 -0
  47. package/dist/exchangerate-tool.js +139 -0
  48. package/dist/exchangerate-tool.js.map +1 -0
  49. package/dist/figma-tool.d.ts +8 -0
  50. package/dist/figma-tool.d.ts.map +1 -0
  51. package/dist/figma-tool.js +231 -0
  52. package/dist/figma-tool.js.map +1 -0
  53. package/dist/gdelt-tool.d.ts +5 -0
  54. package/dist/gdelt-tool.d.ts.map +1 -0
  55. package/dist/gdelt-tool.js +177 -0
  56. package/dist/gdelt-tool.js.map +1 -0
  57. package/dist/github-tool.d.ts +2 -0
  58. package/dist/github-tool.d.ts.map +1 -0
  59. package/dist/github-tool.js +165 -0
  60. package/dist/github-tool.js.map +1 -0
  61. package/dist/gitlab-tool.d.ts +2 -0
  62. package/dist/gitlab-tool.d.ts.map +1 -0
  63. package/dist/gitlab-tool.js +127 -0
  64. package/dist/gitlab-tool.js.map +1 -0
  65. package/dist/igdb-tool.d.ts +6 -0
  66. package/dist/igdb-tool.d.ts.map +1 -0
  67. package/dist/igdb-tool.js +140 -0
  68. package/dist/igdb-tool.js.map +1 -0
  69. package/dist/line-tool.d.ts +7 -0
  70. package/dist/line-tool.d.ts.map +1 -0
  71. package/dist/line-tool.js +188 -0
  72. package/dist/line-tool.js.map +1 -0
  73. package/dist/linear-tool.d.ts +2 -0
  74. package/dist/linear-tool.d.ts.map +1 -0
  75. package/dist/linear-tool.js +186 -0
  76. package/dist/linear-tool.js.map +1 -0
  77. package/dist/monday-tool.d.ts +7 -0
  78. package/dist/monday-tool.d.ts.map +1 -0
  79. package/dist/monday-tool.js +206 -0
  80. package/dist/monday-tool.js.map +1 -0
  81. package/dist/openai-tool.d.ts +6 -0
  82. package/dist/openai-tool.d.ts.map +1 -0
  83. package/dist/openai-tool.js +227 -0
  84. package/dist/openai-tool.js.map +1 -0
  85. package/dist/paypal-tool.d.ts +3 -0
  86. package/dist/paypal-tool.d.ts.map +1 -0
  87. package/dist/paypal-tool.js +157 -0
  88. package/dist/paypal-tool.js.map +1 -0
  89. package/dist/pinterest-tool.d.ts +7 -0
  90. package/dist/pinterest-tool.d.ts.map +1 -0
  91. package/dist/pinterest-tool.js +219 -0
  92. package/dist/pinterest-tool.js.map +1 -0
  93. package/dist/plaid-tool.d.ts +6 -0
  94. package/dist/plaid-tool.d.ts.map +1 -0
  95. package/dist/plaid-tool.js +149 -0
  96. package/dist/plaid-tool.js.map +1 -0
  97. package/dist/postman-tool.d.ts +2 -0
  98. package/dist/postman-tool.d.ts.map +1 -0
  99. package/dist/postman-tool.js +92 -0
  100. package/dist/postman-tool.js.map +1 -0
  101. package/dist/pushover-tool.d.ts +6 -0
  102. package/dist/pushover-tool.d.ts.map +1 -0
  103. package/dist/pushover-tool.js +146 -0
  104. package/dist/pushover-tool.js.map +1 -0
  105. package/dist/quickbooks-tool.d.ts +5 -0
  106. package/dist/quickbooks-tool.d.ts.map +1 -0
  107. package/dist/quickbooks-tool.js +160 -0
  108. package/dist/quickbooks-tool.js.map +1 -0
  109. package/dist/replicate-tool.d.ts +7 -0
  110. package/dist/replicate-tool.d.ts.map +1 -0
  111. package/dist/replicate-tool.js +172 -0
  112. package/dist/replicate-tool.js.map +1 -0
  113. package/dist/sentry-tool.d.ts +2 -0
  114. package/dist/sentry-tool.d.ts.map +1 -0
  115. package/dist/sentry-tool.js +123 -0
  116. package/dist/sentry-tool.js.map +1 -0
  117. package/dist/speedrun-tool.d.ts +6 -0
  118. package/dist/speedrun-tool.d.ts.map +1 -0
  119. package/dist/speedrun-tool.js +192 -0
  120. package/dist/speedrun-tool.js.map +1 -0
  121. package/dist/spotify-tool.d.ts +8 -0
  122. package/dist/spotify-tool.d.ts.map +1 -0
  123. package/dist/spotify-tool.js +274 -0
  124. package/dist/spotify-tool.js.map +1 -0
  125. package/dist/square-tool.d.ts +5 -0
  126. package/dist/square-tool.d.ts.map +1 -0
  127. package/dist/square-tool.js +133 -0
  128. package/dist/square-tool.js.map +1 -0
  129. package/dist/stability-tool.d.ts +5 -0
  130. package/dist/stability-tool.d.ts.map +1 -0
  131. package/dist/stability-tool.js +190 -0
  132. package/dist/stability-tool.js.map +1 -0
  133. package/dist/steam-tool.d.ts +6 -0
  134. package/dist/steam-tool.d.ts.map +1 -0
  135. package/dist/steam-tool.js +222 -0
  136. package/dist/steam-tool.js.map +1 -0
  137. package/dist/stripe-tool.d.ts +7 -0
  138. package/dist/stripe-tool.d.ts.map +1 -0
  139. package/dist/stripe-tool.js +181 -0
  140. package/dist/stripe-tool.js.map +1 -0
  141. package/dist/tiktok-tool.d.ts +4 -0
  142. package/dist/tiktok-tool.d.ts.map +1 -0
  143. package/dist/tiktok-tool.js +129 -0
  144. package/dist/tiktok-tool.js.map +1 -0
  145. package/dist/toilets-tool.js +2 -2
  146. package/dist/tool-wiring.d.ts +4066 -18
  147. package/dist/tool-wiring.d.ts.map +1 -1
  148. package/dist/tool-wiring.js +2601 -18
  149. package/dist/tool-wiring.js.map +1 -1
  150. package/dist/trello-tool.d.ts +2 -0
  151. package/dist/trello-tool.d.ts.map +1 -0
  152. package/dist/trello-tool.js +166 -0
  153. package/dist/trello-tool.js.map +1 -0
  154. package/dist/twilio-tool.d.ts +8 -0
  155. package/dist/twilio-tool.d.ts.map +1 -0
  156. package/dist/twilio-tool.js +243 -0
  157. package/dist/twilio-tool.js.map +1 -0
  158. package/dist/whatsapp-tool.d.ts +6 -0
  159. package/dist/whatsapp-tool.d.ts.map +1 -0
  160. package/dist/whatsapp-tool.js +200 -0
  161. package/dist/whatsapp-tool.js.map +1 -0
  162. package/dist/woocommerce-tool.d.ts +4 -0
  163. package/dist/woocommerce-tool.d.ts.map +1 -0
  164. package/dist/woocommerce-tool.js +140 -0
  165. package/dist/woocommerce-tool.js.map +1 -0
  166. package/dist/youtube-tool.d.ts +7 -0
  167. package/dist/youtube-tool.d.ts.map +1 -0
  168. package/dist/youtube-tool.js +196 -0
  169. package/dist/youtube-tool.js.map +1 -0
  170. package/package.json +2 -2
  171. package/server.json +24 -5
  172. package/dist/cloudflare-worker.d.ts +0 -12
  173. package/dist/cloudflare-worker.d.ts.map +0 -1
  174. package/dist/cloudflare-worker.js +0 -50
  175. package/dist/cloudflare-worker.js.map +0 -1
@@ -0,0 +1,200 @@
1
+ // WhatsApp Business Cloud API integration for the UnClick MCP server.
2
+ // Uses the WhatsApp Cloud API via fetch - no external dependencies.
3
+ // Users must supply a Bearer token and phone number ID from Meta for Developers.
4
+ const WA_API_BASE = "https://graph.facebook.com/v19.0";
5
+ // ─── Auth validation ──────────────────────────────────────────────────────────
6
+ function requireAuth(args) {
7
+ const token = String(args.bearer_token ?? "").trim();
8
+ const phoneNumberId = String(args.phone_number_id ?? "").trim();
9
+ if (!token)
10
+ throw new Error("bearer_token is required. Get it from Meta for Developers.");
11
+ if (!phoneNumberId)
12
+ throw new Error("phone_number_id is required. Find it in your Meta Business account.");
13
+ return { token, phoneNumberId };
14
+ }
15
+ // ─── API helpers ──────────────────────────────────────────────────────────────
16
+ async function waPost(token, path, body) {
17
+ const res = await fetch(`${WA_API_BASE}${path}`, {
18
+ method: "POST",
19
+ headers: {
20
+ Authorization: `Bearer ${token}`,
21
+ "Content-Type": "application/json",
22
+ },
23
+ body: JSON.stringify(body),
24
+ });
25
+ const data = await res.json();
26
+ if (!res.ok) {
27
+ const err = data.error;
28
+ const msg = err?.message ?? `HTTP ${res.status}`;
29
+ const code = err?.code ? ` (code ${err.code})` : "";
30
+ throw new Error(`WhatsApp API error${code}: ${msg}`);
31
+ }
32
+ return data;
33
+ }
34
+ async function waGet(token, path) {
35
+ const res = await fetch(`${WA_API_BASE}${path}`, {
36
+ headers: { Authorization: `Bearer ${token}` },
37
+ });
38
+ const data = await res.json();
39
+ if (!res.ok) {
40
+ const err = data.error;
41
+ const msg = err?.message ?? `HTTP ${res.status}`;
42
+ throw new Error(`WhatsApp API error: ${msg}`);
43
+ }
44
+ return data;
45
+ }
46
+ // ─── Operations ───────────────────────────────────────────────────────────────
47
+ export async function whatsappSendText(args) {
48
+ const { token, phoneNumberId } = requireAuth(args);
49
+ const to = String(args.to ?? "").trim();
50
+ const body = String(args.body ?? "").trim();
51
+ if (!to)
52
+ throw new Error("to is required (recipient phone number in E.164 format).");
53
+ if (!body)
54
+ throw new Error("body is required (message text).");
55
+ const payload = {
56
+ messaging_product: "whatsapp",
57
+ recipient_type: "individual",
58
+ to,
59
+ type: "text",
60
+ text: { body, preview_url: args.preview_url === true },
61
+ };
62
+ const result = await waPost(token, `/${phoneNumberId}/messages`, payload);
63
+ return {
64
+ success: true,
65
+ message_id: result.messages[0]?.id ?? null,
66
+ wa_id: result.contacts[0]?.wa_id ?? to,
67
+ to,
68
+ };
69
+ }
70
+ export async function whatsappSendTemplate(args) {
71
+ const { token, phoneNumberId } = requireAuth(args);
72
+ const to = String(args.to ?? "").trim();
73
+ const templateName = String(args.template_name ?? "").trim();
74
+ const language = String(args.language ?? "en_US").trim();
75
+ if (!to)
76
+ throw new Error("to is required.");
77
+ if (!templateName)
78
+ throw new Error("template_name is required.");
79
+ let components = [];
80
+ if (args.components) {
81
+ if (typeof args.components === "string") {
82
+ try {
83
+ components = JSON.parse(args.components);
84
+ }
85
+ catch {
86
+ throw new Error("components must be valid JSON (array of template component objects).");
87
+ }
88
+ }
89
+ else if (Array.isArray(args.components)) {
90
+ components = args.components;
91
+ }
92
+ }
93
+ const payload = {
94
+ messaging_product: "whatsapp",
95
+ to,
96
+ type: "template",
97
+ template: {
98
+ name: templateName,
99
+ language: { code: language },
100
+ components: components.length > 0 ? components : undefined,
101
+ },
102
+ };
103
+ const result = await waPost(token, `/${phoneNumberId}/messages`, payload);
104
+ return {
105
+ success: true,
106
+ message_id: result.messages[0]?.id ?? null,
107
+ wa_id: result.contacts[0]?.wa_id ?? to,
108
+ template_name: templateName,
109
+ to,
110
+ };
111
+ }
112
+ export async function whatsappSendMedia(args) {
113
+ const { token, phoneNumberId } = requireAuth(args);
114
+ const to = String(args.to ?? "").trim();
115
+ const mediaType = String(args.media_type ?? "").toLowerCase().trim();
116
+ if (!to)
117
+ throw new Error("to is required.");
118
+ const validTypes = ["image", "video", "audio", "document", "sticker"];
119
+ if (!validTypes.includes(mediaType)) {
120
+ throw new Error(`media_type must be one of: ${validTypes.join(", ")}.`);
121
+ }
122
+ const mediaId = String(args.media_id ?? "").trim();
123
+ const mediaLink = String(args.media_link ?? "").trim();
124
+ if (!mediaId && !mediaLink)
125
+ throw new Error("Either media_id or media_link is required.");
126
+ const mediaObject = {};
127
+ if (mediaId)
128
+ mediaObject.id = mediaId;
129
+ if (mediaLink)
130
+ mediaObject.link = mediaLink;
131
+ if (args.caption && mediaType !== "audio" && mediaType !== "sticker") {
132
+ mediaObject.caption = String(args.caption);
133
+ }
134
+ if (args.filename && mediaType === "document") {
135
+ mediaObject.filename = String(args.filename);
136
+ }
137
+ const payload = {
138
+ messaging_product: "whatsapp",
139
+ to,
140
+ type: mediaType,
141
+ [mediaType]: mediaObject,
142
+ };
143
+ const result = await waPost(token, `/${phoneNumberId}/messages`, payload);
144
+ return {
145
+ success: true,
146
+ message_id: result.messages[0]?.id ?? null,
147
+ wa_id: result.contacts[0]?.wa_id ?? to,
148
+ media_type: mediaType,
149
+ to,
150
+ };
151
+ }
152
+ export async function whatsappGetMedia(args) {
153
+ const token = String(args.bearer_token ?? "").trim();
154
+ if (!token)
155
+ throw new Error("bearer_token is required.");
156
+ const mediaId = String(args.media_id ?? "").trim();
157
+ if (!mediaId)
158
+ throw new Error("media_id is required.");
159
+ const result = await waGet(token, `/${mediaId}`);
160
+ return {
161
+ id: result.id,
162
+ url: result.url ?? null,
163
+ mime_type: result.mime_type ?? null,
164
+ file_size: result.file_size ?? null,
165
+ sha256: result.sha256 ?? null,
166
+ };
167
+ }
168
+ export async function whatsappUploadMedia(args) {
169
+ const { token, phoneNumberId } = requireAuth(args);
170
+ const mediaUrl = String(args.media_url ?? "").trim();
171
+ const mimeType = String(args.mime_type ?? "").trim();
172
+ if (!mediaUrl)
173
+ throw new Error("media_url is required (URL to fetch the media from).");
174
+ if (!mimeType)
175
+ throw new Error("mime_type is required (e.g. image/jpeg, video/mp4).");
176
+ // Fetch the media and upload it as a blob
177
+ const mediaRes = await fetch(mediaUrl);
178
+ if (!mediaRes.ok)
179
+ throw new Error(`Failed to fetch media from URL: HTTP ${mediaRes.status}`);
180
+ const mediaBlob = await mediaRes.blob();
181
+ const form = new FormData();
182
+ form.append("messaging_product", "whatsapp");
183
+ form.append("type", mimeType);
184
+ form.append("file", mediaBlob, args.filename ? String(args.filename) : "upload");
185
+ const res = await fetch(`${WA_API_BASE}/${phoneNumberId}/media`, {
186
+ method: "POST",
187
+ headers: { Authorization: `Bearer ${token}` },
188
+ body: form,
189
+ });
190
+ const data = await res.json();
191
+ if (!res.ok) {
192
+ const err = data.error;
193
+ throw new Error(`WhatsApp upload error: ${err?.message ?? `HTTP ${res.status}`}`);
194
+ }
195
+ return {
196
+ success: true,
197
+ media_id: data.id,
198
+ };
199
+ }
200
+ //# sourceMappingURL=whatsapp-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-tool.js","sourceRoot":"","sources":["../src/whatsapp-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function wooProducts(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function wooOrders(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function wooCustomers(args: Record<string, unknown>): Promise<unknown>;
4
+ //# sourceMappingURL=woocommerce-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woocommerce-tool.d.ts","sourceRoot":"","sources":["../src/woocommerce-tool.ts"],"names":[],"mappings":"AAiFA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BjF;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA+B/E;AAID,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAalF"}
@@ -0,0 +1,140 @@
1
+ // ─── WooCommerce REST API Tool ───────────────────────────────────────────────
2
+ // Covers products, orders, customers, and coupons.
3
+ // Auth: Consumer key + Consumer secret (HTTP Basic Auth).
4
+ // API: WooCommerce REST API v3 (wp-json/wc/v3).
5
+ // No external dependencies - native fetch only.
6
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
7
+ function requireConfig(args) {
8
+ const store_url = String(args.store_url ?? "").trim().replace(/\/$/, "");
9
+ const consumer_key = String(args.consumer_key ?? "").trim();
10
+ const consumer_secret = String(args.consumer_secret ?? "").trim();
11
+ if (!store_url)
12
+ return { error: "store_url is required (e.g. https://mystore.com)." };
13
+ if (!consumer_key)
14
+ return { error: "consumer_key is required (WooCommerce consumer key, starts with ck_)." };
15
+ if (!consumer_secret)
16
+ return { error: "consumer_secret is required (WooCommerce consumer secret, starts with cs_)." };
17
+ return { store_url, consumer_key, consumer_secret };
18
+ }
19
+ async function wooFetch(cfg, method, path, body, query) {
20
+ const base = `${cfg.store_url}/wp-json/wc/v3`;
21
+ const url = new URL(`${base}${path}`);
22
+ if (query) {
23
+ for (const [k, v] of Object.entries(query)) {
24
+ if (v !== undefined)
25
+ url.searchParams.set(k, String(v));
26
+ }
27
+ }
28
+ const credentials = Buffer.from(`${cfg.consumer_key}:${cfg.consumer_secret}`).toString("base64");
29
+ let response;
30
+ try {
31
+ response = await fetch(url.toString(), {
32
+ method,
33
+ headers: {
34
+ Authorization: `Basic ${credentials}`,
35
+ "Content-Type": "application/json",
36
+ "Accept": "application/json",
37
+ },
38
+ body: body !== undefined ? JSON.stringify(body) : undefined,
39
+ });
40
+ }
41
+ catch (err) {
42
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
43
+ }
44
+ if (response.status === 429) {
45
+ const retryAfter = response.headers.get("Retry-After");
46
+ return { error: "WooCommerce rate limit reached.", retry_after: retryAfter ? Number(retryAfter) : 5, status: 429 };
47
+ }
48
+ if (response.status === 401 || response.status === 403) {
49
+ return { error: "WooCommerce auth failed: invalid consumer key or secret.", status: response.status };
50
+ }
51
+ let data;
52
+ try {
53
+ data = await response.json();
54
+ }
55
+ catch {
56
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
57
+ }
58
+ if (!response.ok) {
59
+ const d = data;
60
+ return { error: d["message"] ?? d["code"] ?? "WooCommerce API error", status: response.status, code: d["code"] };
61
+ }
62
+ return data;
63
+ }
64
+ // ─── woo_products ─────────────────────────────────────────────────────────────
65
+ export async function wooProducts(args) {
66
+ const cfg = requireConfig(args);
67
+ if ("error" in cfg)
68
+ return cfg;
69
+ const action = String(args.action ?? "list");
70
+ switch (action) {
71
+ case "list": {
72
+ return wooFetch(cfg, "GET", "/products", undefined, {
73
+ per_page: args.per_page ? Number(args.per_page) : 20,
74
+ page: args.page ? Number(args.page) : 1,
75
+ status: args.status ? String(args.status) : undefined,
76
+ category: args.category ? String(args.category) : undefined,
77
+ search: args.search ? String(args.search) : undefined,
78
+ orderby: args.orderby ? String(args.orderby) : undefined,
79
+ order: args.order ? String(args.order) : undefined,
80
+ });
81
+ }
82
+ case "get": {
83
+ const id = String(args.id ?? "").trim();
84
+ if (!id)
85
+ return { error: "id is required for action='get'." };
86
+ return wooFetch(cfg, "GET", `/products/${encodeURIComponent(id)}`);
87
+ }
88
+ default:
89
+ return { error: `Unknown action "${action}". Valid: list, get.` };
90
+ }
91
+ }
92
+ // ─── woo_orders ───────────────────────────────────────────────────────────────
93
+ export async function wooOrders(args) {
94
+ const cfg = requireConfig(args);
95
+ if ("error" in cfg)
96
+ return cfg;
97
+ const action = String(args.action ?? "list");
98
+ switch (action) {
99
+ case "list": {
100
+ return wooFetch(cfg, "GET", "/orders", undefined, {
101
+ per_page: args.per_page ? Number(args.per_page) : 20,
102
+ page: args.page ? Number(args.page) : 1,
103
+ status: args.status ? String(args.status) : undefined,
104
+ customer: args.customer ? Number(args.customer) : undefined,
105
+ after: args.after ? String(args.after) : undefined,
106
+ before: args.before ? String(args.before) : undefined,
107
+ });
108
+ }
109
+ case "get": {
110
+ const id = String(args.id ?? "").trim();
111
+ if (!id)
112
+ return { error: "id is required for action='get'." };
113
+ return wooFetch(cfg, "GET", `/orders/${encodeURIComponent(id)}`);
114
+ }
115
+ case "create": {
116
+ if (!args.order || typeof args.order !== "object") {
117
+ return { error: "order object is required for action='create'." };
118
+ }
119
+ return wooFetch(cfg, "POST", "/orders", args.order);
120
+ }
121
+ default:
122
+ return { error: `Unknown action "${action}". Valid: list, get, create.` };
123
+ }
124
+ }
125
+ // ─── woo_customers ────────────────────────────────────────────────────────────
126
+ export async function wooCustomers(args) {
127
+ const cfg = requireConfig(args);
128
+ if ("error" in cfg)
129
+ return cfg;
130
+ return wooFetch(cfg, "GET", "/customers", undefined, {
131
+ per_page: args.per_page ? Number(args.per_page) : 20,
132
+ page: args.page ? Number(args.page) : 1,
133
+ search: args.search ? String(args.search) : undefined,
134
+ email: args.email ? String(args.email) : undefined,
135
+ role: args.role ? String(args.role) : undefined,
136
+ orderby: args.orderby ? String(args.orderby) : undefined,
137
+ order: args.order ? String(args.order) : undefined,
138
+ });
139
+ }
140
+ //# sourceMappingURL=woocommerce-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woocommerce-tool.js","sourceRoot":"","sources":["../src/woocommerce-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function youtubeSearch(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function youtubeGetVideo(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function youtubeGetChannel(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function youtubeListPlaylists(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function youtubeListPlaylistItems(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function youtubeGetCaptions(args: Record<string, unknown>): Promise<unknown>;
7
+ //# sourceMappingURL=youtube-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube-tool.d.ts","sourceRoot":"","sources":["../src/youtube-tool.ts"],"names":[],"mappings":"AAuIA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BrF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBvF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B1F;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA4B9F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBxF"}
@@ -0,0 +1,196 @@
1
+ // YouTube Data API v3 integration for the UnClick MCP server.
2
+ // Uses the YouTube Data API via fetch - no external dependencies.
3
+ // Users must supply an API key from Google Cloud Console.
4
+ const YT_API_BASE = "https://www.googleapis.com/youtube/v3";
5
+ // ─── API helper ───────────────────────────────────────────────────────────────
6
+ async function ytGet(apiKey, endpoint, params) {
7
+ const query = new URLSearchParams({ ...params, key: apiKey }).toString();
8
+ const res = await fetch(`${YT_API_BASE}/${endpoint}?${query}`);
9
+ const data = await res.json();
10
+ if (!res.ok) {
11
+ const err = data.error;
12
+ const msg = err?.message ?? `HTTP ${res.status}`;
13
+ const code = err?.code ? ` (code ${err.code})` : "";
14
+ throw new Error(`YouTube API error${code}: ${msg}`);
15
+ }
16
+ return data;
17
+ }
18
+ // ─── Auth validation ──────────────────────────────────────────────────────────
19
+ function requireKey(args) {
20
+ const key = String(args.api_key ?? "").trim();
21
+ if (!key)
22
+ throw new Error("api_key is required. Create one at console.cloud.google.com.");
23
+ return key;
24
+ }
25
+ // ─── Operations ───────────────────────────────────────────────────────────────
26
+ export async function youtubeSearch(args) {
27
+ const apiKey = requireKey(args);
28
+ const q = String(args.query ?? "").trim();
29
+ if (!q)
30
+ throw new Error("query is required.");
31
+ const maxResults = Math.min(50, Math.max(1, Number(args.max_results ?? 10)));
32
+ const type = String(args.type ?? "video");
33
+ const params = {
34
+ part: "snippet",
35
+ q,
36
+ type,
37
+ maxResults: String(maxResults),
38
+ };
39
+ if (args.order)
40
+ params.order = String(args.order);
41
+ if (args.published_after)
42
+ params.publishedAfter = String(args.published_after);
43
+ if (args.region_code)
44
+ params.regionCode = String(args.region_code);
45
+ if (args.page_token)
46
+ params.pageToken = String(args.page_token);
47
+ if (args.channel_id)
48
+ params.channelId = String(args.channel_id);
49
+ const data = await ytGet(apiKey, "search", params);
50
+ return {
51
+ total_results: data.pageInfo.totalResults,
52
+ next_page_token: data.nextPageToken ?? null,
53
+ items: (data.items ?? []).map((item) => ({
54
+ kind: item.id.kind,
55
+ id: item.id.videoId ?? item.id.channelId ?? item.id.playlistId,
56
+ title: item.snippet.title,
57
+ description: item.snippet.description,
58
+ channel_id: item.snippet.channelId,
59
+ channel_title: item.snippet.channelTitle,
60
+ published_at: item.snippet.publishedAt,
61
+ thumbnail: item.snippet.thumbnails?.medium?.url ?? item.snippet.thumbnails?.default?.url ?? null,
62
+ live_broadcast: item.snippet.liveBroadcastContent,
63
+ })),
64
+ };
65
+ }
66
+ export async function youtubeGetVideo(args) {
67
+ const apiKey = requireKey(args);
68
+ const videoId = String(args.video_id ?? "").trim();
69
+ if (!videoId)
70
+ throw new Error("video_id is required.");
71
+ const data = await ytGet(apiKey, "videos", {
72
+ part: "snippet,statistics,contentDetails",
73
+ id: videoId,
74
+ });
75
+ const video = data.items?.[0];
76
+ if (!video)
77
+ throw new Error(`Video not found: ${videoId}`);
78
+ return {
79
+ id: video.id,
80
+ title: video.snippet?.title ?? null,
81
+ description: video.snippet?.description ?? null,
82
+ channel_id: video.snippet?.channelId ?? null,
83
+ channel_title: video.snippet?.channelTitle ?? null,
84
+ published_at: video.snippet?.publishedAt ?? null,
85
+ tags: video.snippet?.tags ?? [],
86
+ duration: video.contentDetails?.duration ?? null,
87
+ definition: video.contentDetails?.definition ?? null,
88
+ view_count: video.statistics?.viewCount ?? null,
89
+ like_count: video.statistics?.likeCount ?? null,
90
+ comment_count: video.statistics?.commentCount ?? null,
91
+ };
92
+ }
93
+ export async function youtubeGetChannel(args) {
94
+ const apiKey = requireKey(args);
95
+ const channelId = String(args.channel_id ?? "").trim();
96
+ const forHandle = String(args.handle ?? "").trim();
97
+ if (!channelId && !forHandle)
98
+ throw new Error("Either channel_id or handle is required.");
99
+ const params = { part: "snippet,statistics" };
100
+ if (channelId)
101
+ params.id = channelId;
102
+ if (forHandle)
103
+ params.forHandle = forHandle.startsWith("@") ? forHandle.slice(1) : forHandle;
104
+ const data = await ytGet(apiKey, "channels", params);
105
+ const channel = data.items?.[0];
106
+ if (!channel)
107
+ throw new Error("Channel not found.");
108
+ return {
109
+ id: channel.id,
110
+ title: channel.snippet?.title ?? null,
111
+ description: channel.snippet?.description ?? null,
112
+ custom_url: channel.snippet?.customUrl ?? null,
113
+ published_at: channel.snippet?.publishedAt ?? null,
114
+ subscriber_count: channel.statistics?.subscriberCount ?? null,
115
+ video_count: channel.statistics?.videoCount ?? null,
116
+ view_count: channel.statistics?.viewCount ?? null,
117
+ };
118
+ }
119
+ export async function youtubeListPlaylists(args) {
120
+ const apiKey = requireKey(args);
121
+ const channelId = String(args.channel_id ?? "").trim();
122
+ if (!channelId)
123
+ throw new Error("channel_id is required.");
124
+ const maxResults = Math.min(50, Math.max(1, Number(args.max_results ?? 20)));
125
+ const params = {
126
+ part: "snippet,contentDetails",
127
+ channelId,
128
+ maxResults: String(maxResults),
129
+ };
130
+ if (args.page_token)
131
+ params.pageToken = String(args.page_token);
132
+ const data = await ytGet(apiKey, "playlists", params);
133
+ return {
134
+ total_results: data.pageInfo.totalResults,
135
+ next_page_token: data.nextPageToken ?? null,
136
+ playlists: (data.items ?? []).map((pl) => ({
137
+ id: pl.id,
138
+ title: pl.snippet?.title ?? null,
139
+ description: pl.snippet?.description ?? null,
140
+ channel_id: pl.snippet?.channelId ?? null,
141
+ channel_title: pl.snippet?.channelTitle ?? null,
142
+ published_at: pl.snippet?.publishedAt ?? null,
143
+ item_count: pl.contentDetails?.itemCount ?? null,
144
+ })),
145
+ };
146
+ }
147
+ export async function youtubeListPlaylistItems(args) {
148
+ const apiKey = requireKey(args);
149
+ const playlistId = String(args.playlist_id ?? "").trim();
150
+ if (!playlistId)
151
+ throw new Error("playlist_id is required.");
152
+ const maxResults = Math.min(50, Math.max(1, Number(args.max_results ?? 20)));
153
+ const params = {
154
+ part: "snippet",
155
+ playlistId,
156
+ maxResults: String(maxResults),
157
+ };
158
+ if (args.page_token)
159
+ params.pageToken = String(args.page_token);
160
+ const data = await ytGet(apiKey, "playlistItems", params);
161
+ return {
162
+ total_results: data.pageInfo.totalResults,
163
+ next_page_token: data.nextPageToken ?? null,
164
+ items: (data.items ?? []).map((item) => ({
165
+ id: item.id,
166
+ title: item.snippet?.title ?? null,
167
+ video_id: item.snippet?.resourceId.videoId ?? null,
168
+ position: item.snippet?.position ?? null,
169
+ published_at: item.snippet?.publishedAt ?? null,
170
+ })),
171
+ };
172
+ }
173
+ export async function youtubeGetCaptions(args) {
174
+ const apiKey = requireKey(args);
175
+ const videoId = String(args.video_id ?? "").trim();
176
+ if (!videoId)
177
+ throw new Error("video_id is required.");
178
+ const data = await ytGet(apiKey, "captions", {
179
+ part: "snippet",
180
+ videoId,
181
+ });
182
+ return {
183
+ count: (data.items ?? []).length,
184
+ captions: (data.items ?? []).map((c) => ({
185
+ id: c.id,
186
+ language: c.snippet.language,
187
+ name: c.snippet.name,
188
+ track_kind: c.snippet.trackKind,
189
+ is_cc: c.snippet.isCC,
190
+ is_auto_synced: c.snippet.isAutoSynced,
191
+ status: c.snippet.status,
192
+ last_updated: c.snippet.lastUpdated,
193
+ })),
194
+ };
195
+ }
196
+ //# sourceMappingURL=youtube-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube-tool.js","sourceRoot":"","sources":["../src/youtube-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unclick/mcp-server",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "mcpName": "io.github.malamutemayhem/unclick-mcp-server",
5
5
  "description": "MCP server for the UnClick tool marketplace — lets AI agents discover and use every UnClick tool",
6
6
  "type": "module",
@@ -60,6 +60,6 @@
60
60
  "license": "MIT",
61
61
  "repository": {
62
62
  "type": "git",
63
- "url": "https://github.com/unclick/unclick"
63
+ "url": "https://github.com/malamutemayhem/unclick-agent-native-endpoints"
64
64
  }
65
65
  }