@unclick/mcp-server 0.2.4 → 0.3.0

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 (183) hide show
  1. package/README.md +139 -139
  2. package/dist/algolia-tool.d.ts +5 -0
  3. package/dist/algolia-tool.d.ts.map +1 -0
  4. package/dist/algolia-tool.js +121 -0
  5. package/dist/algolia-tool.js.map +1 -0
  6. package/dist/assemblyai-tool.d.ts +7 -0
  7. package/dist/assemblyai-tool.d.ts.map +1 -0
  8. package/dist/assemblyai-tool.js +127 -0
  9. package/dist/assemblyai-tool.js.map +1 -0
  10. package/dist/catalog.d.ts.map +1 -1
  11. package/dist/catalog.js +261 -0
  12. package/dist/catalog.js.map +1 -1
  13. package/dist/circleci-tool.d.ts +7 -0
  14. package/dist/circleci-tool.d.ts.map +1 -0
  15. package/dist/circleci-tool.js +133 -0
  16. package/dist/circleci-tool.js.map +1 -0
  17. package/dist/cohere-tool.d.ts +7 -0
  18. package/dist/cohere-tool.d.ts.map +1 -0
  19. package/dist/cohere-tool.js +225 -0
  20. package/dist/cohere-tool.js.map +1 -0
  21. package/dist/convertkit-tool.d.ts +7 -0
  22. package/dist/convertkit-tool.d.ts.map +1 -0
  23. package/dist/convertkit-tool.js +213 -0
  24. package/dist/convertkit-tool.js.map +1 -0
  25. package/dist/datadog-tool.d.ts +7 -0
  26. package/dist/datadog-tool.d.ts.map +1 -0
  27. package/dist/datadog-tool.js +121 -0
  28. package/dist/datadog-tool.js.map +1 -0
  29. package/dist/deepl-tool.d.ts +5 -0
  30. package/dist/deepl-tool.d.ts.map +1 -0
  31. package/dist/deepl-tool.js +137 -0
  32. package/dist/deepl-tool.js.map +1 -0
  33. package/dist/flyio-tool.d.ts +6 -0
  34. package/dist/flyio-tool.d.ts.map +1 -0
  35. package/dist/flyio-tool.js +158 -0
  36. package/dist/flyio-tool.js.map +1 -0
  37. package/dist/groq-tool.d.ts +3 -0
  38. package/dist/groq-tool.d.ts.map +1 -0
  39. package/dist/groq-tool.js +109 -0
  40. package/dist/groq-tool.js.map +1 -0
  41. package/dist/gumroad-tool.d.ts +6 -0
  42. package/dist/gumroad-tool.d.ts.map +1 -0
  43. package/dist/gumroad-tool.js +90 -0
  44. package/dist/gumroad-tool.js.map +1 -0
  45. package/dist/heygen-tool.d.ts +5 -0
  46. package/dist/heygen-tool.d.ts.map +1 -0
  47. package/dist/heygen-tool.js +134 -0
  48. package/dist/heygen-tool.js.map +1 -0
  49. package/dist/higgsfield-tool.d.ts +5 -0
  50. package/dist/higgsfield-tool.d.ts.map +1 -0
  51. package/dist/higgsfield-tool.js +120 -0
  52. package/dist/higgsfield-tool.js.map +1 -0
  53. package/dist/keychain-crypto.d.ts +24 -0
  54. package/dist/keychain-crypto.d.ts.map +1 -0
  55. package/dist/keychain-crypto.js +60 -0
  56. package/dist/keychain-crypto.js.map +1 -0
  57. package/dist/keychain-secure-input.d.ts +17 -0
  58. package/dist/keychain-secure-input.d.ts.map +1 -0
  59. package/dist/keychain-secure-input.js +229 -0
  60. package/dist/keychain-secure-input.js.map +1 -0
  61. package/dist/keychain-tool.d.ts +3 -0
  62. package/dist/keychain-tool.d.ts.map +1 -0
  63. package/dist/keychain-tool.js +516 -0
  64. package/dist/keychain-tool.js.map +1 -0
  65. package/dist/kling-tool.d.ts +3 -0
  66. package/dist/kling-tool.d.ts.map +1 -0
  67. package/dist/kling-tool.js +102 -0
  68. package/dist/kling-tool.js.map +1 -0
  69. package/dist/lemonsqueezy-tool.d.ts +7 -0
  70. package/dist/lemonsqueezy-tool.d.ts.map +1 -0
  71. package/dist/lemonsqueezy-tool.js +220 -0
  72. package/dist/lemonsqueezy-tool.js.map +1 -0
  73. package/dist/linear-tool.js +73 -73
  74. package/dist/local-catalog-handlers.d.ts +3 -0
  75. package/dist/local-catalog-handlers.d.ts.map +1 -0
  76. package/dist/local-catalog-handlers.js +1254 -0
  77. package/dist/local-catalog-handlers.js.map +1 -0
  78. package/dist/mailchimp-tool.d.ts +8 -0
  79. package/dist/mailchimp-tool.d.ts.map +1 -0
  80. package/dist/mailchimp-tool.js +138 -0
  81. package/dist/mailchimp-tool.js.map +1 -0
  82. package/dist/mapbox-tool.d.ts +6 -0
  83. package/dist/mapbox-tool.d.ts.map +1 -0
  84. package/dist/mapbox-tool.js +106 -0
  85. package/dist/mapbox-tool.js.map +1 -0
  86. package/dist/memory/db.d.ts +10 -0
  87. package/dist/memory/db.d.ts.map +1 -0
  88. package/dist/memory/db.js +22 -0
  89. package/dist/memory/db.js.map +1 -0
  90. package/dist/memory/handlers.d.ts +11 -0
  91. package/dist/memory/handlers.d.ts.map +1 -0
  92. package/dist/memory/handlers.js +125 -0
  93. package/dist/memory/handlers.js.map +1 -0
  94. package/dist/memory/local.d.ts +37 -0
  95. package/dist/memory/local.d.ts.map +1 -0
  96. package/dist/memory/local.js +386 -0
  97. package/dist/memory/local.js.map +1 -0
  98. package/dist/memory/supabase.d.ts +34 -0
  99. package/dist/memory/supabase.d.ts.map +1 -0
  100. package/dist/memory/supabase.js +209 -0
  101. package/dist/memory/supabase.js.map +1 -0
  102. package/dist/memory/types.d.ts +81 -0
  103. package/dist/memory/types.d.ts.map +1 -0
  104. package/dist/memory/types.js +5 -0
  105. package/dist/memory/types.js.map +1 -0
  106. package/dist/mistral-tool.d.ts +4 -0
  107. package/dist/mistral-tool.d.ts.map +1 -0
  108. package/dist/mistral-tool.js +145 -0
  109. package/dist/mistral-tool.js.map +1 -0
  110. package/dist/mixpanel-tool.d.ts +6 -0
  111. package/dist/mixpanel-tool.d.ts.map +1 -0
  112. package/dist/mixpanel-tool.js +162 -0
  113. package/dist/mixpanel-tool.js.map +1 -0
  114. package/dist/monday-tool.js +46 -46
  115. package/dist/musicbrainz-tool.js +1 -1
  116. package/dist/musicbrainz-tool.js.map +1 -1
  117. package/dist/neon-tool.d.ts +7 -0
  118. package/dist/neon-tool.d.ts.map +1 -0
  119. package/dist/neon-tool.js +156 -0
  120. package/dist/neon-tool.js.map +1 -0
  121. package/dist/pagerduty-tool.d.ts +8 -0
  122. package/dist/pagerduty-tool.d.ts.map +1 -0
  123. package/dist/pagerduty-tool.js +185 -0
  124. package/dist/pagerduty-tool.js.map +1 -0
  125. package/dist/perplexity-tool.d.ts +2 -0
  126. package/dist/perplexity-tool.d.ts.map +1 -0
  127. package/dist/perplexity-tool.js +93 -0
  128. package/dist/perplexity-tool.js.map +1 -0
  129. package/dist/pika-tool.d.ts +4 -0
  130. package/dist/pika-tool.d.ts.map +1 -0
  131. package/dist/pika-tool.js +102 -0
  132. package/dist/pika-tool.js.map +1 -0
  133. package/dist/pinecone-tool.d.ts +6 -0
  134. package/dist/pinecone-tool.d.ts.map +1 -0
  135. package/dist/pinecone-tool.js +148 -0
  136. package/dist/pinecone-tool.js.map +1 -0
  137. package/dist/postmark-tool.d.ts +7 -0
  138. package/dist/postmark-tool.d.ts.map +1 -0
  139. package/dist/postmark-tool.js +148 -0
  140. package/dist/postmark-tool.js.map +1 -0
  141. package/dist/qc-tool.d.ts +4 -0
  142. package/dist/qc-tool.d.ts.map +1 -0
  143. package/dist/qc-tool.js +415 -0
  144. package/dist/qc-tool.js.map +1 -0
  145. package/dist/render-tool.d.ts +7 -0
  146. package/dist/render-tool.d.ts.map +1 -0
  147. package/dist/render-tool.js +158 -0
  148. package/dist/render-tool.js.map +1 -0
  149. package/dist/runway-tool.d.ts +4 -0
  150. package/dist/runway-tool.d.ts.map +1 -0
  151. package/dist/runway-tool.js +110 -0
  152. package/dist/runway-tool.js.map +1 -0
  153. package/dist/segment-tool.d.ts +6 -0
  154. package/dist/segment-tool.d.ts.map +1 -0
  155. package/dist/segment-tool.js +129 -0
  156. package/dist/segment-tool.js.map +1 -0
  157. package/dist/sendgrid-tool.d.ts +7 -0
  158. package/dist/sendgrid-tool.d.ts.map +1 -0
  159. package/dist/sendgrid-tool.js +124 -0
  160. package/dist/sendgrid-tool.js.map +1 -0
  161. package/dist/server.d.ts.map +1 -1
  162. package/dist/server.js +129 -0
  163. package/dist/server.js.map +1 -1
  164. package/dist/togetherai-tool.d.ts +5 -0
  165. package/dist/togetherai-tool.d.ts.map +1 -0
  166. package/dist/togetherai-tool.js +129 -0
  167. package/dist/togetherai-tool.js.map +1 -0
  168. package/dist/toilets-tool.js +2 -2
  169. package/dist/tool-wiring.d.ts +4608 -692
  170. package/dist/tool-wiring.d.ts.map +1 -1
  171. package/dist/tool-wiring.js +2946 -463
  172. package/dist/tool-wiring.js.map +1 -1
  173. package/dist/turso-tool.d.ts +6 -0
  174. package/dist/turso-tool.d.ts.map +1 -0
  175. package/dist/turso-tool.js +158 -0
  176. package/dist/turso-tool.js.map +1 -0
  177. package/dist/upstash-tool.d.ts +8 -0
  178. package/dist/upstash-tool.d.ts.map +1 -0
  179. package/dist/upstash-tool.js +191 -0
  180. package/dist/upstash-tool.js.map +1 -0
  181. package/package.json +66 -65
  182. package/public/icon.svg +15 -15
  183. package/server.json +37 -37
