@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,227 @@
1
+ // OpenAI API integration for the UnClick MCP server.
2
+ // Uses the OpenAI REST API via fetch - no external dependencies.
3
+ // Users must supply an API key from platform.openai.com.
4
+ const OPENAI_API_BASE = "https://api.openai.com/v1";
5
+ // ─── Auth validation ──────────────────────────────────────────────────────────
6
+ function requireKey(args) {
7
+ const key = String(args.api_key ?? "").trim();
8
+ if (!key)
9
+ throw new Error("api_key is required. Get one at platform.openai.com/api-keys.");
10
+ return key;
11
+ }
12
+ // ─── API helpers ──────────────────────────────────────────────────────────────
13
+ async function openaiPost(apiKey, path, body, orgId) {
14
+ const headers = {
15
+ Authorization: `Bearer ${apiKey}`,
16
+ "Content-Type": "application/json",
17
+ };
18
+ if (orgId)
19
+ headers["OpenAI-Organization"] = orgId;
20
+ const res = await fetch(`${OPENAI_API_BASE}${path}`, {
21
+ method: "POST",
22
+ headers,
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 ? ` (${err.code})` : "";
30
+ const type = err?.type ? ` [${err.type}]` : "";
31
+ throw new Error(`OpenAI error${type}${code}: ${msg}`);
32
+ }
33
+ return data;
34
+ }
35
+ async function openaiGet(apiKey, path) {
36
+ const res = await fetch(`${OPENAI_API_BASE}${path}`, {
37
+ headers: { Authorization: `Bearer ${apiKey}` },
38
+ });
39
+ const data = await res.json();
40
+ if (!res.ok) {
41
+ const err = data.error;
42
+ const msg = err?.message ?? `HTTP ${res.status}`;
43
+ throw new Error(`OpenAI error: ${msg}`);
44
+ }
45
+ return data;
46
+ }
47
+ // ─── Operations ───────────────────────────────────────────────────────────────
48
+ export async function openaiChatCompletion(args) {
49
+ const apiKey = requireKey(args);
50
+ const model = String(args.model ?? "gpt-4o-mini");
51
+ const orgId = args.org_id ? String(args.org_id) : undefined;
52
+ // Parse messages
53
+ let messages;
54
+ if (Array.isArray(args.messages)) {
55
+ messages = args.messages;
56
+ }
57
+ else if (typeof args.messages === "string") {
58
+ try {
59
+ messages = JSON.parse(args.messages);
60
+ }
61
+ catch {
62
+ throw new Error("messages must be a JSON array of {role, content} objects.");
63
+ }
64
+ }
65
+ else if (args.prompt) {
66
+ // Convenience: single user message via 'prompt'
67
+ const systemPrompt = args.system_prompt ? String(args.system_prompt) : undefined;
68
+ messages = [];
69
+ if (systemPrompt)
70
+ messages.push({ role: "system", content: systemPrompt });
71
+ messages.push({ role: "user", content: String(args.prompt) });
72
+ }
73
+ else {
74
+ throw new Error("Either messages (array) or prompt (string) is required.");
75
+ }
76
+ if (messages.length === 0)
77
+ throw new Error("messages array must not be empty.");
78
+ const body = { model, messages };
79
+ if (args.max_tokens)
80
+ body.max_tokens = Number(args.max_tokens);
81
+ if (args.temperature !== undefined)
82
+ body.temperature = Number(args.temperature);
83
+ if (args.top_p !== undefined)
84
+ body.top_p = Number(args.top_p);
85
+ if (args.n !== undefined)
86
+ body.n = Number(args.n);
87
+ if (args.stop)
88
+ body.stop = args.stop;
89
+ if (args.response_format)
90
+ body.response_format = args.response_format;
91
+ if (args.seed !== undefined)
92
+ body.seed = Number(args.seed);
93
+ const result = await openaiPost(apiKey, "/chat/completions", body, orgId);
94
+ return {
95
+ id: result.id,
96
+ model: result.model,
97
+ created: new Date(result.created * 1000).toISOString(),
98
+ message: result.choices[0]?.message.content ?? null,
99
+ finish_reason: result.choices[0]?.finish_reason ?? null,
100
+ choices: result.choices.map((c) => ({
101
+ content: c.message.content,
102
+ finish_reason: c.finish_reason,
103
+ })),
104
+ usage: result.usage,
105
+ };
106
+ }
107
+ export async function openaiCreateEmbedding(args) {
108
+ const apiKey = requireKey(args);
109
+ const model = String(args.model ?? "text-embedding-3-small");
110
+ const orgId = args.org_id ? String(args.org_id) : undefined;
111
+ let input;
112
+ if (typeof args.input === "string") {
113
+ input = args.input;
114
+ }
115
+ else if (Array.isArray(args.input)) {
116
+ input = args.input;
117
+ }
118
+ else {
119
+ throw new Error("input is required (a string or array of strings to embed).");
120
+ }
121
+ const body = { model, input };
122
+ if (args.dimensions)
123
+ body.dimensions = Number(args.dimensions);
124
+ const result = await openaiPost(apiKey, "/embeddings", body, orgId);
125
+ return {
126
+ model: result.model,
127
+ embeddings: result.data.map((d) => ({
128
+ index: d.index,
129
+ dimensions: d.embedding.length,
130
+ embedding: d.embedding,
131
+ })),
132
+ usage: result.usage,
133
+ };
134
+ }
135
+ export async function openaiGenerateImage(args) {
136
+ const apiKey = requireKey(args);
137
+ const prompt = String(args.prompt ?? "").trim();
138
+ if (!prompt)
139
+ throw new Error("prompt is required.");
140
+ const model = String(args.model ?? "dall-e-3");
141
+ const n = Math.min(10, Math.max(1, Number(args.n ?? 1)));
142
+ const size = String(args.size ?? "1024x1024");
143
+ const quality = String(args.quality ?? "standard");
144
+ const style = args.style ? String(args.style) : undefined;
145
+ const responseFormat = String(args.response_format ?? "url");
146
+ const body = { model, prompt, n, size, quality, response_format: responseFormat };
147
+ if (style)
148
+ body.style = style;
149
+ const result = await openaiPost(apiKey, "/images/generations", body);
150
+ return {
151
+ count: result.data.length,
152
+ images: result.data.map((img) => ({
153
+ url: img.url ?? null,
154
+ b64_json: img.b64_json ?? null,
155
+ revised_prompt: img.revised_prompt ?? null,
156
+ })),
157
+ };
158
+ }
159
+ export async function openaiCreateTranscription(args) {
160
+ const apiKey = requireKey(args);
161
+ const audioUrl = String(args.audio_url ?? "").trim();
162
+ if (!audioUrl)
163
+ throw new Error("audio_url is required (URL of the audio file to transcribe).");
164
+ const model = String(args.model ?? "whisper-1");
165
+ const language = args.language ? String(args.language) : undefined;
166
+ const responseFormat = String(args.response_format ?? "json");
167
+ // Fetch the audio file
168
+ const audioRes = await fetch(audioUrl);
169
+ if (!audioRes.ok)
170
+ throw new Error(`Failed to fetch audio_url: HTTP ${audioRes.status}`);
171
+ const audioBlob = await audioRes.blob();
172
+ const filename = args.filename ? String(args.filename) : "audio.mp3";
173
+ const form = new FormData();
174
+ form.append("file", audioBlob, filename);
175
+ form.append("model", model);
176
+ form.append("response_format", responseFormat);
177
+ if (language)
178
+ form.append("language", language);
179
+ if (args.prompt)
180
+ form.append("prompt", String(args.prompt));
181
+ if (args.temperature !== undefined)
182
+ form.append("temperature", String(args.temperature));
183
+ const res = await fetch(`${OPENAI_API_BASE}/audio/transcriptions`, {
184
+ method: "POST",
185
+ headers: { Authorization: `Bearer ${apiKey}` },
186
+ body: form,
187
+ });
188
+ if (!res.ok) {
189
+ let msg = `HTTP ${res.status}`;
190
+ try {
191
+ const data = await res.json();
192
+ const err = data.error;
193
+ msg = err?.message ?? msg;
194
+ }
195
+ catch { /* ignore */ }
196
+ throw new Error(`OpenAI transcription error: ${msg}`);
197
+ }
198
+ if (responseFormat === "json" || responseFormat === "verbose_json") {
199
+ const data = await res.json();
200
+ return {
201
+ text: data.text,
202
+ language: data.language ?? null,
203
+ duration: data.duration ?? null,
204
+ model,
205
+ };
206
+ }
207
+ else {
208
+ const text = await res.text();
209
+ return { text, model };
210
+ }
211
+ }
212
+ export async function openaiListModels(args) {
213
+ const apiKey = requireKey(args);
214
+ const data = await openaiGet(apiKey, "/models");
215
+ const models = data.data ?? [];
216
+ // Sort by creation date descending
217
+ models.sort((a, b) => b.created - a.created);
218
+ return {
219
+ count: models.length,
220
+ models: models.map((m) => ({
221
+ id: m.id,
222
+ created: new Date(m.created * 1000).toISOString(),
223
+ owned_by: m.owned_by,
224
+ })),
225
+ };
226
+ }
227
+ //# sourceMappingURL=openai-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-tool.js","sourceRoot":"","sources":["../src/openai-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function pagerduty_list_incidents(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function pagerduty_get_incident(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function pagerduty_create_incident(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function pagerduty_acknowledge_incident(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function pagerduty_resolve_incident(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function pagerduty_list_services(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function pagerduty_list_oncalls(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=pagerduty-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagerduty-tool.d.ts","sourceRoot":"","sources":["../src/pagerduty-tool.ts"],"names":[],"mappings":"AAyEA,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAc9F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAM5F;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA2C/F;AAED,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQpG;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQhG;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAY7F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5F"}
@@ -0,0 +1,185 @@
1
+ // PagerDuty Incident Management API.
2
+ // Docs: https://developer.pagerduty.com/api-reference
3
+ // Auth: Token token=API_KEY (Authorization header)
4
+ // Base: https://api.pagerduty.com
5
+ const PD_API_BASE = "https://api.pagerduty.com";
6
+ function requireKey(args) {
7
+ const key = String(args.api_key ?? "").trim();
8
+ if (!key)
9
+ throw new Error("api_key is required. Get one at app.pagerduty.com/api_keys.");
10
+ return key;
11
+ }
12
+ async function pdGet(apiKey, path, query) {
13
+ const url = new URL(`${PD_API_BASE}${path}`);
14
+ if (query) {
15
+ for (const [k, v] of Object.entries(query)) {
16
+ if (v !== undefined && v !== "")
17
+ url.searchParams.set(k, v);
18
+ }
19
+ }
20
+ const res = await fetch(url.toString(), {
21
+ headers: {
22
+ Authorization: `Token token=${apiKey}`,
23
+ Accept: "application/vnd.pagerduty+json;version=2",
24
+ "Content-Type": "application/json",
25
+ },
26
+ });
27
+ const data = await res.json();
28
+ if (!res.ok) {
29
+ const msg = data.error?.message ?? `HTTP ${res.status}`;
30
+ throw new Error(`PagerDuty error (${res.status}): ${msg}`);
31
+ }
32
+ return data;
33
+ }
34
+ async function pdPost(apiKey, path, body) {
35
+ const res = await fetch(`${PD_API_BASE}${path}`, {
36
+ method: "POST",
37
+ headers: {
38
+ Authorization: `Token token=${apiKey}`,
39
+ Accept: "application/vnd.pagerduty+json;version=2",
40
+ "Content-Type": "application/json",
41
+ },
42
+ body: JSON.stringify(body),
43
+ });
44
+ const data = await res.json();
45
+ if (!res.ok) {
46
+ const msg = data.error?.message ?? `HTTP ${res.status}`;
47
+ throw new Error(`PagerDuty error (${res.status}): ${msg}`);
48
+ }
49
+ return data;
50
+ }
51
+ async function pdPut(apiKey, path, body) {
52
+ const res = await fetch(`${PD_API_BASE}${path}`, {
53
+ method: "PUT",
54
+ headers: {
55
+ Authorization: `Token token=${apiKey}`,
56
+ Accept: "application/vnd.pagerduty+json;version=2",
57
+ "Content-Type": "application/json",
58
+ },
59
+ body: JSON.stringify(body),
60
+ });
61
+ const data = await res.json();
62
+ if (!res.ok) {
63
+ const msg = data.error?.message ?? `HTTP ${res.status}`;
64
+ throw new Error(`PagerDuty error (${res.status}): ${msg}`);
65
+ }
66
+ return data;
67
+ }
68
+ // ─── Operations ───────────────────────────────────────────────────────────────
69
+ export async function pagerduty_list_incidents(args) {
70
+ const apiKey = requireKey(args);
71
+ const query = {};
72
+ if (args.status)
73
+ query["statuses[]"] = String(args.status);
74
+ if (args.limit)
75
+ query.limit = String(args.limit);
76
+ if (args.offset)
77
+ query.offset = String(args.offset);
78
+ if (args.service_ids)
79
+ query["service_ids[]"] = String(args.service_ids);
80
+ const data = await pdGet(apiKey, "/incidents", query);
81
+ return {
82
+ total: data.total,
83
+ count: data.incidents.length,
84
+ incidents: data.incidents,
85
+ };
86
+ }
87
+ export async function pagerduty_get_incident(args) {
88
+ const apiKey = requireKey(args);
89
+ const id = String(args.incident_id ?? "").trim();
90
+ if (!id)
91
+ throw new Error("incident_id is required.");
92
+ const data = await pdGet(apiKey, `/incidents/${id}`);
93
+ return data.incident;
94
+ }
95
+ export async function pagerduty_create_incident(args) {
96
+ const apiKey = requireKey(args);
97
+ const title = String(args.title ?? "").trim();
98
+ const serviceId = String(args.service_id ?? "").trim();
99
+ if (!title)
100
+ throw new Error("title is required.");
101
+ if (!serviceId)
102
+ throw new Error("service_id is required.");
103
+ const body = {
104
+ incident: {
105
+ type: "incident",
106
+ title,
107
+ service: { id: serviceId, type: "service_reference" },
108
+ },
109
+ };
110
+ if (args.urgency)
111
+ body.incident.urgency = String(args.urgency);
112
+ if (args.body_details) {
113
+ body.incident.body = {
114
+ type: "incident_body",
115
+ details: String(args.body_details),
116
+ };
117
+ }
118
+ if (args.from) {
119
+ // PagerDuty requires From header for incident creation
120
+ const res = await fetch(`${PD_API_BASE}/incidents`, {
121
+ method: "POST",
122
+ headers: {
123
+ Authorization: `Token token=${apiKey}`,
124
+ Accept: "application/vnd.pagerduty+json;version=2",
125
+ "Content-Type": "application/json",
126
+ From: String(args.from),
127
+ },
128
+ body: JSON.stringify(body),
129
+ });
130
+ const data = await res.json();
131
+ if (!res.ok) {
132
+ const msg = data.error?.message ?? `HTTP ${res.status}`;
133
+ throw new Error(`PagerDuty error (${res.status}): ${msg}`);
134
+ }
135
+ return data.incident;
136
+ }
137
+ const data = await pdPost(apiKey, "/incidents", body);
138
+ return data.incident;
139
+ }
140
+ export async function pagerduty_acknowledge_incident(args) {
141
+ const apiKey = requireKey(args);
142
+ const id = String(args.incident_id ?? "").trim();
143
+ if (!id)
144
+ throw new Error("incident_id is required.");
145
+ const body = { incident: { type: "incident", status: "acknowledged" } };
146
+ const data = await pdPut(apiKey, `/incidents/${id}`, body);
147
+ return { incident_id: id, status: "acknowledged", raw: data.incident };
148
+ }
149
+ export async function pagerduty_resolve_incident(args) {
150
+ const apiKey = requireKey(args);
151
+ const id = String(args.incident_id ?? "").trim();
152
+ if (!id)
153
+ throw new Error("incident_id is required.");
154
+ const body = { incident: { type: "incident", status: "resolved" } };
155
+ const data = await pdPut(apiKey, `/incidents/${id}`, body);
156
+ return { incident_id: id, status: "resolved", raw: data.incident };
157
+ }
158
+ export async function pagerduty_list_services(args) {
159
+ const apiKey = requireKey(args);
160
+ const query = {};
161
+ if (args.query)
162
+ query.query = String(args.query);
163
+ if (args.limit)
164
+ query.limit = String(args.limit);
165
+ const data = await pdGet(apiKey, "/services", query);
166
+ return {
167
+ total: data.total,
168
+ count: data.services.length,
169
+ services: data.services,
170
+ };
171
+ }
172
+ export async function pagerduty_list_oncalls(args) {
173
+ const apiKey = requireKey(args);
174
+ const query = {};
175
+ if (args.schedule_ids)
176
+ query["schedule_ids[]"] = String(args.schedule_ids);
177
+ if (args.user_ids)
178
+ query["user_ids[]"] = String(args.user_ids);
179
+ const data = await pdGet(apiKey, "/oncalls", query);
180
+ return {
181
+ count: data.oncalls.length,
182
+ oncalls: data.oncalls,
183
+ };
184
+ }
185
+ //# sourceMappingURL=pagerduty-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagerduty-tool.js","sourceRoot":"","sources":["../src/pagerduty-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function paypalOrders(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function paypalInvoices(args: Record<string, unknown>): Promise<unknown>;
3
+ //# sourceMappingURL=paypal-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paypal-tool.d.ts","sourceRoot":"","sources":["../src/paypal-tool.ts"],"names":[],"mappings":"AAoHA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBlF;AAID,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BpF"}
@@ -0,0 +1,157 @@
1
+ // ─── PayPal REST API Tool ────────────────────────────────────────────────────
2
+ // Covers orders, payments, and invoices.
3
+ // Auth: OAuth 2.0 client credentials (client_id + client_secret).
4
+ // Access token is fetched automatically per request.
5
+ // Base URLs:
6
+ // Live: https://api-m.paypal.com
7
+ // Sandbox: https://api-m.sandbox.paypal.com
8
+ // No external dependencies - native fetch only.
9
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
10
+ function requireConfig(args) {
11
+ const client_id = String(args.client_id ?? "").trim();
12
+ const client_secret = String(args.client_secret ?? "").trim();
13
+ if (!client_id)
14
+ return { error: "client_id is required (PayPal application Client ID)." };
15
+ if (!client_secret)
16
+ return { error: "client_secret is required (PayPal application Client Secret)." };
17
+ return {
18
+ client_id,
19
+ client_secret,
20
+ sandbox: args.sandbox === true || String(args.sandbox) === "true",
21
+ };
22
+ }
23
+ function baseUrl(cfg) {
24
+ return cfg.sandbox ? "https://api-m.sandbox.paypal.com" : "https://api-m.paypal.com";
25
+ }
26
+ async function getPayPalToken(cfg) {
27
+ const credentials = Buffer.from(`${cfg.client_id}:${cfg.client_secret}`).toString("base64");
28
+ let response;
29
+ try {
30
+ response = await fetch(`${baseUrl(cfg)}/v1/oauth2/token`, {
31
+ method: "POST",
32
+ headers: {
33
+ Authorization: `Basic ${credentials}`,
34
+ "Content-Type": "application/x-www-form-urlencoded",
35
+ "Accept": "application/json",
36
+ },
37
+ body: "grant_type=client_credentials",
38
+ });
39
+ }
40
+ catch (err) {
41
+ return { error: `Network error fetching PayPal token: ${err instanceof Error ? err.message : String(err)}` };
42
+ }
43
+ let data;
44
+ try {
45
+ data = await response.json();
46
+ }
47
+ catch {
48
+ return { error: "Non-JSON response from PayPal token endpoint." };
49
+ }
50
+ if (!response.ok) {
51
+ const d = data;
52
+ return { error: `PayPal auth failed (${response.status}): ${d["error_description"] ?? d["message"] ?? "unknown"}` };
53
+ }
54
+ return String(data["access_token"] ?? "");
55
+ }
56
+ async function paypalFetch(cfg, method, path, body, query) {
57
+ const tokenResult = await getPayPalToken(cfg);
58
+ if (typeof tokenResult === "object" && "error" in tokenResult)
59
+ return tokenResult;
60
+ const url = new URL(`${baseUrl(cfg)}${path}`);
61
+ if (query) {
62
+ for (const [k, v] of Object.entries(query)) {
63
+ if (v !== undefined)
64
+ url.searchParams.set(k, String(v));
65
+ }
66
+ }
67
+ let response;
68
+ try {
69
+ response = await fetch(url.toString(), {
70
+ method,
71
+ headers: {
72
+ Authorization: `Bearer ${tokenResult}`,
73
+ "Content-Type": "application/json",
74
+ "Accept": "application/json",
75
+ },
76
+ body: body !== undefined ? JSON.stringify(body) : undefined,
77
+ });
78
+ }
79
+ catch (err) {
80
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
81
+ }
82
+ if (response.status === 429) {
83
+ return { error: "PayPal rate limit reached. Wait before retrying.", status: 429 };
84
+ }
85
+ if (response.status === 204) {
86
+ return { success: true };
87
+ }
88
+ let data;
89
+ try {
90
+ data = await response.json();
91
+ }
92
+ catch {
93
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
94
+ }
95
+ if (!response.ok) {
96
+ const d = data;
97
+ return { error: d["message"] ?? d["error_description"] ?? "PayPal API error", status: response.status, detail: d };
98
+ }
99
+ return data;
100
+ }
101
+ // ─── paypal_orders ────────────────────────────────────────────────────────────
102
+ export async function paypalOrders(args) {
103
+ const cfg = requireConfig(args);
104
+ if ("error" in cfg)
105
+ return cfg;
106
+ const action = String(args.action ?? "get");
107
+ switch (action) {
108
+ case "create": {
109
+ const intent = String(args.intent ?? "CAPTURE");
110
+ const purchase_units = args.purchase_units;
111
+ if (!purchase_units || !Array.isArray(purchase_units)) {
112
+ return { error: "purchase_units (array) is required for action='create'." };
113
+ }
114
+ return paypalFetch(cfg, "POST", "/v2/checkout/orders", { intent, purchase_units });
115
+ }
116
+ case "get": {
117
+ const order_id = String(args.order_id ?? "").trim();
118
+ if (!order_id)
119
+ return { error: "order_id is required for action='get'." };
120
+ return paypalFetch(cfg, "GET", `/v2/checkout/orders/${encodeURIComponent(order_id)}`);
121
+ }
122
+ default:
123
+ return { error: `Unknown action "${action}". Valid: create, get.` };
124
+ }
125
+ }
126
+ // ─── paypal_invoices ──────────────────────────────────────────────────────────
127
+ export async function paypalInvoices(args) {
128
+ const cfg = requireConfig(args);
129
+ if ("error" in cfg)
130
+ return cfg;
131
+ const action = String(args.action ?? "list");
132
+ switch (action) {
133
+ case "list": {
134
+ return paypalFetch(cfg, "GET", "/v2/invoicing/invoices", undefined, {
135
+ page: args.page ? Number(args.page) : 1,
136
+ page_size: args.page_size ? Number(args.page_size) : 20,
137
+ });
138
+ }
139
+ case "create": {
140
+ if (!args.invoice || typeof args.invoice !== "object") {
141
+ return { error: "invoice object is required for action='create'." };
142
+ }
143
+ return paypalFetch(cfg, "POST", "/v2/invoicing/invoices", args.invoice);
144
+ }
145
+ case "send": {
146
+ const invoice_id = String(args.invoice_id ?? "").trim();
147
+ if (!invoice_id)
148
+ return { error: "invoice_id is required for action='send'." };
149
+ return paypalFetch(cfg, "POST", `/v2/invoicing/invoices/${encodeURIComponent(invoice_id)}/send`, {
150
+ send_to_invoicer: args.send_to_invoicer !== false,
151
+ });
152
+ }
153
+ default:
154
+ return { error: `Unknown action "${action}". Valid: list, create, send.` };
155
+ }
156
+ }
157
+ //# sourceMappingURL=paypal-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paypal-tool.js","sourceRoot":"","sources":["../src/paypal-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function perplexityChatCompletion(args: Record<string, unknown>): Promise<unknown>;
2
+ //# sourceMappingURL=perplexity-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perplexity-tool.d.ts","sourceRoot":"","sources":["../src/perplexity-tool.ts"],"names":[],"mappings":"AAiEA,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmD9F"}