@unclick/mcp-server 0.2.3 → 0.2.5

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 (324) hide show
  1. package/README.md +139 -153
  2. package/dist/airtable-tool.d.ts +2 -0
  3. package/dist/airtable-tool.d.ts.map +1 -0
  4. package/dist/airtable-tool.js +154 -0
  5. package/dist/airtable-tool.js.map +1 -0
  6. package/dist/algolia-tool.d.ts +5 -0
  7. package/dist/algolia-tool.d.ts.map +1 -0
  8. package/dist/algolia-tool.js +121 -0
  9. package/dist/algolia-tool.js.map +1 -0
  10. package/dist/anthropic-tool.d.ts +3 -0
  11. package/dist/anthropic-tool.d.ts.map +1 -0
  12. package/dist/anthropic-tool.js +123 -0
  13. package/dist/anthropic-tool.js.map +1 -0
  14. package/dist/asana-tool.d.ts +8 -0
  15. package/dist/asana-tool.d.ts.map +1 -0
  16. package/dist/asana-tool.js +218 -0
  17. package/dist/asana-tool.js.map +1 -0
  18. package/dist/assemblyai-tool.d.ts +7 -0
  19. package/dist/assemblyai-tool.d.ts.map +1 -0
  20. package/dist/assemblyai-tool.js +127 -0
  21. package/dist/assemblyai-tool.js.map +1 -0
  22. package/dist/calendly-tool.d.ts +6 -0
  23. package/dist/calendly-tool.d.ts.map +1 -0
  24. package/dist/calendly-tool.js +182 -0
  25. package/dist/calendly-tool.js.map +1 -0
  26. package/dist/circleci-tool.d.ts +7 -0
  27. package/dist/circleci-tool.d.ts.map +1 -0
  28. package/dist/circleci-tool.js +133 -0
  29. package/dist/circleci-tool.js.map +1 -0
  30. package/dist/clickup-tool.d.ts +2 -0
  31. package/dist/clickup-tool.d.ts.map +1 -0
  32. package/dist/clickup-tool.js +153 -0
  33. package/dist/clickup-tool.js.map +1 -0
  34. package/dist/cohere-tool.d.ts +7 -0
  35. package/dist/cohere-tool.d.ts.map +1 -0
  36. package/dist/cohere-tool.js +225 -0
  37. package/dist/cohere-tool.js.map +1 -0
  38. package/dist/connectors/figma.d.ts +3 -0
  39. package/dist/connectors/figma.d.ts.map +1 -0
  40. package/dist/connectors/figma.js +18 -0
  41. package/dist/connectors/figma.js.map +1 -0
  42. package/dist/connectors/index.d.ts +3 -1
  43. package/dist/connectors/index.d.ts.map +1 -1
  44. package/dist/connectors/index.js +5 -1
  45. package/dist/connectors/index.js.map +1 -1
  46. package/dist/connectors/line.d.ts +3 -0
  47. package/dist/connectors/line.d.ts.map +1 -0
  48. package/dist/connectors/line.js +18 -0
  49. package/dist/connectors/line.js.map +1 -0
  50. package/dist/convertkit-tool.d.ts +7 -0
  51. package/dist/convertkit-tool.d.ts.map +1 -0
  52. package/dist/convertkit-tool.js +213 -0
  53. package/dist/convertkit-tool.js.map +1 -0
  54. package/dist/datadog-tool.d.ts +7 -0
  55. package/dist/datadog-tool.d.ts.map +1 -0
  56. package/dist/datadog-tool.js +121 -0
  57. package/dist/datadog-tool.js.map +1 -0
  58. package/dist/deepl-tool.d.ts +5 -0
  59. package/dist/deepl-tool.d.ts.map +1 -0
  60. package/dist/deepl-tool.js +137 -0
  61. package/dist/deepl-tool.js.map +1 -0
  62. package/dist/ebay-tool.d.ts +5 -0
  63. package/dist/ebay-tool.d.ts.map +1 -0
  64. package/dist/ebay-tool.js +179 -0
  65. package/dist/ebay-tool.js.map +1 -0
  66. package/dist/elevenlabs-tool.d.ts +6 -0
  67. package/dist/elevenlabs-tool.d.ts.map +1 -0
  68. package/dist/elevenlabs-tool.js +166 -0
  69. package/dist/elevenlabs-tool.js.map +1 -0
  70. package/dist/etsy-tool.d.ts +6 -0
  71. package/dist/etsy-tool.d.ts.map +1 -0
  72. package/dist/etsy-tool.js +125 -0
  73. package/dist/etsy-tool.js.map +1 -0
  74. package/dist/exchangerate-tool.d.ts +5 -0
  75. package/dist/exchangerate-tool.d.ts.map +1 -0
  76. package/dist/exchangerate-tool.js +139 -0
  77. package/dist/exchangerate-tool.js.map +1 -0
  78. package/dist/figma-tool.d.ts +8 -0
  79. package/dist/figma-tool.d.ts.map +1 -0
  80. package/dist/figma-tool.js +231 -0
  81. package/dist/figma-tool.js.map +1 -0
  82. package/dist/flyio-tool.d.ts +6 -0
  83. package/dist/flyio-tool.d.ts.map +1 -0
  84. package/dist/flyio-tool.js +158 -0
  85. package/dist/flyio-tool.js.map +1 -0
  86. package/dist/gdelt-tool.d.ts +5 -0
  87. package/dist/gdelt-tool.d.ts.map +1 -0
  88. package/dist/gdelt-tool.js +177 -0
  89. package/dist/gdelt-tool.js.map +1 -0
  90. package/dist/github-tool.d.ts +2 -0
  91. package/dist/github-tool.d.ts.map +1 -0
  92. package/dist/github-tool.js +165 -0
  93. package/dist/github-tool.js.map +1 -0
  94. package/dist/gitlab-tool.d.ts +2 -0
  95. package/dist/gitlab-tool.d.ts.map +1 -0
  96. package/dist/gitlab-tool.js +127 -0
  97. package/dist/gitlab-tool.js.map +1 -0
  98. package/dist/groq-tool.d.ts +3 -0
  99. package/dist/groq-tool.d.ts.map +1 -0
  100. package/dist/groq-tool.js +109 -0
  101. package/dist/groq-tool.js.map +1 -0
  102. package/dist/gumroad-tool.d.ts +6 -0
  103. package/dist/gumroad-tool.d.ts.map +1 -0
  104. package/dist/gumroad-tool.js +90 -0
  105. package/dist/gumroad-tool.js.map +1 -0
  106. package/dist/heygen-tool.d.ts +5 -0
  107. package/dist/heygen-tool.d.ts.map +1 -0
  108. package/dist/heygen-tool.js +134 -0
  109. package/dist/heygen-tool.js.map +1 -0
  110. package/dist/higgsfield-tool.d.ts +5 -0
  111. package/dist/higgsfield-tool.d.ts.map +1 -0
  112. package/dist/higgsfield-tool.js +120 -0
  113. package/dist/higgsfield-tool.js.map +1 -0
  114. package/dist/igdb-tool.d.ts +6 -0
  115. package/dist/igdb-tool.d.ts.map +1 -0
  116. package/dist/igdb-tool.js +140 -0
  117. package/dist/igdb-tool.js.map +1 -0
  118. package/dist/keychain-crypto.d.ts +24 -0
  119. package/dist/keychain-crypto.d.ts.map +1 -0
  120. package/dist/keychain-crypto.js +60 -0
  121. package/dist/keychain-crypto.js.map +1 -0
  122. package/dist/keychain-secure-input.d.ts +17 -0
  123. package/dist/keychain-secure-input.d.ts.map +1 -0
  124. package/dist/keychain-secure-input.js +229 -0
  125. package/dist/keychain-secure-input.js.map +1 -0
  126. package/dist/keychain-tool.d.ts +3 -0
  127. package/dist/keychain-tool.d.ts.map +1 -0
  128. package/dist/keychain-tool.js +516 -0
  129. package/dist/keychain-tool.js.map +1 -0
  130. package/dist/kling-tool.d.ts +3 -0
  131. package/dist/kling-tool.d.ts.map +1 -0
  132. package/dist/kling-tool.js +102 -0
  133. package/dist/kling-tool.js.map +1 -0
  134. package/dist/lemonsqueezy-tool.d.ts +7 -0
  135. package/dist/lemonsqueezy-tool.d.ts.map +1 -0
  136. package/dist/lemonsqueezy-tool.js +220 -0
  137. package/dist/lemonsqueezy-tool.js.map +1 -0
  138. package/dist/line-tool.d.ts +7 -0
  139. package/dist/line-tool.d.ts.map +1 -0
  140. package/dist/line-tool.js +188 -0
  141. package/dist/line-tool.js.map +1 -0
  142. package/dist/linear-tool.d.ts +2 -0
  143. package/dist/linear-tool.d.ts.map +1 -0
  144. package/dist/linear-tool.js +186 -0
  145. package/dist/linear-tool.js.map +1 -0
  146. package/dist/local-catalog-handlers.d.ts +3 -0
  147. package/dist/local-catalog-handlers.d.ts.map +1 -0
  148. package/dist/local-catalog-handlers.js +1254 -0
  149. package/dist/local-catalog-handlers.js.map +1 -0
  150. package/dist/mailchimp-tool.d.ts +8 -0
  151. package/dist/mailchimp-tool.d.ts.map +1 -0
  152. package/dist/mailchimp-tool.js +138 -0
  153. package/dist/mailchimp-tool.js.map +1 -0
  154. package/dist/mapbox-tool.d.ts +6 -0
  155. package/dist/mapbox-tool.d.ts.map +1 -0
  156. package/dist/mapbox-tool.js +106 -0
  157. package/dist/mapbox-tool.js.map +1 -0
  158. package/dist/mistral-tool.d.ts +4 -0
  159. package/dist/mistral-tool.d.ts.map +1 -0
  160. package/dist/mistral-tool.js +145 -0
  161. package/dist/mistral-tool.js.map +1 -0
  162. package/dist/mixpanel-tool.d.ts +6 -0
  163. package/dist/mixpanel-tool.d.ts.map +1 -0
  164. package/dist/mixpanel-tool.js +162 -0
  165. package/dist/mixpanel-tool.js.map +1 -0
  166. package/dist/monday-tool.d.ts +7 -0
  167. package/dist/monday-tool.d.ts.map +1 -0
  168. package/dist/monday-tool.js +206 -0
  169. package/dist/monday-tool.js.map +1 -0
  170. package/dist/neon-tool.d.ts +7 -0
  171. package/dist/neon-tool.d.ts.map +1 -0
  172. package/dist/neon-tool.js +156 -0
  173. package/dist/neon-tool.js.map +1 -0
  174. package/dist/openai-tool.d.ts +6 -0
  175. package/dist/openai-tool.d.ts.map +1 -0
  176. package/dist/openai-tool.js +227 -0
  177. package/dist/openai-tool.js.map +1 -0
  178. package/dist/pagerduty-tool.d.ts +8 -0
  179. package/dist/pagerduty-tool.d.ts.map +1 -0
  180. package/dist/pagerduty-tool.js +185 -0
  181. package/dist/pagerduty-tool.js.map +1 -0
  182. package/dist/paypal-tool.d.ts +3 -0
  183. package/dist/paypal-tool.d.ts.map +1 -0
  184. package/dist/paypal-tool.js +157 -0
  185. package/dist/paypal-tool.js.map +1 -0
  186. package/dist/perplexity-tool.d.ts +2 -0
  187. package/dist/perplexity-tool.d.ts.map +1 -0
  188. package/dist/perplexity-tool.js +93 -0
  189. package/dist/perplexity-tool.js.map +1 -0
  190. package/dist/pika-tool.d.ts +4 -0
  191. package/dist/pika-tool.d.ts.map +1 -0
  192. package/dist/pika-tool.js +102 -0
  193. package/dist/pika-tool.js.map +1 -0
  194. package/dist/pinecone-tool.d.ts +6 -0
  195. package/dist/pinecone-tool.d.ts.map +1 -0
  196. package/dist/pinecone-tool.js +148 -0
  197. package/dist/pinecone-tool.js.map +1 -0
  198. package/dist/pinterest-tool.d.ts +7 -0
  199. package/dist/pinterest-tool.d.ts.map +1 -0
  200. package/dist/pinterest-tool.js +219 -0
  201. package/dist/pinterest-tool.js.map +1 -0
  202. package/dist/plaid-tool.d.ts +6 -0
  203. package/dist/plaid-tool.d.ts.map +1 -0
  204. package/dist/plaid-tool.js +149 -0
  205. package/dist/plaid-tool.js.map +1 -0
  206. package/dist/postman-tool.d.ts +2 -0
  207. package/dist/postman-tool.d.ts.map +1 -0
  208. package/dist/postman-tool.js +92 -0
  209. package/dist/postman-tool.js.map +1 -0
  210. package/dist/postmark-tool.d.ts +7 -0
  211. package/dist/postmark-tool.d.ts.map +1 -0
  212. package/dist/postmark-tool.js +148 -0
  213. package/dist/postmark-tool.js.map +1 -0
  214. package/dist/pushover-tool.d.ts +6 -0
  215. package/dist/pushover-tool.d.ts.map +1 -0
  216. package/dist/pushover-tool.js +146 -0
  217. package/dist/pushover-tool.js.map +1 -0
  218. package/dist/qc-tool.d.ts +4 -0
  219. package/dist/qc-tool.d.ts.map +1 -0
  220. package/dist/qc-tool.js +415 -0
  221. package/dist/qc-tool.js.map +1 -0
  222. package/dist/quickbooks-tool.d.ts +5 -0
  223. package/dist/quickbooks-tool.d.ts.map +1 -0
  224. package/dist/quickbooks-tool.js +160 -0
  225. package/dist/quickbooks-tool.js.map +1 -0
  226. package/dist/render-tool.d.ts +7 -0
  227. package/dist/render-tool.d.ts.map +1 -0
  228. package/dist/render-tool.js +158 -0
  229. package/dist/render-tool.js.map +1 -0
  230. package/dist/replicate-tool.d.ts +7 -0
  231. package/dist/replicate-tool.d.ts.map +1 -0
  232. package/dist/replicate-tool.js +172 -0
  233. package/dist/replicate-tool.js.map +1 -0
  234. package/dist/runway-tool.d.ts +4 -0
  235. package/dist/runway-tool.d.ts.map +1 -0
  236. package/dist/runway-tool.js +110 -0
  237. package/dist/runway-tool.js.map +1 -0
  238. package/dist/segment-tool.d.ts +6 -0
  239. package/dist/segment-tool.d.ts.map +1 -0
  240. package/dist/segment-tool.js +129 -0
  241. package/dist/segment-tool.js.map +1 -0
  242. package/dist/sendgrid-tool.d.ts +7 -0
  243. package/dist/sendgrid-tool.d.ts.map +1 -0
  244. package/dist/sendgrid-tool.js +124 -0
  245. package/dist/sendgrid-tool.js.map +1 -0
  246. package/dist/sentry-tool.d.ts +2 -0
  247. package/dist/sentry-tool.d.ts.map +1 -0
  248. package/dist/sentry-tool.js +123 -0
  249. package/dist/sentry-tool.js.map +1 -0
  250. package/dist/server.d.ts.map +1 -1
  251. package/dist/server.js +10 -0
  252. package/dist/server.js.map +1 -1
  253. package/dist/speedrun-tool.d.ts +6 -0
  254. package/dist/speedrun-tool.d.ts.map +1 -0
  255. package/dist/speedrun-tool.js +192 -0
  256. package/dist/speedrun-tool.js.map +1 -0
  257. package/dist/spotify-tool.d.ts +8 -0
  258. package/dist/spotify-tool.d.ts.map +1 -0
  259. package/dist/spotify-tool.js +274 -0
  260. package/dist/spotify-tool.js.map +1 -0
  261. package/dist/square-tool.d.ts +5 -0
  262. package/dist/square-tool.d.ts.map +1 -0
  263. package/dist/square-tool.js +133 -0
  264. package/dist/square-tool.js.map +1 -0
  265. package/dist/stability-tool.d.ts +5 -0
  266. package/dist/stability-tool.d.ts.map +1 -0
  267. package/dist/stability-tool.js +190 -0
  268. package/dist/stability-tool.js.map +1 -0
  269. package/dist/steam-tool.d.ts +6 -0
  270. package/dist/steam-tool.d.ts.map +1 -0
  271. package/dist/steam-tool.js +222 -0
  272. package/dist/steam-tool.js.map +1 -0
  273. package/dist/stripe-tool.d.ts +7 -0
  274. package/dist/stripe-tool.d.ts.map +1 -0
  275. package/dist/stripe-tool.js +181 -0
  276. package/dist/stripe-tool.js.map +1 -0
  277. package/dist/tiktok-tool.d.ts +4 -0
  278. package/dist/tiktok-tool.d.ts.map +1 -0
  279. package/dist/tiktok-tool.js +129 -0
  280. package/dist/tiktok-tool.js.map +1 -0
  281. package/dist/togetherai-tool.d.ts +5 -0
  282. package/dist/togetherai-tool.d.ts.map +1 -0
  283. package/dist/togetherai-tool.js +129 -0
  284. package/dist/togetherai-tool.js.map +1 -0
  285. package/dist/toilets-tool.js +2 -2
  286. package/dist/tool-wiring.d.ts +7982 -18
  287. package/dist/tool-wiring.d.ts.map +1 -1
  288. package/dist/tool-wiring.js +5084 -18
  289. package/dist/tool-wiring.js.map +1 -1
  290. package/dist/trello-tool.d.ts +2 -0
  291. package/dist/trello-tool.d.ts.map +1 -0
  292. package/dist/trello-tool.js +166 -0
  293. package/dist/trello-tool.js.map +1 -0
  294. package/dist/turso-tool.d.ts +6 -0
  295. package/dist/turso-tool.d.ts.map +1 -0
  296. package/dist/turso-tool.js +158 -0
  297. package/dist/turso-tool.js.map +1 -0
  298. package/dist/twilio-tool.d.ts +8 -0
  299. package/dist/twilio-tool.d.ts.map +1 -0
  300. package/dist/twilio-tool.js +243 -0
  301. package/dist/twilio-tool.js.map +1 -0
  302. package/dist/upstash-tool.d.ts +8 -0
  303. package/dist/upstash-tool.d.ts.map +1 -0
  304. package/dist/upstash-tool.js +191 -0
  305. package/dist/upstash-tool.js.map +1 -0
  306. package/dist/whatsapp-tool.d.ts +6 -0
  307. package/dist/whatsapp-tool.d.ts.map +1 -0
  308. package/dist/whatsapp-tool.js +200 -0
  309. package/dist/whatsapp-tool.js.map +1 -0
  310. package/dist/woocommerce-tool.d.ts +4 -0
  311. package/dist/woocommerce-tool.d.ts.map +1 -0
  312. package/dist/woocommerce-tool.js +140 -0
  313. package/dist/woocommerce-tool.js.map +1 -0
  314. package/dist/youtube-tool.d.ts +7 -0
  315. package/dist/youtube-tool.d.ts.map +1 -0
  316. package/dist/youtube-tool.js +196 -0
  317. package/dist/youtube-tool.js.map +1 -0
  318. package/package.json +1 -1
  319. package/server.json +37 -37
  320. package/LICENSE +0 -216
  321. package/dist/cloudflare-worker.d.ts +0 -12
  322. package/dist/cloudflare-worker.d.ts.map +0 -1
  323. package/dist/cloudflare-worker.js +0 -50
  324. package/dist/cloudflare-worker.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ export declare function trelloAction(action: string, args: Record<string, unknown>): Promise<unknown>;
