@unclick/mcp-server 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/airtable-tool.d.ts +2 -0
  2. package/dist/airtable-tool.d.ts.map +1 -0
  3. package/dist/airtable-tool.js +154 -0
  4. package/dist/airtable-tool.js.map +1 -0
  5. package/dist/anthropic-tool.d.ts +3 -0
  6. package/dist/anthropic-tool.d.ts.map +1 -0
  7. package/dist/anthropic-tool.js +123 -0
  8. package/dist/anthropic-tool.js.map +1 -0
  9. package/dist/asana-tool.d.ts +8 -0
  10. package/dist/asana-tool.d.ts.map +1 -0
  11. package/dist/asana-tool.js +218 -0
  12. package/dist/asana-tool.js.map +1 -0
  13. package/dist/calendly-tool.d.ts +6 -0
  14. package/dist/calendly-tool.d.ts.map +1 -0
  15. package/dist/calendly-tool.js +182 -0
  16. package/dist/calendly-tool.js.map +1 -0
  17. package/dist/clickup-tool.d.ts +2 -0
  18. package/dist/clickup-tool.d.ts.map +1 -0
  19. package/dist/clickup-tool.js +153 -0
  20. package/dist/clickup-tool.js.map +1 -0
  21. package/dist/connectors/figma.d.ts +3 -0
  22. package/dist/connectors/figma.d.ts.map +1 -0
  23. package/dist/connectors/figma.js +18 -0
  24. package/dist/connectors/figma.js.map +1 -0
  25. package/dist/connectors/index.d.ts +3 -1
  26. package/dist/connectors/index.d.ts.map +1 -1
  27. package/dist/connectors/index.js +5 -1
  28. package/dist/connectors/index.js.map +1 -1
  29. package/dist/connectors/line.d.ts +3 -0
  30. package/dist/connectors/line.d.ts.map +1 -0
  31. package/dist/connectors/line.js +18 -0
  32. package/dist/connectors/line.js.map +1 -0
  33. package/dist/ebay-tool.d.ts +5 -0
  34. package/dist/ebay-tool.d.ts.map +1 -0
  35. package/dist/ebay-tool.js +179 -0
  36. package/dist/ebay-tool.js.map +1 -0
  37. package/dist/elevenlabs-tool.d.ts +6 -0
  38. package/dist/elevenlabs-tool.d.ts.map +1 -0
  39. package/dist/elevenlabs-tool.js +166 -0
  40. package/dist/elevenlabs-tool.js.map +1 -0
  41. package/dist/etsy-tool.d.ts +6 -0
  42. package/dist/etsy-tool.d.ts.map +1 -0
  43. package/dist/etsy-tool.js +125 -0
  44. package/dist/etsy-tool.js.map +1 -0
  45. package/dist/exchangerate-tool.d.ts +5 -0
  46. package/dist/exchangerate-tool.d.ts.map +1 -0
  47. package/dist/exchangerate-tool.js +139 -0
  48. package/dist/exchangerate-tool.js.map +1 -0
  49. package/dist/figma-tool.d.ts +8 -0
  50. package/dist/figma-tool.d.ts.map +1 -0
  51. package/dist/figma-tool.js +231 -0
  52. package/dist/figma-tool.js.map +1 -0
  53. package/dist/gdelt-tool.d.ts +5 -0
  54. package/dist/gdelt-tool.d.ts.map +1 -0
  55. package/dist/gdelt-tool.js +177 -0
  56. package/dist/gdelt-tool.js.map +1 -0
  57. package/dist/github-tool.d.ts +2 -0
  58. package/dist/github-tool.d.ts.map +1 -0
  59. package/dist/github-tool.js +165 -0
  60. package/dist/github-tool.js.map +1 -0
  61. package/dist/gitlab-tool.d.ts +2 -0
  62. package/dist/gitlab-tool.d.ts.map +1 -0
  63. package/dist/gitlab-tool.js +127 -0
  64. package/dist/gitlab-tool.js.map +1 -0
  65. package/dist/igdb-tool.d.ts +6 -0
  66. package/dist/igdb-tool.d.ts.map +1 -0
  67. package/dist/igdb-tool.js +140 -0
  68. package/dist/igdb-tool.js.map +1 -0
  69. package/dist/line-tool.d.ts +7 -0
  70. package/dist/line-tool.d.ts.map +1 -0
  71. package/dist/line-tool.js +188 -0
  72. package/dist/line-tool.js.map +1 -0
  73. package/dist/linear-tool.d.ts +2 -0
  74. package/dist/linear-tool.d.ts.map +1 -0
  75. package/dist/linear-tool.js +186 -0
  76. package/dist/linear-tool.js.map +1 -0
  77. package/dist/monday-tool.d.ts +7 -0
  78. package/dist/monday-tool.d.ts.map +1 -0
  79. package/dist/monday-tool.js +206 -0
  80. package/dist/monday-tool.js.map +1 -0
  81. package/dist/openai-tool.d.ts +6 -0
  82. package/dist/openai-tool.d.ts.map +1 -0
  83. package/dist/openai-tool.js +227 -0
  84. package/dist/openai-tool.js.map +1 -0
  85. package/dist/paypal-tool.d.ts +3 -0
  86. package/dist/paypal-tool.d.ts.map +1 -0
  87. package/dist/paypal-tool.js +157 -0
  88. package/dist/paypal-tool.js.map +1 -0
  89. package/dist/pinterest-tool.d.ts +7 -0
  90. package/dist/pinterest-tool.d.ts.map +1 -0
  91. package/dist/pinterest-tool.js +219 -0
  92. package/dist/pinterest-tool.js.map +1 -0
  93. package/dist/plaid-tool.d.ts +6 -0
  94. package/dist/plaid-tool.d.ts.map +1 -0
  95. package/dist/plaid-tool.js +149 -0
  96. package/dist/plaid-tool.js.map +1 -0
  97. package/dist/postman-tool.d.ts +2 -0
  98. package/dist/postman-tool.d.ts.map +1 -0
  99. package/dist/postman-tool.js +92 -0
  100. package/dist/postman-tool.js.map +1 -0
  101. package/dist/pushover-tool.d.ts +6 -0
  102. package/dist/pushover-tool.d.ts.map +1 -0
  103. package/dist/pushover-tool.js +146 -0
  104. package/dist/pushover-tool.js.map +1 -0
  105. package/dist/quickbooks-tool.d.ts +5 -0
  106. package/dist/quickbooks-tool.d.ts.map +1 -0
  107. package/dist/quickbooks-tool.js +160 -0
  108. package/dist/quickbooks-tool.js.map +1 -0
  109. package/dist/replicate-tool.d.ts +7 -0
  110. package/dist/replicate-tool.d.ts.map +1 -0
  111. package/dist/replicate-tool.js +172 -0
  112. package/dist/replicate-tool.js.map +1 -0
  113. package/dist/sentry-tool.d.ts +2 -0
  114. package/dist/sentry-tool.d.ts.map +1 -0
  115. package/dist/sentry-tool.js +123 -0
  116. package/dist/sentry-tool.js.map +1 -0
  117. package/dist/speedrun-tool.d.ts +6 -0
  118. package/dist/speedrun-tool.d.ts.map +1 -0
  119. package/dist/speedrun-tool.js +192 -0
  120. package/dist/speedrun-tool.js.map +1 -0
  121. package/dist/spotify-tool.d.ts +8 -0
  122. package/dist/spotify-tool.d.ts.map +1 -0
  123. package/dist/spotify-tool.js +274 -0
  124. package/dist/spotify-tool.js.map +1 -0
  125. package/dist/square-tool.d.ts +5 -0
  126. package/dist/square-tool.d.ts.map +1 -0
  127. package/dist/square-tool.js +133 -0
  128. package/dist/square-tool.js.map +1 -0
  129. package/dist/stability-tool.d.ts +5 -0
  130. package/dist/stability-tool.d.ts.map +1 -0
  131. package/dist/stability-tool.js +190 -0
  132. package/dist/stability-tool.js.map +1 -0
  133. package/dist/steam-tool.d.ts +6 -0
  134. package/dist/steam-tool.d.ts.map +1 -0
  135. package/dist/steam-tool.js +222 -0
  136. package/dist/steam-tool.js.map +1 -0
  137. package/dist/stripe-tool.d.ts +7 -0
  138. package/dist/stripe-tool.d.ts.map +1 -0
  139. package/dist/stripe-tool.js +181 -0
  140. package/dist/stripe-tool.js.map +1 -0
  141. package/dist/tiktok-tool.d.ts +4 -0
  142. package/dist/tiktok-tool.d.ts.map +1 -0
  143. package/dist/tiktok-tool.js +129 -0
  144. package/dist/tiktok-tool.js.map +1 -0
  145. package/dist/toilets-tool.js +2 -2
  146. package/dist/tool-wiring.d.ts +4066 -18
  147. package/dist/tool-wiring.d.ts.map +1 -1
  148. package/dist/tool-wiring.js +2601 -18
  149. package/dist/tool-wiring.js.map +1 -1
  150. package/dist/trello-tool.d.ts +2 -0
  151. package/dist/trello-tool.d.ts.map +1 -0
  152. package/dist/trello-tool.js +166 -0
  153. package/dist/trello-tool.js.map +1 -0
  154. package/dist/twilio-tool.d.ts +8 -0
  155. package/dist/twilio-tool.d.ts.map +1 -0
  156. package/dist/twilio-tool.js +243 -0
  157. package/dist/twilio-tool.js.map +1 -0
  158. package/dist/whatsapp-tool.d.ts +6 -0
  159. package/dist/whatsapp-tool.d.ts.map +1 -0
  160. package/dist/whatsapp-tool.js +200 -0
  161. package/dist/whatsapp-tool.js.map +1 -0
  162. package/dist/woocommerce-tool.d.ts +4 -0
  163. package/dist/woocommerce-tool.d.ts.map +1 -0
  164. package/dist/woocommerce-tool.js +140 -0
  165. package/dist/woocommerce-tool.js.map +1 -0
  166. package/dist/youtube-tool.d.ts +7 -0
  167. package/dist/youtube-tool.d.ts.map +1 -0
  168. package/dist/youtube-tool.js +196 -0
  169. package/dist/youtube-tool.js.map +1 -0
  170. package/package.json +2 -2
  171. package/server.json +24 -5
  172. package/dist/cloudflare-worker.d.ts +0 -12
  173. package/dist/cloudflare-worker.d.ts.map +0 -1
  174. package/dist/cloudflare-worker.js +0 -50
  175. package/dist/cloudflare-worker.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinterest-tool.js","sourceRoot":"","sources":["../src/pinterest-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function plaidAccounts(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function plaidTransactions(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function plaidBalances(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function plaidIdentity(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function plaidLinkTokenCreate(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=plaid-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaid-tool.d.ts","sourceRoot":"","sources":["../src/plaid-tool.ts"],"names":[],"mappings":"AA8EA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWnF;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBvF;AAID,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWnF;AAID,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnF;AAID,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB1F"}
@@ -0,0 +1,149 @@
1
+ // ─── Plaid API Tool ──────────────────────────────────────────────────────────
2
+ // Covers accounts, transactions, balances, identity, and link token creation.
3
+ // Auth: client_id + secret in request body (Plaid API convention).
4
+ // Environments: sandbox, development, production.
5
+ // Base URL: https://{env}.plaid.com
6
+ // No external dependencies - native fetch only.
7
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
8
+ function requireConfig(args) {
9
+ const client_id = String(args.client_id ?? "").trim();
10
+ const secret = String(args.secret ?? "").trim();
11
+ const environment = String(args.environment ?? "sandbox").trim();
12
+ if (!client_id)
13
+ return { error: "client_id is required (Plaid client ID)." };
14
+ if (!secret)
15
+ return { error: "secret is required (Plaid secret key)." };
16
+ const validEnvs = ["sandbox", "development", "production"];
17
+ if (!validEnvs.includes(environment)) {
18
+ return { error: `environment must be one of: ${validEnvs.join(", ")}.` };
19
+ }
20
+ return { client_id, secret, environment };
21
+ }
22
+ async function plaidFetch(cfg, path, body) {
23
+ const url = `https://${cfg.environment}.plaid.com${path}`;
24
+ let response;
25
+ try {
26
+ response = await fetch(url, {
27
+ method: "POST",
28
+ headers: {
29
+ "Content-Type": "application/json",
30
+ "Plaid-Version": "2020-09-14",
31
+ },
32
+ body: JSON.stringify({
33
+ client_id: cfg.client_id,
34
+ secret: cfg.secret,
35
+ ...body,
36
+ }),
37
+ });
38
+ }
39
+ catch (err) {
40
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
41
+ }
42
+ if (response.status === 429) {
43
+ return { error: "Plaid rate limit reached. Wait before retrying.", status: 429 };
44
+ }
45
+ let data;
46
+ try {
47
+ data = await response.json();
48
+ }
49
+ catch {
50
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
51
+ }
52
+ if (!response.ok) {
53
+ const d = data;
54
+ return {
55
+ error: d["error_message"] ?? d["message"] ?? "Plaid API error",
56
+ error_code: d["error_code"],
57
+ error_type: d["error_type"],
58
+ display_message: d["display_message"],
59
+ status: response.status,
60
+ };
61
+ }
62
+ return data;
63
+ }
64
+ // ─── plaid_accounts ───────────────────────────────────────────────────────────
65
+ export async function plaidAccounts(args) {
66
+ const cfg = requireConfig(args);
67
+ if ("error" in cfg)
68
+ return cfg;
69
+ const access_token = String(args.access_token ?? "").trim();
70
+ if (!access_token)
71
+ return { error: "access_token is required (Plaid item access token)." };
72
+ return plaidFetch(cfg, "/accounts/get", {
73
+ access_token,
74
+ options: args.account_ids ? { account_ids: args.account_ids } : undefined,
75
+ });
76
+ }
77
+ // ─── plaid_transactions ───────────────────────────────────────────────────────
78
+ export async function plaidTransactions(args) {
79
+ const cfg = requireConfig(args);
80
+ if ("error" in cfg)
81
+ return cfg;
82
+ const access_token = String(args.access_token ?? "").trim();
83
+ const start_date = String(args.start_date ?? "").trim();
84
+ const end_date = String(args.end_date ?? "").trim();
85
+ if (!access_token)
86
+ return { error: "access_token is required." };
87
+ if (!start_date)
88
+ return { error: "start_date is required (YYYY-MM-DD)." };
89
+ if (!end_date)
90
+ return { error: "end_date is required (YYYY-MM-DD)." };
91
+ return plaidFetch(cfg, "/transactions/get", {
92
+ access_token,
93
+ start_date,
94
+ end_date,
95
+ options: {
96
+ count: args.count ? Number(args.count) : 100,
97
+ offset: args.offset ? Number(args.offset) : 0,
98
+ account_ids: args.account_ids ?? undefined,
99
+ },
100
+ });
101
+ }
102
+ // ─── plaid_balances ───────────────────────────────────────────────────────────
103
+ export async function plaidBalances(args) {
104
+ const cfg = requireConfig(args);
105
+ if ("error" in cfg)
106
+ return cfg;
107
+ const access_token = String(args.access_token ?? "").trim();
108
+ if (!access_token)
109
+ return { error: "access_token is required." };
110
+ return plaidFetch(cfg, "/accounts/balance/get", {
111
+ access_token,
112
+ options: args.account_ids ? { account_ids: args.account_ids } : undefined,
113
+ });
114
+ }
115
+ // ─── plaid_identity ───────────────────────────────────────────────────────────
116
+ export async function plaidIdentity(args) {
117
+ const cfg = requireConfig(args);
118
+ if ("error" in cfg)
119
+ return cfg;
120
+ const access_token = String(args.access_token ?? "").trim();
121
+ if (!access_token)
122
+ return { error: "access_token is required." };
123
+ return plaidFetch(cfg, "/identity/get", { access_token });
124
+ }
125
+ // ─── plaid_link_token_create ──────────────────────────────────────────────────
126
+ export async function plaidLinkTokenCreate(args) {
127
+ const cfg = requireConfig(args);
128
+ if ("error" in cfg)
129
+ return cfg;
130
+ const user_client_user_id = String(args.user_client_user_id ?? "").trim();
131
+ if (!user_client_user_id)
132
+ return { error: "user_client_user_id is required (unique ID for the user)." };
133
+ const products = args.products && Array.isArray(args.products)
134
+ ? args.products
135
+ : ["transactions"];
136
+ const country_codes = args.country_codes && Array.isArray(args.country_codes)
137
+ ? args.country_codes
138
+ : ["US"];
139
+ return plaidFetch(cfg, "/link/token/create", {
140
+ user: { client_user_id: user_client_user_id },
141
+ client_name: args.client_name ? String(args.client_name) : "UnClick Agent",
142
+ products,
143
+ country_codes,
144
+ language: args.language ? String(args.language) : "en",
145
+ webhook: args.webhook ? String(args.webhook) : undefined,
146
+ access_token: args.access_token ? String(args.access_token) : undefined,
147
+ });
148
+ }
149
+ //# sourceMappingURL=plaid-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaid-tool.js","sourceRoot":"","sources":["../src/plaid-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function postmanAction(action: string, args: Record<string, unknown>): Promise<unknown>;
2
+ //# sourceMappingURL=postman-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postman-tool.d.ts","sourceRoot":"","sources":["../src/postman-tool.ts"],"names":[],"mappings":"AA8EA,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
@@ -0,0 +1,92 @@
1
+ // ── Postman API tool ───────────────────────────────────────────────────────
2
+ // Wraps the Postman API (https://api.getpostman.com) via fetch.
3
+ // Auth: API key passed as api_key (X-Api-Key header).
4
+ // No external dependencies.
5
+ const POSTMAN_API = "https://api.getpostman.com";
6
+ // ── Fetch helper ───────────────────────────────────────────────────────────────
7
+ async function postmanFetch(apiKey, path, query) {
8
+ const url = new URL(`${POSTMAN_API}${path}`);
9
+ if (query) {
10
+ for (const [k, v] of Object.entries(query)) {
11
+ if (v !== undefined && v !== "")
12
+ url.searchParams.set(k, String(v));
13
+ }
14
+ }
15
+ let response;
16
+ try {
17
+ response = await fetch(url.toString(), {
18
+ headers: {
19
+ "X-Api-Key": apiKey,
20
+ "User-Agent": "UnClick-MCP/1.0",
21
+ },
22
+ });
23
+ }
24
+ catch (err) {
25
+ return { error: `Network error reaching Postman API: ${err instanceof Error ? err.message : String(err)}` };
26
+ }
27
+ const text = await response.text();
28
+ let data;
29
+ try {
30
+ data = JSON.parse(text);
31
+ }
32
+ catch {
33
+ data = { raw: text };
34
+ }
35
+ if (response.status === 401)
36
+ return { error: "Postman API key is invalid. Check your api_key.", status: 401 };
37
+ if (response.status === 403)
38
+ return { error: "Insufficient permissions for this Postman resource.", status: 403 };
39
+ if (response.status === 404)
40
+ return { error: "Collection, environment, or monitor not found.", status: 404 };
41
+ if (response.status === 429)
42
+ return { error: "Postman API rate limit exceeded. Please wait and retry.", status: 429 };
43
+ if (!response.ok) {
44
+ const detail = data?.error ?? text;
45
+ return { error: `Postman API error ${response.status}: ${detail}`, status: response.status };
46
+ }
47
+ return data;
48
+ }
49
+ // ── Action implementations ─────────────────────────────────────────────────────
50
+ async function listCollections(apiKey, args) {
51
+ return postmanFetch(apiKey, "/collections", {
52
+ workspace: args.workspace_id ? String(args.workspace_id) : undefined,
53
+ });
54
+ }
55
+ async function getCollection(apiKey, args) {
56
+ const collectionId = String(args.collection_id ?? "").trim();
57
+ if (!collectionId)
58
+ return { error: "collection_id is required." };
59
+ return postmanFetch(apiKey, `/collections/${encodeURIComponent(collectionId)}`);
60
+ }
61
+ async function listEnvironments(apiKey, args) {
62
+ return postmanFetch(apiKey, "/environments", {
63
+ workspace: args.workspace_id ? String(args.workspace_id) : undefined,
64
+ });
65
+ }
66
+ async function listMonitors(apiKey, args) {
67
+ return postmanFetch(apiKey, "/monitors", {
68
+ workspace: args.workspace_id ? String(args.workspace_id) : undefined,
69
+ });
70
+ }
71
+ // ── Public dispatcher ──────────────────────────────────────────────────────────
72
+ export async function postmanAction(action, args) {
73
+ const apiKey = String(args.api_key ?? "").trim();
74
+ if (!apiKey)
75
+ return { error: "api_key is required." };
76
+ try {
77
+ switch (action) {
78
+ case "list_collections": return listCollections(apiKey, args);
79
+ case "get_collection": return getCollection(apiKey, args);
80
+ case "list_environments": return listEnvironments(apiKey, args);
81
+ case "list_monitors": return listMonitors(apiKey, args);
82
+ default:
83
+ return {
84
+ error: `Unknown Postman action: "${action}". Valid actions: list_collections, get_collection, list_environments, list_monitors.`,
85
+ };
86
+ }
87
+ }
88
+ catch (err) {
89
+ return { error: err instanceof Error ? err.message : String(err) };
90
+ }
91
+ }
92
+ //# sourceMappingURL=postman-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postman-tool.js","sourceRoot":"","sources":["../src/postman-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function pushoverSendNotification(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function pushoverGetReceipt(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function pushoverCancelEmergency(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function pushoverListSounds(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function pushoverValidateUser(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=pushover-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushover-tool.d.ts","sourceRoot":"","sources":["../src/pushover-tool.ts"],"names":[],"mappings":"AAwFA,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwC9F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBxF;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB7F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAY1F"}
@@ -0,0 +1,146 @@
1
+ // Pushover API integration for the UnClick MCP server.
2
+ // Uses the Pushover REST API via fetch - no external dependencies.
3
+ // Users must supply an app token (from pushover.net/apps) and a user/group key.
4
+ const PUSHOVER_API_BASE = "https://api.pushover.net/1";
5
+ // ─── Auth validation ──────────────────────────────────────────────────────────
6
+ function requireAuth(args) {
7
+ const token = String(args.app_token ?? "").trim();
8
+ const user = String(args.user_key ?? "").trim();
9
+ if (!token)
10
+ throw new Error("app_token is required. Create an app at pushover.net/apps.");
11
+ if (!user)
12
+ throw new Error("user_key is required. Find it on your Pushover dashboard.");
13
+ return { token, user };
14
+ }
15
+ // ─── API helper ───────────────────────────────────────────────────────────────
16
+ async function pushoverPost(path, params) {
17
+ const res = await fetch(`${PUSHOVER_API_BASE}${path}.json`, {
18
+ method: "POST",
19
+ headers: { "Content-Type": "application/json" },
20
+ body: JSON.stringify(params),
21
+ });
22
+ const data = await res.json();
23
+ if (data.status !== 1) {
24
+ const errors = Array.isArray(data.errors) ? data.errors.join("; ") : `HTTP ${res.status}`;
25
+ throw new Error(`Pushover error: ${errors}`);
26
+ }
27
+ return data;
28
+ }
29
+ async function pushoverGet(path, query = {}) {
30
+ const qs = new URLSearchParams(query).toString();
31
+ const res = await fetch(`${PUSHOVER_API_BASE}${path}.json${qs ? `?${qs}` : ""}`, {
32
+ headers: { "Content-Type": "application/json" },
33
+ });
34
+ const data = await res.json();
35
+ if (!res.ok && data.status !== 1) {
36
+ const errors = Array.isArray(data.errors) ? data.errors.join("; ") : `HTTP ${res.status}`;
37
+ throw new Error(`Pushover error: ${errors}`);
38
+ }
39
+ return data;
40
+ }
41
+ // ─── Operations ───────────────────────────────────────────────────────────────
42
+ export async function pushoverSendNotification(args) {
43
+ const { token, user } = requireAuth(args);
44
+ const message = String(args.message ?? "").trim();
45
+ if (!message)
46
+ throw new Error("message is required.");
47
+ const params = { token, user, message };
48
+ if (args.title)
49
+ params.title = String(args.title);
50
+ if (args.url)
51
+ params.url = String(args.url);
52
+ if (args.url_title)
53
+ params.url_title = String(args.url_title);
54
+ if (args.sound)
55
+ params.sound = String(args.sound);
56
+ if (args.device)
57
+ params.device = String(args.device);
58
+ // Priority: -2 (lowest), -1 (low), 0 (normal), 1 (high), 2 (emergency)
59
+ const priority = args.priority !== undefined ? Number(args.priority) : 0;
60
+ if (priority < -2 || priority > 2)
61
+ throw new Error("priority must be -2, -1, 0, 1, or 2.");
62
+ params.priority = priority;
63
+ // Emergency priority requires retry and expire
64
+ if (priority === 2) {
65
+ const retry = Number(args.retry ?? 60);
66
+ const expire = Number(args.expire ?? 3600);
67
+ if (retry < 30)
68
+ throw new Error("retry must be at least 30 seconds for emergency notifications.");
69
+ if (expire > 10800)
70
+ throw new Error("expire must be at most 10800 seconds (3 hours).");
71
+ params.retry = retry;
72
+ params.expire = expire;
73
+ if (args.callback)
74
+ params.callback = String(args.callback);
75
+ }
76
+ if (args.html === true || args.html === 1)
77
+ params.html = 1;
78
+ if (args.monospace === true || args.monospace === 1)
79
+ params.monospace = 1;
80
+ if (args.timestamp)
81
+ params.timestamp = Number(args.timestamp);
82
+ const result = await pushoverPost("/messages", params);
83
+ return {
84
+ success: true,
85
+ request_id: result.request,
86
+ receipt: result.receipt ?? null,
87
+ priority,
88
+ };
89
+ }
90
+ export async function pushoverGetReceipt(args) {
91
+ const token = String(args.app_token ?? "").trim();
92
+ if (!token)
93
+ throw new Error("app_token is required.");
94
+ const receipt = String(args.receipt ?? "").trim();
95
+ if (!receipt)
96
+ throw new Error("receipt is required (returned from an emergency notification).");
97
+ const result = await pushoverGet(`/receipts/${encodeURIComponent(receipt)}`, { token });
98
+ return {
99
+ acknowledged: result.acknowledged === 1,
100
+ acknowledged_at: result.acknowledged_at ? new Date(result.acknowledged_at * 1000).toISOString() : null,
101
+ acknowledged_by: result.acknowledged_by || null,
102
+ acknowledged_by_device: result.acknowledged_by_device || null,
103
+ last_delivered_at: result.last_delivered_at ? new Date(result.last_delivered_at * 1000).toISOString() : null,
104
+ expired: result.expired === 1,
105
+ expires_at: result.expires_at ? new Date(result.expires_at * 1000).toISOString() : null,
106
+ };
107
+ }
108
+ export async function pushoverCancelEmergency(args) {
109
+ const { token } = requireAuth(args);
110
+ const receipt = String(args.receipt ?? "").trim();
111
+ if (!receipt)
112
+ throw new Error("receipt is required (returned from an emergency notification).");
113
+ const res = await fetch(`${PUSHOVER_API_BASE}/receipts/${encodeURIComponent(receipt)}/cancel.json`, {
114
+ method: "POST",
115
+ headers: { "Content-Type": "application/json" },
116
+ body: JSON.stringify({ token }),
117
+ });
118
+ const data = await res.json();
119
+ if (data.status !== 1) {
120
+ const errors = Array.isArray(data.errors) ? data.errors.join("; ") : `HTTP ${res.status}`;
121
+ throw new Error(`Pushover error: ${errors}`);
122
+ }
123
+ return { success: true, receipt, cancelled: true };
124
+ }
125
+ export async function pushoverListSounds(args) {
126
+ const token = String(args.app_token ?? "").trim();
127
+ if (!token)
128
+ throw new Error("app_token is required.");
129
+ const result = await pushoverGet("/sounds", { token });
130
+ const sounds = Object.entries(result.sounds).map(([id, name]) => ({ id, name }));
131
+ return { count: sounds.length, sounds };
132
+ }
133
+ export async function pushoverValidateUser(args) {
134
+ const { token, user } = requireAuth(args);
135
+ const params = { token, user };
136
+ if (args.device)
137
+ params.device = String(args.device);
138
+ const result = await pushoverPost("/users/validate", params);
139
+ return {
140
+ valid: result.status === 1,
141
+ is_group: result.group === 1,
142
+ devices: result.devices ?? [],
143
+ licenses: result.licenses ?? [],
144
+ };
145
+ }
146
+ //# sourceMappingURL=pushover-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushover-tool.js","sourceRoot":"","sources":["../src/pushover-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function quickbooksCustomers(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function quickbooksInvoices(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function quickbooksItems(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function quickbooksPayments(args: Record<string, unknown>): Promise<unknown>;
5
+ //# sourceMappingURL=quickbooks-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickbooks-tool.d.ts","sourceRoot":"","sources":["../src/quickbooks-tool.ts"],"names":[],"mappings":"AAuHA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CASzF;AAID,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BxF;AAID,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CASrF;AAID,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CASxF"}
@@ -0,0 +1,160 @@
1
+ // ─── QuickBooks Online API Tool ──────────────────────────────────────────────
2
+ // Covers customers, invoices, items, and payments via QuickBooks Online Accounting API.
3
+ // Auth: OAuth 2.0 Bearer token + company realm ID.
4
+ // Base URLs:
5
+ // Production: https://quickbooks.api.intuit.com/v3/company/{realmId}
6
+ // Sandbox: https://sandbox-quickbooks.api.intuit.com/v3/company/{realmId}
7
+ // No external dependencies - native fetch only.
8
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
9
+ function requireConfig(args) {
10
+ const access_token = String(args.access_token ?? "").trim();
11
+ const realm_id = String(args.realm_id ?? "").trim();
12
+ if (!access_token)
13
+ return { error: "access_token is required (QuickBooks OAuth2 access token)." };
14
+ if (!realm_id)
15
+ return { error: "realm_id is required (QuickBooks company realm/company ID)." };
16
+ return {
17
+ access_token,
18
+ realm_id,
19
+ sandbox: args.sandbox === true || String(args.sandbox) === "true",
20
+ };
21
+ }
22
+ function qbBase(cfg) {
23
+ const host = cfg.sandbox
24
+ ? "https://sandbox-quickbooks.api.intuit.com"
25
+ : "https://quickbooks.api.intuit.com";
26
+ return `${host}/v3/company/${encodeURIComponent(cfg.realm_id)}`;
27
+ }
28
+ async function qbFetch(cfg, method, path, body) {
29
+ const url = `${qbBase(cfg)}${path}`;
30
+ let response;
31
+ try {
32
+ response = await fetch(url, {
33
+ method,
34
+ headers: {
35
+ Authorization: `Bearer ${cfg.access_token}`,
36
+ "Content-Type": "application/json",
37
+ "Accept": "application/json",
38
+ },
39
+ body: body !== undefined ? JSON.stringify(body) : undefined,
40
+ });
41
+ }
42
+ catch (err) {
43
+ return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
44
+ }
45
+ if (response.status === 429) {
46
+ return { error: "QuickBooks rate limit reached. Wait before retrying.", status: 429 };
47
+ }
48
+ if (response.status === 401) {
49
+ return { error: "QuickBooks auth failed: access token expired or invalid.", status: 401 };
50
+ }
51
+ let data;
52
+ try {
53
+ data = await response.json();
54
+ }
55
+ catch {
56
+ return { error: `Non-JSON response (HTTP ${response.status})`, status: response.status };
57
+ }
58
+ if (!response.ok) {
59
+ const d = data;
60
+ const fault = d["Fault"];
61
+ const errs = fault?.["Error"];
62
+ return { error: Array.isArray(errs) ? errs : d["message"] ?? "QuickBooks API error", status: response.status };
63
+ }
64
+ return data;
65
+ }
66
+ async function qbQuery(cfg, sql) {
67
+ const url = new URL(`${qbBase(cfg)}/query`);
68
+ url.searchParams.set("query", sql);
69
+ url.searchParams.set("minorversion", "65");
70
+ let response;
71
+ try {
72
+ response = await fetch(url.toString(), {
73
+ headers: {
74
+ Authorization: `Bearer ${cfg.access_token}`,
75
+ "Accept": "application/json",
76
+ },
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: "QuickBooks rate limit reached.", status: 429 };
84
+ }
85
+ if (response.status === 401) {
86
+ return { error: "QuickBooks auth failed: access token expired or invalid.", status: 401 };
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["Fault"] ?? d["message"] ?? "QuickBooks query error", status: response.status };
98
+ }
99
+ return data;
100
+ }
101
+ // ─── quickbooks_customers ─────────────────────────────────────────────────────
102
+ export async function quickbooksCustomers(args) {
103
+ const cfg = requireConfig(args);
104
+ if ("error" in cfg)
105
+ return cfg;
106
+ const limit = Number(args.limit ?? 100);
107
+ const offset = Number(args.offset ?? 1);
108
+ const where = args.where ? ` WHERE ${String(args.where)}` : "";
109
+ return qbQuery(cfg, `SELECT * FROM Customer${where} MAXRESULTS ${limit} STARTPOSITION ${offset}`);
110
+ }
111
+ // ─── quickbooks_invoices ──────────────────────────────────────────────────────
112
+ export async function quickbooksInvoices(args) {
113
+ const cfg = requireConfig(args);
114
+ if ("error" in cfg)
115
+ return cfg;
116
+ const action = String(args.action ?? "list");
117
+ switch (action) {
118
+ case "list": {
119
+ const limit = Number(args.limit ?? 100);
120
+ const offset = Number(args.offset ?? 1);
121
+ const where = args.where ? ` WHERE ${String(args.where)}` : "";
122
+ return qbQuery(cfg, `SELECT * FROM Invoice${where} MAXRESULTS ${limit} STARTPOSITION ${offset}`);
123
+ }
124
+ case "get": {
125
+ const invoice_id = String(args.invoice_id ?? "").trim();
126
+ if (!invoice_id)
127
+ return { error: "invoice_id is required for action='get'." };
128
+ return qbFetch(cfg, "GET", `/invoice/${encodeURIComponent(invoice_id)}?minorversion=65`);
129
+ }
130
+ case "create": {
131
+ if (!args.invoice || typeof args.invoice !== "object") {
132
+ return { error: "invoice object is required for action='create'." };
133
+ }
134
+ return qbFetch(cfg, "POST", "/invoice?minorversion=65", args.invoice);
135
+ }
136
+ default:
137
+ return { error: `Unknown action "${action}". Valid: list, get, create.` };
138
+ }
139
+ }
140
+ // ─── quickbooks_items ─────────────────────────────────────────────────────────
141
+ export async function quickbooksItems(args) {
142
+ const cfg = requireConfig(args);
143
+ if ("error" in cfg)
144
+ return cfg;
145
+ const limit = Number(args.limit ?? 100);
146
+ const offset = Number(args.offset ?? 1);
147
+ const where = args.where ? ` WHERE ${String(args.where)}` : "";
148
+ return qbQuery(cfg, `SELECT * FROM Item${where} MAXRESULTS ${limit} STARTPOSITION ${offset}`);
149
+ }
150
+ // ─── quickbooks_payments ──────────────────────────────────────────────────────
151
+ export async function quickbooksPayments(args) {
152
+ const cfg = requireConfig(args);
153
+ if ("error" in cfg)
154
+ return cfg;
155
+ const limit = Number(args.limit ?? 100);
156
+ const offset = Number(args.offset ?? 1);
157
+ const where = args.where ? ` WHERE ${String(args.where)}` : "";
158
+ return qbQuery(cfg, `SELECT * FROM Payment${where} MAXRESULTS ${limit} STARTPOSITION ${offset}`);
159
+ }
160
+ //# sourceMappingURL=quickbooks-tool.js.map