@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,190 @@
1
+ // Stability AI API integration for the UnClick MCP server.
2
+ // Uses the Stability AI REST API via fetch - no external dependencies.
3
+ // Users must supply an API key from platform.stability.ai.
4
+ const STABILITY_API_BASE = "https://api.stability.ai";
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.stability.ai.");
10
+ return key;
11
+ }
12
+ // ─── API helpers ──────────────────────────────────────────────────────────────
13
+ async function stabilityGet(apiKey, path) {
14
+ const res = await fetch(`${STABILITY_API_BASE}${path}`, {
15
+ headers: {
16
+ Authorization: `Bearer ${apiKey}`,
17
+ Accept: "application/json",
18
+ },
19
+ });
20
+ const data = await res.json();
21
+ if (!res.ok) {
22
+ const msg = data.message ?? `HTTP ${res.status}`;
23
+ const id = data.id ? ` (id: ${data.id})` : "";
24
+ throw new Error(`Stability AI error${id}: ${msg}`);
25
+ }
26
+ return data;
27
+ }
28
+ async function stabilityPost(apiKey, path, body, acceptHeader = "application/json") {
29
+ const res = await fetch(`${STABILITY_API_BASE}${path}`, {
30
+ method: "POST",
31
+ headers: {
32
+ Authorization: `Bearer ${apiKey}`,
33
+ "Content-Type": "application/json",
34
+ Accept: acceptHeader,
35
+ },
36
+ body: JSON.stringify(body),
37
+ });
38
+ const data = await res.json();
39
+ if (!res.ok) {
40
+ const msg = data.message ?? `HTTP ${res.status}`;
41
+ const id = data.id ? ` (id: ${data.id})` : "";
42
+ throw new Error(`Stability AI error${id}: ${msg}`);
43
+ }
44
+ return data;
45
+ }
46
+ async function stabilityPostMultipart(apiKey, path, form) {
47
+ const res = await fetch(`${STABILITY_API_BASE}${path}`, {
48
+ method: "POST",
49
+ headers: {
50
+ Authorization: `Bearer ${apiKey}`,
51
+ Accept: "application/json",
52
+ },
53
+ body: form,
54
+ });
55
+ const data = await res.json();
56
+ if (!res.ok) {
57
+ const msg = data.message ?? `HTTP ${res.status}`;
58
+ throw new Error(`Stability AI error: ${msg}`);
59
+ }
60
+ return data;
61
+ }
62
+ // ─── Operations ───────────────────────────────────────────────────────────────
63
+ export async function stabilityTextToImage(args) {
64
+ const apiKey = requireKey(args);
65
+ const prompt = String(args.prompt ?? "").trim();
66
+ if (!prompt)
67
+ throw new Error("prompt is required.");
68
+ const engineId = String(args.engine_id ?? "stable-diffusion-xl-1024-v1-0");
69
+ const negativePrompt = String(args.negative_prompt ?? "").trim();
70
+ const width = Number(args.width ?? 1024);
71
+ const height = Number(args.height ?? 1024);
72
+ const steps = Math.min(150, Math.max(10, Number(args.steps ?? 30)));
73
+ const cfgScale = Math.min(35, Math.max(0, Number(args.cfg_scale ?? 7)));
74
+ const samples = Math.min(10, Math.max(1, Number(args.samples ?? 1)));
75
+ const stylePreset = args.style_preset ? String(args.style_preset) : undefined;
76
+ const textPrompts = [{ text: prompt, weight: 1 }];
77
+ if (negativePrompt)
78
+ textPrompts.push({ text: negativePrompt, weight: -1 });
79
+ const body = {
80
+ text_prompts: textPrompts,
81
+ cfg_scale: cfgScale,
82
+ height,
83
+ width,
84
+ steps,
85
+ samples,
86
+ };
87
+ if (stylePreset)
88
+ body.style_preset = stylePreset;
89
+ if (args.seed !== undefined)
90
+ body.seed = Number(args.seed);
91
+ const result = await stabilityPost(apiKey, `/v1/generation/${encodeURIComponent(engineId)}/text-to-image`, body);
92
+ return {
93
+ success: true,
94
+ engine_id: engineId,
95
+ count: result.artifacts.length,
96
+ images: result.artifacts.map((a) => ({
97
+ base64: a.base64,
98
+ seed: a.seed,
99
+ finish_reason: a.finishReason,
100
+ note: "Decode base64 and write as PNG to save the image.",
101
+ })),
102
+ };
103
+ }
104
+ export async function stabilityImageToImage(args) {
105
+ const apiKey = requireKey(args);
106
+ const prompt = String(args.prompt ?? "").trim();
107
+ const imageUrl = String(args.image_url ?? "").trim();
108
+ if (!prompt)
109
+ throw new Error("prompt is required.");
110
+ if (!imageUrl)
111
+ throw new Error("image_url is required (URL of the source image).");
112
+ const engineId = String(args.engine_id ?? "stable-diffusion-xl-1024-v1-0");
113
+ const strength = Math.min(1, Math.max(0, Number(args.strength ?? 0.35)));
114
+ const steps = Math.min(150, Math.max(10, Number(args.steps ?? 30)));
115
+ const cfgScale = Math.min(35, Math.max(0, Number(args.cfg_scale ?? 7)));
116
+ const samples = Math.min(10, Math.max(1, Number(args.samples ?? 1)));
117
+ // Fetch the source image
118
+ const imgRes = await fetch(imageUrl);
119
+ if (!imgRes.ok)
120
+ throw new Error(`Failed to fetch image_url: HTTP ${imgRes.status}`);
121
+ const imgBlob = await imgRes.blob();
122
+ const form = new FormData();
123
+ form.append("init_image", imgBlob, "init_image.png");
124
+ form.append("init_image_mode", "IMAGE_STRENGTH");
125
+ form.append("image_strength", String(strength));
126
+ form.append("text_prompts[0][text]", prompt);
127
+ form.append("text_prompts[0][weight]", "1");
128
+ const negativePrompt = String(args.negative_prompt ?? "").trim();
129
+ if (negativePrompt) {
130
+ form.append("text_prompts[1][text]", negativePrompt);
131
+ form.append("text_prompts[1][weight]", "-1");
132
+ }
133
+ form.append("cfg_scale", String(cfgScale));
134
+ form.append("steps", String(steps));
135
+ form.append("samples", String(samples));
136
+ const result = await stabilityPostMultipart(apiKey, `/v1/generation/${encodeURIComponent(engineId)}/image-to-image`, form);
137
+ return {
138
+ success: true,
139
+ engine_id: engineId,
140
+ count: result.artifacts.length,
141
+ images: result.artifacts.map((a) => ({
142
+ base64: a.base64,
143
+ seed: a.seed,
144
+ finish_reason: a.finishReason,
145
+ note: "Decode base64 and write as PNG to save the image.",
146
+ })),
147
+ };
148
+ }
149
+ export async function stabilityUpscale(args) {
150
+ const apiKey = requireKey(args);
151
+ const imageUrl = String(args.image_url ?? "").trim();
152
+ if (!imageUrl)
153
+ throw new Error("image_url is required (URL of the image to upscale).");
154
+ const width = Number(args.width ?? 2048);
155
+ const engineId = String(args.engine_id ?? "esrgan-v1-x2plus");
156
+ // Fetch source image
157
+ const imgRes = await fetch(imageUrl);
158
+ if (!imgRes.ok)
159
+ throw new Error(`Failed to fetch image_url: HTTP ${imgRes.status}`);
160
+ const imgBlob = await imgRes.blob();
161
+ const form = new FormData();
162
+ form.append("image", imgBlob, "image.png");
163
+ form.append("width", String(width));
164
+ const result = await stabilityPostMultipart(apiKey, `/v1/generation/${encodeURIComponent(engineId)}/image-to-image/upscale`, form);
165
+ return {
166
+ success: true,
167
+ engine_id: engineId,
168
+ count: result.artifacts.length,
169
+ images: result.artifacts.map((a) => ({
170
+ base64: a.base64,
171
+ seed: a.seed,
172
+ finish_reason: a.finishReason,
173
+ })),
174
+ };
175
+ }
176
+ export async function stabilityListEngines(args) {
177
+ const apiKey = requireKey(args);
178
+ const engines = await stabilityGet(apiKey, "/v1/engines/list");
179
+ return {
180
+ count: engines.length,
181
+ engines: engines.map((e) => ({
182
+ id: e.id,
183
+ name: e.name,
184
+ description: e.description,
185
+ type: e.type,
186
+ ready: e.ready,
187
+ })),
188
+ };
189
+ }
190
+ //# sourceMappingURL=stability-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stability-tool.js","sourceRoot":"","sources":["../src/stability-tool.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,uEAAuE;AACvE,2DAA2D;AAE3D,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAuBtD,iFAAiF;AAEjF,SAAS,UAAU,CAAC,IAA6B;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,YAAY,CAAI,MAAc,EAAE,IAAY;IACzD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,kBAAkB,GAAG,IAAI,EAAE,EAAE;QACtD,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,MAAM,EAAE,kBAAkB;SAC3B;KACF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAI,IAAI,CAAC,OAAkB,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAc,EACd,IAAY,EACZ,IAAa,EACb,YAAY,GAAG,kBAAkB;IAEjC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,kBAAkB,GAAG,IAAI,EAAE,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,YAAY;SACrB;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAI,IAAI,CAAC,OAAkB,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,kBAAkB,GAAG,IAAI,EAAE,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,MAAM,EAAE,kBAAkB;SAC3B;QACD,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAI,IAAI,CAAC,OAAkB,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAS,CAAC;AACnB,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAA6B;IACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,+BAA+B,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,cAAc;QAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAE3E,MAAM,IAAI,GAA4B;QACpC,YAAY,EAAE,WAAW;QACzB,SAAS,EAAE,QAAQ;QACnB,MAAM;QACN,KAAK;QACL,KAAK;QACL,OAAO;KACR,CAAC;IACF,IAAI,WAAW;QAAE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,MAAM,EAAE,kBAAkB,kBAAkB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAC7E,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;QAC9B,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,YAAY;YAC7B,IAAI,EAAE,mDAAmD;SAC1D,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAA6B;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,+BAA+B,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,MAAM,EAAE,kBAAkB,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAC9E,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;QAC9B,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,YAAY;YAC7B,IAAI,EAAE,mDAAmD;SAC1D,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA6B;IAClE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;IAE9D,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,MAAM,EAAE,kBAAkB,kBAAkB,CAAC,QAAQ,CAAC,yBAAyB,EAAE,IAAI,CACtF,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;QAC9B,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,YAAY;SAC9B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAA6B;IACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAoB,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAElF,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function getSteamPlayerSummaries(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function getSteamOwnedGames(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function getSteamAchievements(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function getSteamAppDetails(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function searchSteamStore(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=steam-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steam-tool.d.ts","sourceRoot":"","sources":["../src/steam-tool.ts"],"names":[],"mappings":"AAqDA,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAgC7F;AAGD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BxF;AAGD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmC1F;AAGD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCxF;AAGD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BtF"}
@@ -0,0 +1,222 @@
1
+ // Steam Web API - player data, games, achievements.
2
+ // Docs: https://developer.valvesoftware.com/wiki/Steam_Web_API
3
+ // Auth: STEAM_API_KEY (API key query param)
4
+ // Base: https://api.steampowered.com
5
+ const STEAM_BASE = "https://api.steampowered.com";
6
+ const STEAM_STORE_BASE = "https://store.steampowered.com/api";
7
+ function getApiKey(args) {
8
+ const key = String(args.api_key ?? process.env.STEAM_API_KEY ?? "").trim();
9
+ if (!key)
10
+ throw new Error("api_key is required (or set STEAM_API_KEY env var).");
11
+ return key;
12
+ }
13
+ async function steamGet(path, params) {
14
+ const url = new URL(`${STEAM_BASE}${path}`);
15
+ for (const [k, v] of Object.entries(params)) {
16
+ if (v !== undefined && v !== "")
17
+ url.searchParams.set(k, v);
18
+ }
19
+ const res = await fetch(url.toString(), {
20
+ headers: { Accept: "application/json" },
21
+ });
22
+ if (res.status === 401 || res.status === 403)
23
+ throw new Error("Invalid Steam API key.");
24
+ if (res.status === 429)
25
+ throw new Error("Steam rate limit exceeded.");
26
+ if (!res.ok) {
27
+ const body = await res.text().catch(() => "");
28
+ throw new Error(`Steam HTTP ${res.status}: ${body || res.statusText}`);
29
+ }
30
+ return res.json();
31
+ }
32
+ async function steamStoreGet(path, params) {
33
+ const url = new URL(`${STEAM_STORE_BASE}${path}`);
34
+ for (const [k, v] of Object.entries(params)) {
35
+ if (v !== undefined && v !== "")
36
+ url.searchParams.set(k, v);
37
+ }
38
+ const res = await fetch(url.toString(), {
39
+ headers: { Accept: "application/json" },
40
+ });
41
+ if (!res.ok) {
42
+ const body = await res.text().catch(() => "");
43
+ throw new Error(`Steam Store HTTP ${res.status}: ${body || res.statusText}`);
44
+ }
45
+ return res.json();
46
+ }
47
+ // get_steam_player_summaries
48
+ export async function getSteamPlayerSummaries(args) {
49
+ try {
50
+ const apiKey = getApiKey(args);
51
+ const steamids = String(args.steamids ?? "").trim();
52
+ if (!steamids)
53
+ return { error: "steamids is required (comma-separated Steam64 IDs, up to 100)." };
54
+ const json = await steamGet("/ISteamUser/GetPlayerSummaries/v2/", {
55
+ key: apiKey,
56
+ steamids,
57
+ });
58
+ const response = json.response;
59
+ const players = (response?.players ?? []);
60
+ return {
61
+ count: players.length,
62
+ players: players.map((p) => ({
63
+ steamid: p.steamid,
64
+ personaname: p.personaname,
65
+ profileurl: p.profileurl,
66
+ avatar: p.avatarfull,
67
+ personastate: p.personastate,
68
+ communityvisibilitystate: p.communityvisibilitystate,
69
+ country: p.loccountrycode,
70
+ lastlogoff: p.lastlogoff,
71
+ timecreated: p.timecreated,
72
+ gameid: p.gameid,
73
+ gameextrainfo: p.gameextrainfo,
74
+ })),
75
+ };
76
+ }
77
+ catch (err) {
78
+ return { error: err instanceof Error ? err.message : String(err) };
79
+ }
80
+ }
81
+ // get_steam_owned_games
82
+ export async function getSteamOwnedGames(args) {
83
+ try {
84
+ const apiKey = getApiKey(args);
85
+ const steamId = String(args.steamid ?? "").trim();
86
+ if (!steamId)
87
+ return { error: "steamid is required (Steam64 ID)." };
88
+ const params = {
89
+ key: apiKey,
90
+ steamid: steamId,
91
+ format: "json",
92
+ };
93
+ if (args.include_appinfo !== false)
94
+ params.include_appinfo = "1";
95
+ if (args.include_played_free_games)
96
+ params.include_played_free_games = "1";
97
+ const json = await steamGet("/IPlayerService/GetOwnedGames/v1/", params);
98
+ const response = json.response;
99
+ const games = (response?.games ?? []);
100
+ return {
101
+ game_count: response?.game_count ?? games.length,
102
+ games: games.map((g) => ({
103
+ appid: g.appid,
104
+ name: g.name,
105
+ playtime_forever: g.playtime_forever,
106
+ playtime_2weeks: g.playtime_2weeks,
107
+ img_icon_url: g.img_icon_url,
108
+ rtime_last_played: g.rtime_last_played,
109
+ })),
110
+ };
111
+ }
112
+ catch (err) {
113
+ return { error: err instanceof Error ? err.message : String(err) };
114
+ }
115
+ }
116
+ // get_steam_achievements
117
+ export async function getSteamAchievements(args) {
118
+ try {
119
+ const apiKey = getApiKey(args);
120
+ const steamId = String(args.steamid ?? "").trim();
121
+ if (!steamId)
122
+ return { error: "steamid is required." };
123
+ const appId = String(args.appid ?? "").trim();
124
+ if (!appId)
125
+ return { error: "appid is required (the game's Steam App ID)." };
126
+ const json = await steamGet("/ISteamUserStats/GetPlayerAchievements/v1/", {
127
+ key: apiKey,
128
+ steamid: steamId,
129
+ appid: appId,
130
+ });
131
+ const playerstats = json.playerstats;
132
+ if (playerstats?.error)
133
+ throw new Error(String(playerstats.error));
134
+ const achievements = (playerstats?.achievements ?? []);
135
+ const unlocked = achievements.filter((a) => a.achieved === 1);
136
+ return {
137
+ game_name: playerstats?.gameName,
138
+ steamid: playerstats?.steamID,
139
+ total: achievements.length,
140
+ unlocked: unlocked.length,
141
+ achievements: achievements.map((a) => ({
142
+ apiname: a.apiname,
143
+ achieved: a.achieved === 1,
144
+ unlocktime: a.unlocktime,
145
+ name: a.name,
146
+ description: a.description,
147
+ })),
148
+ };
149
+ }
150
+ catch (err) {
151
+ return { error: err instanceof Error ? err.message : String(err) };
152
+ }
153
+ }
154
+ // get_steam_app_details
155
+ export async function getSteamAppDetails(args) {
156
+ try {
157
+ const appId = String(args.appid ?? "").trim();
158
+ if (!appId)
159
+ return { error: "appid is required." };
160
+ const params = { appids: appId };
161
+ if (args.cc)
162
+ params.cc = String(args.cc);
163
+ if (args.l)
164
+ params.l = String(args.l);
165
+ const json = await steamStoreGet("/appdetails", params);
166
+ const appData = json[appId];
167
+ if (!appData?.success)
168
+ return { error: `App ${appId} not found or data unavailable.` };
169
+ const d = appData.data;
170
+ return {
171
+ steam_appid: d?.steam_appid,
172
+ name: d?.name,
173
+ type: d?.type,
174
+ is_free: d?.is_free,
175
+ short_description: d?.short_description,
176
+ developers: d?.developers,
177
+ publishers: d?.publishers,
178
+ price_overview: d?.price_overview,
179
+ platforms: d?.platforms,
180
+ genres: d?.genres,
181
+ release_date: d?.release_date,
182
+ metacritic: d?.metacritic,
183
+ header_image: d?.header_image,
184
+ website: d?.website,
185
+ };
186
+ }
187
+ catch (err) {
188
+ return { error: err instanceof Error ? err.message : String(err) };
189
+ }
190
+ }
191
+ // search_steam_store
192
+ export async function searchSteamStore(args) {
193
+ try {
194
+ const term = String(args.term ?? "").trim();
195
+ if (!term)
196
+ return { error: "term is required." };
197
+ const params = { term };
198
+ if (args.cc)
199
+ params.cc = String(args.cc);
200
+ if (args.l)
201
+ params.l = String(args.l);
202
+ const json = await steamStoreGet("/storesearch", params);
203
+ const items = (json.items ?? []);
204
+ return {
205
+ count: items.length,
206
+ total: json.total,
207
+ items: items.map((i) => ({
208
+ id: i.id,
209
+ name: i.name,
210
+ type: i.type,
211
+ tiny_image: i.tiny_image,
212
+ price: i.price,
213
+ metascore: i.metascore,
214
+ platforms: i.platforms,
215
+ })),
216
+ };
217
+ }
218
+ catch (err) {
219
+ return { error: err instanceof Error ? err.message : String(err) };
220
+ }
221
+ }
222
+ //# sourceMappingURL=steam-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steam-tool.js","sourceRoot":"","sources":["../src/steam-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function stripeCustomers(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function stripeCharges(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function stripeSubscriptions(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function stripeInvoices(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function stripeProducts(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function stripePrices(args: Record<string, unknown>): Promise<unknown>;
7
+ //# sourceMappingURL=stripe-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-tool.d.ts","sourceRoot":"","sources":["../src/stripe-tool.ts"],"names":[],"mappings":"AAgFA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBrF;AAID,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BnF;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWzF;AAID,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWpF;AAID,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CASpF;AAID,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWlF"}
@@ -0,0 +1,181 @@
1
+ // ─── Stripe REST API Tool ────────────────────────────────────────────────────
2
+ // Covers customers, charges, subscriptions, invoices, products, and prices.
3
+ // Auth: Secret key (Bearer token - sk_live_* or sk_test_*).
4
+ // Base URL: https://api.stripe.com/v1
5
+ // No external dependencies - native fetch only.
6
+ const STRIPE_BASE = "https://api.stripe.com/v1";
7
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
8
+ function requireConfig(args) {
9
+ const secret_key = String(args.secret_key ?? "").trim();
10
+ if (!secret_key)
11
+ return { error: "secret_key is required (Stripe secret key, starts with sk_)." };
12
+ return { secret_key };
13
+ }
14
+ async function stripeFetch(cfg, method, path, params) {
15
+ const url = new URL(`${STRIPE_BASE}${path}`);
16
+ let body;
17
+ if (method === "GET" && params) {
18
+ for (const [k, v] of Object.entries(params)) {
19
+ if (v !== undefined)
20
+ url.searchParams.set(k, String(v));
21
+ }
22
+ }
23
+ else if (method === "POST" && params) {
24
+ const form = new URLSearchParams();
25
+ for (const [k, v] of Object.entries(params)) {
26
+ if (v !== undefined)
27
+ form.set(k, String(v));
28
+ }
29
+ body = form.toString();
30
+ }
31
+ let response;
32
+ try {
33
+ response = await fetch(url.toString(), {
34
+ method,
35
+ headers: {
36
+ Authorization: `Bearer ${cfg.secret_key}`,
37
+ "Content-Type": "application/x-www-form-urlencoded",
38
+ },
39
+ body,
40
+ });
41
+ }
42
+ catch (err) {
43
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
44
+ }
45
+ if (response.status === 429) {
46
+ const retryAfter = response.headers.get("Retry-After");
47
+ return { error: "Stripe rate limit reached.", retry_after: retryAfter ? Number(retryAfter) : 5, status: 429 };
48
+ }
49
+ if (response.status === 401 || response.status === 403) {
50
+ return { error: "Stripe auth failed: invalid secret key.", status: response.status };
51
+ }
52
+ let data;
53
+ try {
54
+ data = await response.json();
55
+ }
56
+ catch {
57
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
58
+ }
59
+ if (!response.ok) {
60
+ const d = data;
61
+ const err = d["error"];
62
+ return { error: err?.["message"] ?? d["message"] ?? "Stripe API error", status: response.status };
63
+ }
64
+ return data;
65
+ }
66
+ // ─── stripe_customers ─────────────────────────────────────────────────────────
67
+ export async function stripeCustomers(args) {
68
+ const cfg = requireConfig(args);
69
+ if ("error" in cfg)
70
+ return cfg;
71
+ const action = String(args.action ?? "list");
72
+ switch (action) {
73
+ case "list": {
74
+ return stripeFetch(cfg, "GET", "/customers", {
75
+ limit: args.limit ? Number(args.limit) : 20,
76
+ starting_after: args.starting_after ? String(args.starting_after) : undefined,
77
+ email: args.email ? String(args.email) : undefined,
78
+ });
79
+ }
80
+ case "create": {
81
+ const params = {};
82
+ if (args.email)
83
+ params["email"] = String(args.email);
84
+ if (args.name)
85
+ params["name"] = String(args.name);
86
+ if (args.phone)
87
+ params["phone"] = String(args.phone);
88
+ if (args.description)
89
+ params["description"] = String(args.description);
90
+ return stripeFetch(cfg, "POST", "/customers", params);
91
+ }
92
+ default:
93
+ return { error: `Unknown action "${action}". Valid: list, create.` };
94
+ }
95
+ }
96
+ // ─── stripe_charges ───────────────────────────────────────────────────────────
97
+ export async function stripeCharges(args) {
98
+ const cfg = requireConfig(args);
99
+ if ("error" in cfg)
100
+ return cfg;
101
+ const action = String(args.action ?? "list");
102
+ switch (action) {
103
+ case "list": {
104
+ return stripeFetch(cfg, "GET", "/charges", {
105
+ limit: args.limit ? Number(args.limit) : 20,
106
+ starting_after: args.starting_after ? String(args.starting_after) : undefined,
107
+ customer: args.customer ? String(args.customer) : undefined,
108
+ created: args.created ? Number(args.created) : undefined,
109
+ });
110
+ }
111
+ case "create": {
112
+ const amount = Number(args.amount ?? 0);
113
+ const currency = String(args.currency ?? "").trim();
114
+ if (!amount)
115
+ return { error: "amount is required for action='create' (in smallest currency unit, e.g. cents)." };
116
+ if (!currency)
117
+ return { error: "currency is required for action='create' (e.g. 'usd')." };
118
+ const params = { amount, currency };
119
+ if (args.source)
120
+ params["source"] = String(args.source);
121
+ if (args.customer)
122
+ params["customer"] = String(args.customer);
123
+ if (args.description)
124
+ params["description"] = String(args.description);
125
+ return stripeFetch(cfg, "POST", "/charges", params);
126
+ }
127
+ default:
128
+ return { error: `Unknown action "${action}". Valid: list, create.` };
129
+ }
130
+ }
131
+ // ─── stripe_subscriptions ─────────────────────────────────────────────────────
132
+ export async function stripeSubscriptions(args) {
133
+ const cfg = requireConfig(args);
134
+ if ("error" in cfg)
135
+ return cfg;
136
+ return stripeFetch(cfg, "GET", "/subscriptions", {
137
+ limit: args.limit ? Number(args.limit) : 20,
138
+ starting_after: args.starting_after ? String(args.starting_after) : undefined,
139
+ customer: args.customer ? String(args.customer) : undefined,
140
+ status: args.status ? String(args.status) : undefined,
141
+ price: args.price ? String(args.price) : undefined,
142
+ });
143
+ }
144
+ // ─── stripe_invoices ──────────────────────────────────────────────────────────
145
+ export async function stripeInvoices(args) {
146
+ const cfg = requireConfig(args);
147
+ if ("error" in cfg)
148
+ return cfg;
149
+ return stripeFetch(cfg, "GET", "/invoices", {
150
+ limit: args.limit ? Number(args.limit) : 20,
151
+ starting_after: args.starting_after ? String(args.starting_after) : undefined,
152
+ customer: args.customer ? String(args.customer) : undefined,
153
+ status: args.status ? String(args.status) : undefined,
154
+ subscription: args.subscription ? String(args.subscription) : undefined,
155
+ });
156
+ }
157
+ // ─── stripe_products ──────────────────────────────────────────────────────────
158
+ export async function stripeProducts(args) {
159
+ const cfg = requireConfig(args);
160
+ if ("error" in cfg)
161
+ return cfg;
162
+ return stripeFetch(cfg, "GET", "/products", {
163
+ limit: args.limit ? Number(args.limit) : 20,
164
+ starting_after: args.starting_after ? String(args.starting_after) : undefined,
165
+ active: args.active !== undefined ? (args.active ? "true" : "false") : undefined,
166
+ });
167
+ }
168
+ // ─── stripe_prices ────────────────────────────────────────────────────────────
169
+ export async function stripePrices(args) {
170
+ const cfg = requireConfig(args);
171
+ if ("error" in cfg)
172
+ return cfg;
173
+ return stripeFetch(cfg, "GET", "/prices", {
174
+ limit: args.limit ? Number(args.limit) : 20,
175
+ starting_after: args.starting_after ? String(args.starting_after) : undefined,
176
+ product: args.product ? String(args.product) : undefined,
177
+ active: args.active !== undefined ? (args.active ? "true" : "false") : undefined,
178
+ type: args.type ? String(args.type) : undefined,
179
+ });
180
+ }
181
+ //# sourceMappingURL=stripe-tool.js.map