2
+ //# sourceMappingURL=trello-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trello-tool.d.ts","sourceRoot":"","sources":["../src/trello-tool.ts"],"names":[],"mappings":"AA8IA,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
@@ -0,0 +1,166 @@
1
+ // ── Trello REST API tool ───────────────────────────────────────────────────
2
+ // Wraps the Trello REST API (https://api.trello.com/1) via fetch.
3
+ // Auth: api_key + token (both required for write operations).
4
+ // No external dependencies.
5
+ const TRELLO_API = "https://api.trello.com/1";
6
+ // ── Fetch helper ───────────────────────────────────────────────────────────────
7
+ async function trelloFetch(apiKey, token, method, path, body, query) {
8
+ const url = new URL(`${TRELLO_API}${path}`);
9
+ url.searchParams.set("key", apiKey);
10
+ url.searchParams.set("token", token);
11
+ if (query) {
12
+ for (const [k, v] of Object.entries(query)) {
13
+ if (v !== undefined && v !== "")
14
+ url.searchParams.set(k, String(v));
15
+ }
16
+ }
17
+ const headers = {
18
+ Accept: "application/json",
19
+ "User-Agent": "UnClick-MCP/1.0",
20
+ };
21
+ if (body !== undefined) {
22
+ headers["Content-Type"] = "application/json";
23
+ }
24
+ let response;
25
+ try {
26
+ response = await fetch(url.toString(), {
27
+ method,
28
+ headers,
29
+ body: body !== undefined ? JSON.stringify(body) : undefined,
30
+ });
31
+ }
32
+ catch (err) {
33
+ return { error: `Network error reaching Trello API: ${err instanceof Error ? err.message : String(err)}` };
34
+ }
35
+ const text = await response.text();
36
+ let data;
37
+ try {
38
+ data = JSON.parse(text);
39
+ }
40
+ catch {
41
+ data = text;
42
+ }
43
+ if (response.status === 401)
44
+ return { error: "Trello API key or token is invalid. Check api_key and token.", status: 401 };
45
+ if (response.status === 403)
46
+ return { error: "Insufficient permissions for this Trello resource.", status: 403 };
47
+ if (response.status === 404)
48
+ return { error: "Board, list, or card not found.", status: 404 };
49
+ if (response.status === 429)
50
+ return { error: "Trello rate limit exceeded. Please wait and retry.", status: 429 };
51
+ if (!response.ok) {
52
+ return { error: `Trello API error ${response.status}: ${typeof data === "string" ? data : JSON.stringify(data)}`, status: response.status };
53
+ }
54
+ return data;
55
+ }
56
+ // ── Action implementations ─────────────────────────────────────────────────────
57
+ async function getBoards(apiKey, token, args) {
58
+ const memberId = String(args.member_id ?? "me").trim();
59
+ return trelloFetch(apiKey, token, "GET", `/members/${encodeURIComponent(memberId)}/boards`, undefined, {
60
+ fields: "id,name,desc,url,closed,idOrganization",
61
+ filter: args.filter ? String(args.filter) : "open",
62
+ });
63
+ }
64
+ async function getLists(apiKey, token, args) {
65
+ const boardId = String(args.board_id ?? "").trim();
66
+ if (!boardId)
67
+ return { error: "board_id is required." };
68
+ return trelloFetch(apiKey, token, "GET", `/boards/${encodeURIComponent(boardId)}/lists`, undefined, {
69
+ filter: args.filter ? String(args.filter) : "open",
70
+ });
71
+ }
72
+ async function getCards(apiKey, token, args) {
73
+ const listId = String(args.list_id ?? "").trim();
74
+ const boardId = String(args.board_id ?? "").trim();
75
+ if (listId) {
76
+ return trelloFetch(apiKey, token, "GET", `/lists/${encodeURIComponent(listId)}/cards`, undefined, {
77
+ fields: "id,name,desc,due,dueComplete,idList,idBoard,labels,url",
78
+ });
79
+ }
80
+ if (boardId) {
81
+ return trelloFetch(apiKey, token, "GET", `/boards/${encodeURIComponent(boardId)}/cards`, undefined, {
82
+ fields: "id,name,desc,due,dueComplete,idList,idBoard,labels,url",
83
+ filter: args.filter ? String(args.filter) : "open",
84
+ });
85
+ }
86
+ return { error: "list_id or board_id is required." };
87
+ }
88
+ async function createCard(apiKey, token, args) {
89
+ const listId = String(args.list_id ?? "").trim();
90
+ const name = String(args.name ?? "").trim();
91
+ if (!listId)
92
+ return { error: "list_id is required." };
93
+ if (!name)
94
+ return { error: "name is required." };
95
+ const body = { idList: listId, name };
96
+ if (args.desc)
97
+ body.desc = String(args.desc);
98
+ if (args.due)
99
+ body.due = String(args.due);
100
+ if (args.pos)
101
+ body.pos = String(args.pos);
102
+ if (args.id_labels)
103
+ body.idLabels = args.id_labels;
104
+ return trelloFetch(apiKey, token, "POST", "/cards", body);
105
+ }
106
+ async function updateCard(apiKey, token, args) {
107
+ const cardId = String(args.card_id ?? "").trim();
108
+ if (!cardId)
109
+ return { error: "card_id is required." };
110
+ const body = {};
111
+ if (args.name !== undefined)
112
+ body.name = String(args.name);
113
+ if (args.desc !== undefined)
114
+ body.desc = String(args.desc);
115
+ if (args.due !== undefined)
116
+ body.due = String(args.due);
117
+ if (args.due_complete !== undefined)
118
+ body.dueComplete = Boolean(args.due_complete);
119
+ if (args.id_list !== undefined)
120
+ body.idList = String(args.id_list);
121
+ if (args.closed !== undefined)
122
+ body.closed = Boolean(args.closed);
123
+ if (args.pos !== undefined)
124
+ body.pos = String(args.pos);
125
+ return trelloFetch(apiKey, token, "PUT", `/cards/${encodeURIComponent(cardId)}`, body);
126
+ }
127
+ async function searchCards(apiKey, token, args) {
128
+ const query = String(args.query ?? "").trim();
129
+ if (!query)
130
+ return { error: "query is required." };
131
+ return trelloFetch(apiKey, token, "GET", "/search", undefined, {
132
+ query,
133
+ modelTypes: "cards",
134
+ card_fields: "id,name,desc,due,dueComplete,idList,idBoard,url",
135
+ cards_limit: args.limit ? Number(args.limit) : 20,
136
+ card_board: "true",
137
+ card_list: "true",
138
+ });
139
+ }
140
+ // ── Public dispatcher ──────────────────────────────────────────────────────────
141
+ export async function trelloAction(action, args) {
142
+ const apiKey = String(args.api_key ?? "").trim();
143
+ const token = String(args.token ?? "").trim();
144
+ if (!apiKey)
145
+ return { error: "api_key is required." };
146
+ if (!token)
147
+ return { error: "token is required." };
148
+ try {
149
+ switch (action) {
150
+ case "get_boards": return getBoards(apiKey, token, args);
151
+ case "get_lists": return getLists(apiKey, token, args);
152
+ case "get_cards": return getCards(apiKey, token, args);
153
+ case "create_card": return createCard(apiKey, token, args);
154
+ case "update_card": return updateCard(apiKey, token, args);
155
+ case "search_cards": return searchCards(apiKey, token, args);
156
+ default:
157
+ return {
158
+ error: `Unknown Trello action: "${action}". Valid actions: get_boards, get_lists, get_cards, create_card, update_card, search_cards.`,
159
+ };
160
+ }
161
+ }
162
+ catch (err) {
163
+ return { error: err instanceof Error ? err.message : String(err) };
164
+ }
165
+ }
166
+ //# sourceMappingURL=trello-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trello-tool.js","sourceRoot":"","sources":["../src/trello-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function tursoListDatabases(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function tursoCreateDatabase(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function tursoListGroups(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function tursoGetDatabase(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function tursoExecuteSql(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=turso-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-tool.d.ts","sourceRoot":"","sources":["../src/turso-tool.ts"],"names":[],"mappings":"AAyDA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWxF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBzF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBtF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwCrF"}
@@ -0,0 +1,158 @@
1
+ // Turso SQLite Edge DB API integration for the UnClick MCP server.
2
+ // Uses the Turso REST API via fetch - no external dependencies.
3
+ // Users must supply an API key from app.turso.tech.
4
+ const TURSO_API_BASE = "https://api.turso.tech/v1";
5
+ // ── Fetch helper ──────────────────────────────────────────────────────────────
6
+ async function tursoFetch(apiKey, method, url, body) {
7
+ const headers = {
8
+ Authorization: `Bearer ${apiKey}`,
9
+ Accept: "application/json",
10
+ };
11
+ if (body !== undefined)
12
+ headers["Content-Type"] = "application/json";
13
+ let response;
14
+ try {
15
+ response = await fetch(url, {
16
+ method,
17
+ headers,
18
+ body: body !== undefined ? JSON.stringify(body) : undefined,
19
+ });
20
+ }
21
+ catch (err) {
22
+ return { error: `Network error reaching Turso API: ${err instanceof Error ? err.message : String(err)}` };
23
+ }
24
+ const text = await response.text();
25
+ let data;
26
+ try {
27
+ data = JSON.parse(text);
28
+ }
29
+ catch {
30
+ data = { raw: text };
31
+ }
32
+ if (response.status === 401)
33
+ return { error: "Turso API key is invalid or expired. Check your api_key.", status: 401 };
34
+ if (response.status === 403)
35
+ return { error: "Turso API: insufficient permissions.", status: 403 };
36
+ if (response.status === 404)
37
+ return { error: "Resource not found. Check the org, database name, or group.", status: 404 };
38
+ if (!response.ok) {
39
+ const errData = data;
40
+ const detail = errData?.error ?? errData?.message ?? text;
41
+ return { error: `Turso API error ${response.status}: ${detail}`, status: response.status };
42
+ }
43
+ return data;
44
+ }
45
+ // ── Operations ────────────────────────────────────────────────────────────────
46
+ export async function tursoListDatabases(args) {
47
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
48
+ if (!apiKey)
49
+ return { error: "api_key is required. Get one at app.turso.tech." };
50
+ const org = String(args.org ?? "").trim();
51
+ if (!org)
52
+ return { error: "org is required (your Turso organization name or username)." };
53
+ try {
54
+ return tursoFetch(apiKey, "GET", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/databases`);
55
+ }
56
+ catch (err) {
57
+ return { error: err instanceof Error ? err.message : String(err) };
58
+ }
59
+ }
60
+ export async function tursoCreateDatabase(args) {
61
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
62
+ if (!apiKey)
63
+ return { error: "api_key is required. Get one at app.turso.tech." };
64
+ const org = String(args.org ?? "").trim();
65
+ if (!org)
66
+ return { error: "org is required." };
67
+ const name = String(args.name ?? "").trim();
68
+ if (!name)
69
+ return { error: "name is required (the database name)." };
70
+ const group = String(args.group ?? "").trim();
71
+ if (!group)
72
+ return { error: "group is required (the placement group, e.g. 'default')." };
73
+ try {
74
+ return tursoFetch(apiKey, "POST", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/databases`, { name, group });
75
+ }
76
+ catch (err) {
77
+ return { error: err instanceof Error ? err.message : String(err) };
78
+ }
79
+ }
80
+ export async function tursoListGroups(args) {
81
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
82
+ if (!apiKey)
83
+ return { error: "api_key is required. Get one at app.turso.tech." };
84
+ const org = String(args.org ?? "").trim();
85
+ if (!org)
86
+ return { error: "org is required." };
87
+ try {
88
+ return tursoFetch(apiKey, "GET", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/groups`);
89
+ }
90
+ catch (err) {
91
+ return { error: err instanceof Error ? err.message : String(err) };
92
+ }
93
+ }
94
+ export async function tursoGetDatabase(args) {
95
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
96
+ if (!apiKey)
97
+ return { error: "api_key is required. Get one at app.turso.tech." };
98
+ const org = String(args.org ?? "").trim();
99
+ if (!org)
100
+ return { error: "org is required." };
101
+ const name = String(args.name ?? "").trim();
102
+ if (!name)
103
+ return { error: "name is required (the database name)." };
104
+ try {
105
+ return tursoFetch(apiKey, "GET", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/databases/${encodeURIComponent(name)}`);
106
+ }
107
+ catch (err) {
108
+ return { error: err instanceof Error ? err.message : String(err) };
109
+ }
110
+ }
111
+ export async function tursoExecuteSql(args) {
112
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
113
+ if (!apiKey)
114
+ return { error: "api_key is required. Get one at app.turso.tech." };
115
+ const org = String(args.org ?? "").trim();
116
+ if (!org)
117
+ return { error: "org is required." };
118
+ const dbName = String(args.db_name ?? "").trim();
119
+ if (!dbName)
120
+ return { error: "db_name is required." };
121
+ const sql = String(args.sql ?? "").trim();
122
+ if (!sql)
123
+ return { error: "sql is required." };
124
+ // Parse optional args array (positional query parameters)
125
+ let sqlArgs;
126
+ if (args.args !== undefined) {
127
+ if (Array.isArray(args.args)) {
128
+ sqlArgs = args.args;
129
+ }
130
+ else if (typeof args.args === "string") {
131
+ try {
132
+ sqlArgs = JSON.parse(args.args);
133
+ }
134
+ catch {
135
+ return { error: "args must be a JSON array of {type, value} objects." };
136
+ }
137
+ }
138
+ }
139
+ try {
140
+ // Build the database URL: {db_name}-{org}.turso.io
141
+ const dbHost = `https://${dbName}-${org}.turso.io`;
142
+ const pipelineUrl = `${dbHost}/v2/pipeline`;
143
+ const stmt = { sql };
144
+ if (sqlArgs)
145
+ stmt.args = sqlArgs;
146
+ const pipelineBody = {
147
+ requests: [
148
+ { type: "execute", stmt },
149
+ { type: "close" },
150
+ ],
151
+ };
152
+ return tursoFetch(apiKey, "POST", pipelineUrl, pipelineBody);
153
+ }
154
+ catch (err) {
155
+ return { error: err instanceof Error ? err.message : String(err) };
156
+ }
157
+ }
158
+ //# sourceMappingURL=turso-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-tool.js","sourceRoot":"","sources":["../src/turso-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function twilioSendSms(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function twilioListMessages(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function twilioGetMessage(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function twilioMakeCall(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function twilioListCalls(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function twilioSendVerify(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function twilioCheckVerify(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=twilio-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twilio-tool.d.ts","sourceRoot":"","sources":["../src/twilio-tool.ts"],"names":[],"mappings":"AAqJA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBnF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BxF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBtF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBpF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BrF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBtF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBvF"}
@@ -0,0 +1,243 @@
1
+ // Twilio REST API integration for the UnClick MCP server.
2
+ // Uses the Twilio REST API via fetch - no external dependencies.
3
+ // Users must supply their Account SID and Auth Token from the Twilio Console.
4
+ const TWILIO_API_BASE = "https://api.twilio.com/2010-04-01";
5
+ // ─── Auth helper ──────────────────────────────────────────────────────────────
6
+ function requireAuth(args) {
7
+ const accountSid = String(args.account_sid ?? "").trim();
8
+ const authToken = String(args.auth_token ?? "").trim();
9
+ if (!accountSid)
10
+ throw new Error("account_sid is required. Find it at console.twilio.com.");
11
+ if (!authToken)
12
+ throw new Error("auth_token is required. Find it at console.twilio.com.");
13
+ return { accountSid, authToken };
14
+ }
15
+ function basicAuth(accountSid, authToken) {
16
+ return "Basic " + Buffer.from(`${accountSid}:${authToken}`).toString("base64");
17
+ }
18
+ // ─── API helpers ──────────────────────────────────────────────────────────────
19
+ async function twilioPost(accountSid, authToken, path, params) {
20
+ const url = `${TWILIO_API_BASE}/Accounts/${accountSid}${path}.json`;
21
+ const body = new URLSearchParams(params).toString();
22
+ const res = await fetch(url, {
23
+ method: "POST",
24
+ headers: {
25
+ Authorization: basicAuth(accountSid, authToken),
26
+ "Content-Type": "application/x-www-form-urlencoded",
27
+ },
28
+ body,
29
+ });
30
+ const data = await res.json();
31
+ if (!res.ok) {
32
+ const code = data.code ? ` (code ${data.code})` : "";
33
+ throw new Error(`Twilio error${code}: ${data.message ?? `HTTP ${res.status}`}`);
34
+ }
35
+ return data;
36
+ }
37
+ async function twilioGet(accountSid, authToken, path, query = {}) {
38
+ const qs = new URLSearchParams(query).toString();
39
+ const url = `${TWILIO_API_BASE}/Accounts/${accountSid}${path}.json${qs ? `?${qs}` : ""}`;
40
+ const res = await fetch(url, {
41
+ headers: { Authorization: basicAuth(accountSid, authToken) },
42
+ });
43
+ const data = await res.json();
44
+ if (!res.ok) {
45
+ const code = data.code ? ` (code ${data.code})` : "";
46
+ throw new Error(`Twilio error${code}: ${data.message ?? `HTTP ${res.status}`}`);
47
+ }
48
+ return data;
49
+ }
50
+ async function twilioVerifyPost(accountSid, authToken, path, params) {
51
+ const url = `https://verify.twilio.com/v2${path}`;
52
+ const body = new URLSearchParams(params).toString();
53
+ const res = await fetch(url, {
54
+ method: "POST",
55
+ headers: {
56
+ Authorization: basicAuth(accountSid, authToken),
57
+ "Content-Type": "application/x-www-form-urlencoded",
58
+ },
59
+ body,
60
+ });
61
+ const data = await res.json();
62
+ if (!res.ok) {
63
+ const code = data.code ? ` (code ${data.code})` : "";
64
+ throw new Error(`Twilio Verify error${code}: ${data.message ?? `HTTP ${res.status}`}`);
65
+ }
66
+ return data;
67
+ }
68
+ // ─── Operations ───────────────────────────────────────────────────────────────
69
+ export async function twilioSendSms(args) {
70
+ const { accountSid, authToken } = requireAuth(args);
71
+ const to = String(args.to ?? "").trim();
72
+ const from = String(args.from ?? "").trim();
73
+ const body = String(args.body ?? "").trim();
74
+ if (!to)
75
+ throw new Error("to is required (E.164 phone number, e.g. +61400000000).");
76
+ if (!from)
77
+ throw new Error("from is required (your Twilio phone number or messaging service SID).");
78
+ if (!body)
79
+ throw new Error("body is required (message text).");
80
+ const params = { To: to, From: from, Body: body };
81
+ if (args.status_callback)
82
+ params.StatusCallback = String(args.status_callback);
83
+ const msg = await twilioPost(accountSid, authToken, "/Messages", params);
84
+ return {
85
+ success: true,
86
+ sid: msg.sid,
87
+ status: msg.status,
88
+ to: msg.to,
89
+ from: msg.from,
90
+ body: msg.body,
91
+ date_created: msg.date_created,
92
+ };
93
+ }
94
+ export async function twilioListMessages(args) {
95
+ const { accountSid, authToken } = requireAuth(args);
96
+ const query = {};
97
+ if (args.to)
98
+ query.To = String(args.to);
99
+ if (args.from)
100
+ query.From = String(args.from);
101
+ if (args.date_sent)
102
+ query.DateSent = String(args.date_sent);
103
+ const pageSize = Math.min(100, Math.max(1, Number(args.page_size ?? 20)));
104
+ query.PageSize = String(pageSize);
105
+ const data = await twilioGet(accountSid, authToken, "/Messages", query);
106
+ const messages = data.messages ?? [];
107
+ return {
108
+ count: messages.length,
109
+ messages: messages.map((m) => ({
110
+ sid: m.sid,
111
+ status: m.status,
112
+ from: m.from,
113
+ to: m.to,
114
+ body: m.body,
115
+ direction: m.direction,
116
+ date_created: m.date_created,
117
+ date_sent: m.date_sent,
118
+ error_code: m.error_code,
119
+ })),
120
+ next_page_uri: data.next_page_uri ?? null,
121
+ };
122
+ }
123
+ export async function twilioGetMessage(args) {
124
+ const { accountSid, authToken } = requireAuth(args);
125
+ const messageSid = String(args.message_sid ?? "").trim();
126
+ if (!messageSid)
127
+ throw new Error("message_sid is required.");
128
+ const msg = await twilioGet(accountSid, authToken, `/Messages/${encodeURIComponent(messageSid)}`);
129
+ return {
130
+ sid: msg.sid,
131
+ status: msg.status,
132
+ from: msg.from,
133
+ to: msg.to,
134
+ body: msg.body,
135
+ direction: msg.direction,
136
+ date_created: msg.date_created,
137
+ date_sent: msg.date_sent,
138
+ error_code: msg.error_code,
139
+ error_message: msg.error_message,
140
+ price: msg.price,
141
+ price_unit: msg.price_unit,
142
+ };
143
+ }
144
+ export async function twilioMakeCall(args) {
145
+ const { accountSid, authToken } = requireAuth(args);
146
+ const to = String(args.to ?? "").trim();
147
+ const from = String(args.from ?? "").trim();
148
+ const twiml = String(args.twiml ?? "").trim();
149
+ const url = String(args.url ?? "").trim();
150
+ if (!to)
151
+ throw new Error("to is required (E.164 phone number).");
152
+ if (!from)
153
+ throw new Error("from is required (your Twilio phone number).");
154
+ if (!twiml && !url)
155
+ throw new Error("Either twiml or url is required to specify call instructions.");
156
+ const params = { To: to, From: from };
157
+ if (twiml)
158
+ params.Twiml = twiml;
159
+ if (url)
160
+ params.Url = url;
161
+ if (args.status_callback)
162
+ params.StatusCallback = String(args.status_callback);
163
+ const call = await twilioPost(accountSid, authToken, "/Calls", params);
164
+ return {
165
+ success: true,
166
+ sid: call.sid,
167
+ status: call.status,
168
+ to: call.to,
169
+ from: call.from,
170
+ direction: call.direction,
171
+ };
172
+ }
173
+ export async function twilioListCalls(args) {
174
+ const { accountSid, authToken } = requireAuth(args);
175
+ const query = {};
176
+ if (args.to)
177
+ query.To = String(args.to);
178
+ if (args.from)
179
+ query.From = String(args.from);
180
+ if (args.status)
181
+ query.Status = String(args.status);
182
+ const pageSize = Math.min(100, Math.max(1, Number(args.page_size ?? 20)));
183
+ query.PageSize = String(pageSize);
184
+ const data = await twilioGet(accountSid, authToken, "/Calls", query);
185
+ const calls = data.calls ?? [];
186
+ return {
187
+ count: calls.length,
188
+ calls: calls.map((c) => ({
189
+ sid: c.sid,
190
+ status: c.status,
191
+ from: c.from,
192
+ to: c.to,
193
+ direction: c.direction,
194
+ duration: c.duration,
195
+ start_time: c.start_time,
196
+ end_time: c.end_time,
197
+ price: c.price,
198
+ })),
199
+ next_page_uri: data.next_page_uri ?? null,
200
+ };
201
+ }
202
+ export async function twilioSendVerify(args) {
203
+ const { accountSid, authToken } = requireAuth(args);
204
+ const serviceSid = String(args.service_sid ?? "").trim();
205
+ const to = String(args.to ?? "").trim();
206
+ const channel = String(args.channel ?? "sms").toLowerCase();
207
+ if (!serviceSid)
208
+ throw new Error("service_sid is required (Twilio Verify Service SID).");
209
+ if (!to)
210
+ throw new Error("to is required (E.164 phone number).");
211
+ const validChannels = ["sms", "call", "email", "whatsapp"];
212
+ if (!validChannels.includes(channel)) {
213
+ throw new Error(`Invalid channel "${channel}". Valid: ${validChannels.join(", ")}.`);
214
+ }
215
+ const result = await twilioVerifyPost(accountSid, authToken, `/Services/${encodeURIComponent(serviceSid)}/Verifications`, { To: to, Channel: channel });
216
+ return {
217
+ success: true,
218
+ sid: result.sid,
219
+ to: result.to,
220
+ channel: result.channel,
221
+ status: result.status,
222
+ };
223
+ }
224
+ export async function twilioCheckVerify(args) {
225
+ const { accountSid, authToken } = requireAuth(args);
226
+ const serviceSid = String(args.service_sid ?? "").trim();
227
+ const to = String(args.to ?? "").trim();
228
+ const code = String(args.code ?? "").trim();
229
+ if (!serviceSid)
230
+ throw new Error("service_sid is required.");
231
+ if (!to)
232
+ throw new Error("to is required (E.164 phone number).");
233
+ if (!code)
234
+ throw new Error("code is required (the OTP entered by the user).");
235
+ const result = await twilioVerifyPost(accountSid, authToken, `/Services/${encodeURIComponent(serviceSid)}/VerificationCheck`, { To: to, Code: code });
236
+ return {
237
+ valid: result.valid,
238
+ status: result.status,
239
+ to: result.to,
240
+ channel: result.channel,
241
+ };
242
+ }
243
+ //# sourceMappingURL=twilio-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twilio-tool.js","sourceRoot":"","sources":["../src/twilio-tool.ts"],"names":[],"mappings":"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"}