@@ -0,0 +1,6 @@
1
+ export declare function tursoListDatabases(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function tursoCreateDatabase(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function tursoListGroups(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function tursoGetDatabase(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function tursoExecuteSql(args: Record<string, unknown>): Promise<unknown>;
6
+ //# sourceMappingURL=turso-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-tool.d.ts","sourceRoot":"","sources":["../src/turso-tool.ts"],"names":[],"mappings":"AAyDA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWxF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBzF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBtF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwCrF"}
@@ -0,0 +1,158 @@
1
+ // Turso SQLite Edge DB API integration for the UnClick MCP server.
2
+ // Uses the Turso REST API via fetch - no external dependencies.
3
+ // Users must supply an API key from app.turso.tech.
4
+ const TURSO_API_BASE = "https://api.turso.tech/v1";
5
+ // ── Fetch helper ──────────────────────────────────────────────────────────────
6
+ async function tursoFetch(apiKey, method, url, body) {
7
+ const headers = {
8
+ Authorization: `Bearer ${apiKey}`,
9
+ Accept: "application/json",
10
+ };
11
+ if (body !== undefined)
12
+ headers["Content-Type"] = "application/json";
13
+ let response;
14
+ try {
15
+ response = await fetch(url, {
16
+ method,
17
+ headers,
18
+ body: body !== undefined ? JSON.stringify(body) : undefined,
19
+ });
20
+ }
21
+ catch (err) {
22
+ return { error: `Network error reaching Turso API: ${err instanceof Error ? err.message : String(err)}` };
23
+ }
24
+ const text = await response.text();
25
+ let data;
26
+ try {
27
+ data = JSON.parse(text);
28
+ }
29
+ catch {
30
+ data = { raw: text };
31
+ }
32
+ if (response.status === 401)
33
+ return { error: "Turso API key is invalid or expired. Check your api_key.", status: 401 };
34
+ if (response.status === 403)
35
+ return { error: "Turso API: insufficient permissions.", status: 403 };
36
+ if (response.status === 404)
37
+ return { error: "Resource not found. Check the org, database name, or group.", status: 404 };
38
+ if (!response.ok) {
39
+ const errData = data;
40
+ const detail = errData?.error ?? errData?.message ?? text;
41
+ return { error: `Turso API error ${response.status}: ${detail}`, status: response.status };
42
+ }
43
+ return data;
44
+ }
45
+ // ── Operations ────────────────────────────────────────────────────────────────
46
+ export async function tursoListDatabases(args) {
47
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
48
+ if (!apiKey)
49
+ return { error: "api_key is required. Get one at app.turso.tech." };
50
+ const org = String(args.org ?? "").trim();
51
+ if (!org)
52
+ return { error: "org is required (your Turso organization name or username)." };
53
+ try {
54
+ return tursoFetch(apiKey, "GET", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/databases`);
55
+ }
56
+ catch (err) {
57
+ return { error: err instanceof Error ? err.message : String(err) };
58
+ }
59
+ }
60
+ export async function tursoCreateDatabase(args) {
61
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
62
+ if (!apiKey)
63
+ return { error: "api_key is required. Get one at app.turso.tech." };
64
+ const org = String(args.org ?? "").trim();
65
+ if (!org)
66
+ return { error: "org is required." };
67
+ const name = String(args.name ?? "").trim();
68
+ if (!name)
69
+ return { error: "name is required (the database name)." };
70
+ const group = String(args.group ?? "").trim();
71
+ if (!group)
72
+ return { error: "group is required (the placement group, e.g. 'default')." };
73
+ try {
74
+ return tursoFetch(apiKey, "POST", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/databases`, { name, group });
75
+ }
76
+ catch (err) {
77
+ return { error: err instanceof Error ? err.message : String(err) };
78
+ }
79
+ }
80
+ export async function tursoListGroups(args) {
81
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
82
+ if (!apiKey)
83
+ return { error: "api_key is required. Get one at app.turso.tech." };
84
+ const org = String(args.org ?? "").trim();
85
+ if (!org)
86
+ return { error: "org is required." };
87
+ try {
88
+ return tursoFetch(apiKey, "GET", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/groups`);
89
+ }
90
+ catch (err) {
91
+ return { error: err instanceof Error ? err.message : String(err) };
92
+ }
93
+ }
94
+ export async function tursoGetDatabase(args) {
95
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
96
+ if (!apiKey)
97
+ return { error: "api_key is required. Get one at app.turso.tech." };
98
+ const org = String(args.org ?? "").trim();
99
+ if (!org)
100
+ return { error: "org is required." };
101
+ const name = String(args.name ?? "").trim();
102
+ if (!name)
103
+ return { error: "name is required (the database name)." };
104
+ try {
105
+ return tursoFetch(apiKey, "GET", `${TURSO_API_BASE}/organizations/${encodeURIComponent(org)}/databases/${encodeURIComponent(name)}`);
106
+ }
107
+ catch (err) {
108
+ return { error: err instanceof Error ? err.message : String(err) };
109
+ }
110
+ }
111
+ export async function tursoExecuteSql(args) {
112
+ const apiKey = String(args.api_key ?? process.env.TURSO_API_KEY ?? "").trim();
113
+ if (!apiKey)
114
+ return { error: "api_key is required. Get one at app.turso.tech." };
115
+ const org = String(args.org ?? "").trim();
116
+ if (!org)
117
+ return { error: "org is required." };
118
+ const dbName = String(args.db_name ?? "").trim();
119
+ if (!dbName)
120
+ return { error: "db_name is required." };
121
+ const sql = String(args.sql ?? "").trim();
122
+ if (!sql)
123
+ return { error: "sql is required." };
124
+ // Parse optional args array (positional query parameters)
125
+ let sqlArgs;
126
+ if (args.args !== undefined) {
127
+ if (Array.isArray(args.args)) {
128
+ sqlArgs = args.args;
129
+ }
130
+ else if (typeof args.args === "string") {
131
+ try {
132
+ sqlArgs = JSON.parse(args.args);
133
+ }
134
+ catch {
135
+ return { error: "args must be a JSON array of {type, value} objects." };
136
+ }
137
+ }
138
+ }
139
+ try {
140
+ // Build the database URL: {db_name}-{org}.turso.io
141
+ const dbHost = `https://${dbName}-${org}.turso.io`;
142
+ const pipelineUrl = `${dbHost}/v2/pipeline`;
143
+ const stmt = { sql };
144
+ if (sqlArgs)
145
+ stmt.args = sqlArgs;
146
+ const pipelineBody = {
147
+ requests: [
148
+ { type: "execute", stmt },
149
+ { type: "close" },
150
+ ],
151
+ };
152
+ return tursoFetch(apiKey, "POST", pipelineUrl, pipelineBody);
153
+ }
154
+ catch (err) {
155
+ return { error: err instanceof Error ? err.message : String(err) };
156
+ }
157
+ }
158
+ //# sourceMappingURL=turso-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-tool.js","sourceRoot":"","sources":["../src/turso-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function upstashRedisGet(args: Record<string, unknown>): Promise<unknown>;
2
+ export declare function upstashRedisSet(args: Record<string, unknown>): Promise<unknown>;
3
+ export declare function upstashRedisDel(args: Record<string, unknown>): Promise<unknown>;
4
+ export declare function upstashRedisListKeys(args: Record<string, unknown>): Promise<unknown>;
5
+ export declare function upstashRedisIncr(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function upstashKafkaProduce(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function upstashKafkaListTopics(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=upstash-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstash-tool.d.ts","sourceRoot":"","sources":["../src/upstash-tool.ts"],"names":[],"mappings":"AAkEA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAarF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBrF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAarF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAY1F;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAatF;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBzF;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5F"}
@@ -0,0 +1,191 @@
1
+ // Upstash Redis/Kafka API integration for the UnClick MCP server.
2
+ // Uses the Upstash REST API via fetch - no external dependencies.
3
+ // Auth: Basic auth (email:api_key base64 encoded).
4
+ // Users must supply credentials from console.upstash.com.
5
+ const UPSTASH_API_BASE = "https://api.upstash.com/v2";
6
+ // ── Auth helper ───────────────────────────────────────────────────────────────
7
+ function buildBasicAuth(email, apiKey) {
8
+ const credentials = `${email}:${apiKey}`;
9
+ // btoa is available in Node 16+ and all modern runtimes
10
+ return `Basic ${Buffer.from(credentials).toString("base64")}`;
11
+ }
12
+ function requireAuth(args) {
13
+ const apiKey = String(args.api_key ?? process.env.UPSTASH_API_KEY ?? "").trim();
14
+ if (!apiKey)
15
+ throw new Error("api_key is required. Get one at console.upstash.com.");
16
+ const email = String(args.email ?? process.env.UPSTASH_EMAIL ?? "").trim();
17
+ if (!email)
18
+ throw new Error("email is required (your Upstash account email).");
19
+ return { email, apiKey };
20
+ }
21
+ // ── Fetch helper ──────────────────────────────────────────────────────────────
22
+ async function upstashFetch(auth, method, path, body) {
23
+ const headers = {
24
+ Authorization: auth,
25
+ Accept: "application/json",
26
+ };
27
+ if (body !== undefined)
28
+ headers["Content-Type"] = "application/json";
29
+ let response;
30
+ try {
31
+ response = await fetch(`${UPSTASH_API_BASE}${path}`, {
32
+ method,
33
+ headers,
34
+ body: body !== undefined ? JSON.stringify(body) : undefined,
35
+ });
36
+ }
37
+ catch (err) {
38
+ return { error: `Network error reaching Upstash API: ${err instanceof Error ? err.message : String(err)}` };
39
+ }
40
+ const text = await response.text();
41
+ let data;
42
+ try {
43
+ data = JSON.parse(text);
44
+ }
45
+ catch {
46
+ data = { raw: text };
47
+ }
48
+ if (response.status === 401)
49
+ return { error: "Upstash credentials invalid. Check your email and api_key.", status: 401 };
50
+ if (response.status === 403)
51
+ return { error: "Upstash API: insufficient permissions.", status: 403 };
52
+ if (response.status === 404)
53
+ return { error: "Resource not found. Check the db_id, cluster_id, or topic.", status: 404 };
54
+ if (!response.ok) {
55
+ const detail = data?.message ?? data?.error ?? text;
56
+ return { error: `Upstash API error ${response.status}: ${detail}`, status: response.status };
57
+ }
58
+ return data;
59
+ }
60
+ // ── Redis operations ──────────────────────────────────────────────────────────
61
+ export async function upstashRedisGet(args) {
62
+ try {
63
+ const { email, apiKey } = requireAuth(args);
64
+ const dbId = String(args.db_id ?? "").trim();
65
+ if (!dbId)
66
+ return { error: "db_id is required." };
67
+ const key = String(args.key ?? "").trim();
68
+ if (!key)
69
+ return { error: "key is required." };
70
+ const auth = buildBasicAuth(email, apiKey);
71
+ return upstashFetch(auth, "GET", `/redis/databases/${encodeURIComponent(dbId)}/get/${encodeURIComponent(key)}`);
72
+ }
73
+ catch (err) {
74
+ return { error: err instanceof Error ? err.message : String(err) };
75
+ }
76
+ }
77
+ export async function upstashRedisSet(args) {
78
+ try {
79
+ const { email, apiKey } = requireAuth(args);
80
+ const dbId = String(args.db_id ?? "").trim();
81
+ if (!dbId)
82
+ return { error: "db_id is required." };
83
+ const key = String(args.key ?? "").trim();
84
+ if (!key)
85
+ return { error: "key is required." };
86
+ if (args.value === undefined || args.value === null)
87
+ return { error: "value is required." };
88
+ const value = String(args.value);
89
+ const auth = buildBasicAuth(email, apiKey);
90
+ const body = { key, value };
91
+ if (args.ex !== undefined)
92
+ body.ex = Number(args.ex);
93
+ return upstashFetch(auth, "POST", `/redis/databases/${encodeURIComponent(dbId)}/set`, body);
94
+ }
95
+ catch (err) {
96
+ return { error: err instanceof Error ? err.message : String(err) };
97
+ }
98
+ }
99
+ export async function upstashRedisDel(args) {
100
+ try {
101
+ const { email, apiKey } = requireAuth(args);
102
+ const dbId = String(args.db_id ?? "").trim();
103
+ if (!dbId)
104
+ return { error: "db_id is required." };
105
+ const key = String(args.key ?? "").trim();
106
+ if (!key)
107
+ return { error: "key is required." };
108
+ const auth = buildBasicAuth(email, apiKey);
109
+ return upstashFetch(auth, "POST", `/redis/databases/${encodeURIComponent(dbId)}/del`, { key });
110
+ }
111
+ catch (err) {
112
+ return { error: err instanceof Error ? err.message : String(err) };
113
+ }
114
+ }
115
+ export async function upstashRedisListKeys(args) {
116
+ try {
117
+ const { email, apiKey } = requireAuth(args);
118
+ const dbId = String(args.db_id ?? "").trim();
119
+ if (!dbId)
120
+ return { error: "db_id is required." };
121
+ const pattern = String(args.pattern ?? "*");
122
+ const auth = buildBasicAuth(email, apiKey);
123
+ return upstashFetch(auth, "POST", `/redis/databases/${encodeURIComponent(dbId)}/keys`, { pattern });
124
+ }
125
+ catch (err) {
126
+ return { error: err instanceof Error ? err.message : String(err) };
127
+ }
128
+ }
129
+ export async function upstashRedisIncr(args) {
130
+ try {
131
+ const { email, apiKey } = requireAuth(args);
132
+ const dbId = String(args.db_id ?? "").trim();
133
+ if (!dbId)
134
+ return { error: "db_id is required." };
135
+ const key = String(args.key ?? "").trim();
136
+ if (!key)
137
+ return { error: "key is required." };
138
+ const auth = buildBasicAuth(email, apiKey);
139
+ return upstashFetch(auth, "POST", `/redis/databases/${encodeURIComponent(dbId)}/incr`, { key });
140
+ }
141
+ catch (err) {
142
+ return { error: err instanceof Error ? err.message : String(err) };
143
+ }
144
+ }
145
+ // ── Kafka operations ──────────────────────────────────────────────────────────
146
+ export async function upstashKafkaProduce(args) {
147
+ try {
148
+ const { email, apiKey } = requireAuth(args);
149
+ const clusterId = String(args.cluster_id ?? "").trim();
150
+ if (!clusterId)
151
+ return { error: "cluster_id is required." };
152
+ const topic = String(args.topic ?? "").trim();
153
+ if (!topic)
154
+ return { error: "topic is required." };
155
+ let messages;
156
+ if (Array.isArray(args.messages)) {
157
+ messages = args.messages;
158
+ }
159
+ else if (typeof args.messages === "string") {
160
+ try {
161
+ messages = JSON.parse(args.messages);
162
+ }
163
+ catch {
164
+ return { error: "messages must be a JSON array or a valid JSON string representing an array." };
165
+ }
166
+ }
167
+ else {
168
+ return { error: "messages is required (array of message objects or a JSON string)." };
169
+ }
170
+ const auth = buildBasicAuth(email, apiKey);
171
+ const path = `/kafka/clusters/${encodeURIComponent(clusterId)}/topics/${encodeURIComponent(topic)}/produce`;
172
+ return upstashFetch(auth, "POST", path, { messages });
173
+ }
174
+ catch (err) {
175
+ return { error: err instanceof Error ? err.message : String(err) };
176
+ }
177
+ }
178
+ export async function upstashKafkaListTopics(args) {
179
+ try {
180
+ const { email, apiKey } = requireAuth(args);
181
+ const clusterId = String(args.cluster_id ?? "").trim();
182
+ if (!clusterId)
183
+ return { error: "cluster_id is required." };
184
+ const auth = buildBasicAuth(email, apiKey);
185
+ return upstashFetch(auth, "GET", `/kafka/clusters/${encodeURIComponent(clusterId)}/topics`);
186
+ }
187
+ catch (err) {
188
+ return { error: err instanceof Error ? err.message : String(err) };
189
+ }
190
+ }
191
+ //# sourceMappingURL=upstash-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstash-tool.js","sourceRoot":"","sources":["../src/upstash-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,65 +1,66 @@
1
- {
2
- "name": "@unclick/mcp-server",
3
- "version": "0.2.4",
4
- "mcpName": "io.github.malamutemayhem/unclick-mcp-server",
5
- "description": "MCP server for the UnClick tool marketplace — lets AI agents discover and use every UnClick tool",
6
- "type": "module",
7
- "bin": {
8
- "unclick-mcp": "./dist/index.js"
9
- },
10
- "main": "./dist/server.js",
11
- "exports": {
12
- ".": "./dist/server.js"
13
- },
14
- "files": [
15
- "dist",
16
- "README.md",
17
- "logo.png",
18
- "public",
19
- "server.json"
20
- ],
21
- "scripts": {
22
- "build": "tsc",
23
- "dev": "tsx src/index.ts",
24
- "start": "node dist/index.js",
25
- "prepublishOnly": "npm run build"
26
- },
27
- "dependencies": {
28
- "@iarna/toml": "^2.2.5",
29
- "@modelcontextprotocol/sdk": "^1.15.1",
30
- "@types/imap": "^0.8.43",
31
- "@types/nodemailer": "^8.0.0",
32
- "csv-parse": "^6.2.1",
33
- "csv-stringify": "^6.7.0",
34
- "fast-xml-parser": "^5.5.10",
35
- "imap": "^0.8.19",
36
- "js-yaml": "^4.1.1",
37
- "marked": "^17.0.6",
38
- "nodemailer": "^8.0.5",
39
- "turndown": "^7.2.4",
40
- "zod": "^3.23.8"
41
- },
42
- "devDependencies": {
43
- "@types/js-yaml": "^4.0.9",
44
- "@types/node": "^22.0.0",
45
- "@types/turndown": "^5.0.6",
46
- "tsx": "^4.19.2",
47
- "typescript": "^5.8.3"
48
- },
49
- "engines": {
50
- "node": ">=18"
51
- },
52
- "keywords": [
53
- "mcp",
54
- "model-context-protocol",
55
- "unclick",
56
- "ai",
57
- "tools",
58
- "utilities"
59
- ],
60
- "license": "MIT",
61
- "repository": {
62
- "type": "git",
63
- "url": "https://github.com/malamutemayhem/unclick-agent-native-endpoints"
64
- }
65
- }
1
+ {
2
+ "name": "@unclick/mcp-server",
3
+ "version": "0.3.0",
4
+ "mcpName": "io.github.malamutemayhem/unclick-mcp-server",
5
+ "description": "MCP server for the UnClick tool marketplace — lets AI agents discover and use every UnClick tool",
6
+ "type": "module",
7
+ "bin": {
8
+ "unclick-mcp": "./dist/index.js"
9
+ },
10
+ "main": "./dist/server.js",
11
+ "exports": {
12
+ ".": "./dist/server.js"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md",
17
+ "logo.png",
18
+ "public",
19
+ "server.json"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "tsx src/index.ts",
24
+ "start": "node dist/index.js",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "dependencies": {
28
+ "@iarna/toml": "^2.2.5",
29
+ "@modelcontextprotocol/sdk": "^1.15.1",
30
+ "@supabase/supabase-js": "^2.103.0",
31
+ "@types/imap": "^0.8.43",
32
+ "@types/nodemailer": "^8.0.0",
33
+ "csv-parse": "^6.2.1",
34
+ "csv-stringify": "^6.7.0",
35
+ "fast-xml-parser": "^5.5.10",
36
+ "imap": "^0.8.19",
37
+ "js-yaml": "^4.1.1",
38
+ "marked": "^17.0.6",
39
+ "nodemailer": "^8.0.5",
40
+ "turndown": "^7.2.4",
41
+ "zod": "^3.23.8"
42
+ },
43
+ "devDependencies": {
44
+ "@types/js-yaml": "^4.0.9",
45
+ "@types/node": "^22.0.0",
46
+ "@types/turndown": "^5.0.6",
47
+ "tsx": "^4.19.2",
48
+ "typescript": "^5.8.3"
49
+ },
50
+ "engines": {
51
+ "node": ">=18"
52
+ },
53
+ "keywords": [
54
+ "mcp",
55
+ "model-context-protocol",
56
+ "unclick",
57
+ "ai",
58
+ "tools",
59
+ "utilities"
60
+ ],
61
+ "license": "MIT",
62
+ "repository": {
63
+ "type": "git",
64
+ "url": "https://github.com/malamutemayhem/unclick-agent-native-endpoints"
65
+ }
66
+ }
package/public/icon.svg CHANGED
@@ -1,15 +1,15 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
2
- <!-- Dark rounded square background -->
3
- <rect width="512" height="512" rx="61" fill="#0a0a0a"/>
4
- <!-- White "U" lettermark — geometric, bold, well-centred -->
5
- <text
6
- x="256"
7
- y="345"
8
- font-family="Arial Black, Arial, Helvetica, sans-serif"
9
- font-size="310"
10
- font-weight="900"
11
- text-anchor="middle"
12
- fill="#ffffff"
13
- letter-spacing="-8"
14
- >U</text>
15
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
2
+ <!-- Dark rounded square background -->
3
+ <rect width="512" height="512" rx="61" fill="#0a0a0a"/>
4
+ <!-- White "U" lettermark — geometric, bold, well-centred -->
5
+ <text
6
+ x="256"
7
+ y="345"
8
+ font-family="Arial Black, Arial, Helvetica, sans-serif"
9
+ font-size="310"
10
+ font-weight="900"
11
+ text-anchor="middle"
12
+ fill="#ffffff"
13
+ letter-spacing="-8"
14
+ >U</text>
15
+ </svg>
package/server.json CHANGED
@@ -1,37 +1,37 @@
1
- {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.malamutemayhem/unclick-mcp-server",
4
- "title": "UnClick",
5
- "description": "AI agent tool marketplace. 60+ tools for social, e-commerce, accounting, and messaging.",
6
- "version": "0.2.3",
7
- "repository": {
8
- "url": "https://github.com/malamutemayhem/unclick-agent-native-endpoints.git",
9
- "source": "github"
10
- },
11
- "icons": [
12
- {
13
- "src": "https://unclick.world/icon.png",
14
- "mimeType": "image/png",
15
- "sizes": ["512x512"]
16
- }
17
- ],
18
- "packages": [
19
- {
20
- "registryType": "npm",
21
- "identifier": "@unclick/mcp-server",
22
- "version": "0.2.3",
23
- "runtimeHint": "npx",
24
- "transport": {
25
- "type": "stdio"
26
- },
27
- "environmentVariables": [
28
- {
29
- "name": "UNCLICK_API_KEY",
30
- "description": "Your UnClick API key from https://unclick.world",
31
- "isRequired": true,
32
- "isSecret": true
33
- }
34
- ]
35
- }
36
- ]
37
- }
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.malamutemayhem/unclick-mcp-server",
4
+ "title": "UnClick",
5
+ "description": "AI agent tool marketplace. 172+ tools for social, e-commerce, accounting, and messaging.",
6
+ "version": "0.2.4",
7
+ "repository": {
8
+ "url": "https://github.com/malamutemayhem/unclick-agent-native-endpoints.git",
9
+ "source": "github"
10
+ },
11
+ "icons": [
12
+ {
13
+ "src": "https://unclick.world/icon.png",
14
+ "mimeType": "image/png",
15
+ "sizes": ["512x512"]
16
+ }
17
+ ],
18
+ "packages": [
19
+ {
20
+ "registryType": "npm",
21
+ "identifier": "@unclick/mcp-server",
22
+ "version": "0.2.3",
23
+ "runtimeHint": "npx",
24
+ "transport": {
25
+ "type": "stdio"
26
+ },
27
+ "environmentVariables": [
28
+ {
29
+ "name": "UNCLICK_API_KEY",
30
+ "description": "Your UnClick API key from https://unclick.world",
31
+ "isRequired": true,
32
+ "isSecret": true
33
+ }
34
+ ]
35
+ }
36
+ ]
37
+ }