@unclick/mcp-server 0.1.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.
- package/README.md +139 -0
- package/dist/amazon-tool.d.ts +5 -0
- package/dist/amazon-tool.d.ts.map +1 -0
- package/dist/amazon-tool.js +307 -0
- package/dist/amazon-tool.js.map +1 -0
- package/dist/bluesky-tool.d.ts +2 -0
- package/dist/bluesky-tool.d.ts.map +1 -0
- package/dist/bluesky-tool.js +368 -0
- package/dist/bluesky-tool.js.map +1 -0
- package/dist/catalog.d.ts +28 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +1865 -0
- package/dist/catalog.js.map +1 -0
- package/dist/client.d.ts +12 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +73 -0
- package/dist/client.js.map +1 -0
- package/dist/converter-tools.d.ts +50 -0
- package/dist/converter-tools.d.ts.map +1 -0
- package/dist/converter-tools.js +137 -0
- package/dist/converter-tools.js.map +1 -0
- package/dist/csuite-tool.d.ts +35 -0
- package/dist/csuite-tool.d.ts.map +1 -0
- package/dist/csuite-tool.js +791 -0
- package/dist/csuite-tool.js.map +1 -0
- package/dist/discord-tool.d.ts +8 -0
- package/dist/discord-tool.d.ts.map +1 -0
- package/dist/discord-tool.js +195 -0
- package/dist/discord-tool.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/local-tools.d.ts +72 -0
- package/dist/local-tools.d.ts.map +1 -0
- package/dist/local-tools.js +563 -0
- package/dist/local-tools.js.map +1 -0
- package/dist/mastodon-tool.d.ts +2 -0
- package/dist/mastodon-tool.d.ts.map +1 -0
- package/dist/mastodon-tool.js +372 -0
- package/dist/mastodon-tool.js.map +1 -0
- package/dist/reddit-tool.d.ts +59 -0
- package/dist/reddit-tool.d.ts.map +1 -0
- package/dist/reddit-tool.js +348 -0
- package/dist/reddit-tool.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2337 -0
- package/dist/server.js.map +1 -0
- package/dist/shopify-tool.d.ts +8 -0
- package/dist/shopify-tool.d.ts.map +1 -0
- package/dist/shopify-tool.js +305 -0
- package/dist/shopify-tool.js.map +1 -0
- package/dist/slack-tool.d.ts +2 -0
- package/dist/slack-tool.d.ts.map +1 -0
- package/dist/slack-tool.js +316 -0
- package/dist/slack-tool.js.map +1 -0
- package/dist/telegram-tool.d.ts +7 -0
- package/dist/telegram-tool.d.ts.map +1 -0
- package/dist/telegram-tool.js +297 -0
- package/dist/telegram-tool.js.map +1 -0
- package/dist/vault-tool.d.ts +2 -0
- package/dist/vault-tool.d.ts.map +1 -0
- package/dist/vault-tool.js +395 -0
- package/dist/vault-tool.js.map +1 -0
- package/dist/xero-tool.d.ts +9 -0
- package/dist/xero-tool.d.ts.map +1 -0
- package/dist/xero-tool.js +330 -0
- package/dist/xero-tool.js.map +1 -0
- package/package.json +57 -0
package/dist/catalog.js
ADDED
|
@@ -0,0 +1,1865 @@
|
|
|
1
|
+
export const CATEGORIES = [
|
|
2
|
+
"text",
|
|
3
|
+
"data",
|
|
4
|
+
"media",
|
|
5
|
+
"time",
|
|
6
|
+
"network",
|
|
7
|
+
"generation",
|
|
8
|
+
"storage",
|
|
9
|
+
"platform",
|
|
10
|
+
];
|
|
11
|
+
export const CATALOG = [
|
|
12
|
+
// ─── TEXT ──────────────────────────────────────────────────────────
|
|
13
|
+
{
|
|
14
|
+
slug: "transform",
|
|
15
|
+
name: "Text Transform",
|
|
16
|
+
description: "Transform text: change case (upper/lower/title/camel/snake/kebab/pascal), slugify, truncate, word/char count, strip HTML, reverse.",
|
|
17
|
+
category: "text",
|
|
18
|
+
scope: "transform:use",
|
|
19
|
+
endpoints: [
|
|
20
|
+
{
|
|
21
|
+
id: "transform.case",
|
|
22
|
+
name: "Change Case",
|
|
23
|
+
description: "Convert text to upper, lower, title, sentence, camelCase, snake_case, kebab-case, or PascalCase.",
|
|
24
|
+
method: "POST",
|
|
25
|
+
path: "/v1/transform/case",
|
|
26
|
+
requiresAuth: true,
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: "object",
|
|
29
|
+
properties: {
|
|
30
|
+
text: { type: "string", description: "Input text" },
|
|
31
|
+
to: {
|
|
32
|
+
type: "string",
|
|
33
|
+
enum: [
|
|
34
|
+
"upper",
|
|
35
|
+
"lower",
|
|
36
|
+
"title",
|
|
37
|
+
"sentence",
|
|
38
|
+
"camel",
|
|
39
|
+
"snake",
|
|
40
|
+
"kebab",
|
|
41
|
+
"pascal",
|
|
42
|
+
],
|
|
43
|
+
description: "Target case format",
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
required: ["text", "to"],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "transform.slug",
|
|
51
|
+
name: "Slugify",
|
|
52
|
+
description: "Convert text to a URL-friendly slug.",
|
|
53
|
+
method: "POST",
|
|
54
|
+
path: "/v1/transform/slug",
|
|
55
|
+
requiresAuth: true,
|
|
56
|
+
inputSchema: {
|
|
57
|
+
type: "object",
|
|
58
|
+
properties: { text: { type: "string" } },
|
|
59
|
+
required: ["text"],
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "transform.truncate",
|
|
64
|
+
name: "Truncate",
|
|
65
|
+
description: "Truncate text to a maximum length with optional ellipsis.",
|
|
66
|
+
method: "POST",
|
|
67
|
+
path: "/v1/transform/truncate",
|
|
68
|
+
requiresAuth: true,
|
|
69
|
+
inputSchema: {
|
|
70
|
+
type: "object",
|
|
71
|
+
properties: {
|
|
72
|
+
text: { type: "string" },
|
|
73
|
+
length: { type: "number", description: "Max character length" },
|
|
74
|
+
ellipsis: {
|
|
75
|
+
type: "boolean",
|
|
76
|
+
description: "Append '...' if truncated",
|
|
77
|
+
default: true,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ["text", "length"],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "transform.count",
|
|
85
|
+
name: "Word & Character Count",
|
|
86
|
+
description: "Count words, characters, sentences, paragraphs, and estimate reading time.",
|
|
87
|
+
method: "POST",
|
|
88
|
+
path: "/v1/transform/count",
|
|
89
|
+
requiresAuth: true,
|
|
90
|
+
inputSchema: {
|
|
91
|
+
type: "object",
|
|
92
|
+
properties: {
|
|
93
|
+
text: { type: "string" },
|
|
94
|
+
words_per_minute: {
|
|
95
|
+
type: "number",
|
|
96
|
+
default: 200,
|
|
97
|
+
description: "Reading speed for time estimate",
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
required: ["text"],
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: "transform.strip",
|
|
105
|
+
name: "Strip HTML",
|
|
106
|
+
description: "Strip HTML tags and decode entities to plain text.",
|
|
107
|
+
method: "POST",
|
|
108
|
+
path: "/v1/transform/strip",
|
|
109
|
+
requiresAuth: true,
|
|
110
|
+
inputSchema: {
|
|
111
|
+
type: "object",
|
|
112
|
+
properties: { text: { type: "string" } },
|
|
113
|
+
required: ["text"],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "transform.reverse",
|
|
118
|
+
name: "Reverse",
|
|
119
|
+
description: "Reverse a string (Unicode-safe).",
|
|
120
|
+
method: "POST",
|
|
121
|
+
path: "/v1/transform/reverse",
|
|
122
|
+
requiresAuth: true,
|
|
123
|
+
inputSchema: {
|
|
124
|
+
type: "object",
|
|
125
|
+
properties: { text: { type: "string" } },
|
|
126
|
+
required: ["text"],
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
slug: "encode",
|
|
133
|
+
name: "Encode / Decode",
|
|
134
|
+
description: "Encode and decode text: Base64, URL encoding, HTML entities, hex.",
|
|
135
|
+
category: "text",
|
|
136
|
+
scope: "encode:use",
|
|
137
|
+
endpoints: [
|
|
138
|
+
{
|
|
139
|
+
id: "encode.base64",
|
|
140
|
+
name: "Base64 Encode",
|
|
141
|
+
description: "Encode text to Base64.",
|
|
142
|
+
method: "POST",
|
|
143
|
+
path: "/v1/encode/base64",
|
|
144
|
+
requiresAuth: true,
|
|
145
|
+
inputSchema: {
|
|
146
|
+
type: "object",
|
|
147
|
+
properties: { text: { type: "string" } },
|
|
148
|
+
required: ["text"],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: "decode.base64",
|
|
153
|
+
name: "Base64 Decode",
|
|
154
|
+
description: "Decode Base64 back to text.",
|
|
155
|
+
method: "POST",
|
|
156
|
+
path: "/v1/decode/base64",
|
|
157
|
+
requiresAuth: true,
|
|
158
|
+
inputSchema: {
|
|
159
|
+
type: "object",
|
|
160
|
+
properties: { text: { type: "string" } },
|
|
161
|
+
required: ["text"],
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
id: "encode.url",
|
|
166
|
+
name: "URL Encode",
|
|
167
|
+
description: "URL-encode text (encodeURIComponent).",
|
|
168
|
+
method: "POST",
|
|
169
|
+
path: "/v1/encode/url",
|
|
170
|
+
requiresAuth: true,
|
|
171
|
+
inputSchema: {
|
|
172
|
+
type: "object",
|
|
173
|
+
properties: { text: { type: "string" } },
|
|
174
|
+
required: ["text"],
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
id: "decode.url",
|
|
179
|
+
name: "URL Decode",
|
|
180
|
+
description: "URL-decode text (decodeURIComponent).",
|
|
181
|
+
method: "POST",
|
|
182
|
+
path: "/v1/decode/url",
|
|
183
|
+
requiresAuth: true,
|
|
184
|
+
inputSchema: {
|
|
185
|
+
type: "object",
|
|
186
|
+
properties: { text: { type: "string" } },
|
|
187
|
+
required: ["text"],
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "encode.html",
|
|
192
|
+
name: "HTML Encode",
|
|
193
|
+
description: "Escape HTML special characters (<, >, &, quotes).",
|
|
194
|
+
method: "POST",
|
|
195
|
+
path: "/v1/encode/html",
|
|
196
|
+
requiresAuth: true,
|
|
197
|
+
inputSchema: {
|
|
198
|
+
type: "object",
|
|
199
|
+
properties: { text: { type: "string" } },
|
|
200
|
+
required: ["text"],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: "decode.html",
|
|
205
|
+
name: "HTML Decode",
|
|
206
|
+
description: "Decode HTML entities back to characters.",
|
|
207
|
+
method: "POST",
|
|
208
|
+
path: "/v1/decode/html",
|
|
209
|
+
requiresAuth: true,
|
|
210
|
+
inputSchema: {
|
|
211
|
+
type: "object",
|
|
212
|
+
properties: { text: { type: "string" } },
|
|
213
|
+
required: ["text"],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: "encode.hex",
|
|
218
|
+
name: "Hex Encode",
|
|
219
|
+
description: "Encode text to hex representation.",
|
|
220
|
+
method: "POST",
|
|
221
|
+
path: "/v1/encode/hex",
|
|
222
|
+
requiresAuth: true,
|
|
223
|
+
inputSchema: {
|
|
224
|
+
type: "object",
|
|
225
|
+
properties: { text: { type: "string" } },
|
|
226
|
+
required: ["text"],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
id: "decode.hex",
|
|
231
|
+
name: "Hex Decode",
|
|
232
|
+
description: "Decode hex back to text.",
|
|
233
|
+
method: "POST",
|
|
234
|
+
path: "/v1/decode/hex",
|
|
235
|
+
requiresAuth: true,
|
|
236
|
+
inputSchema: {
|
|
237
|
+
type: "object",
|
|
238
|
+
properties: { text: { type: "string" } },
|
|
239
|
+
required: ["text"],
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
],
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
slug: "hash",
|
|
246
|
+
name: "Hash & HMAC",
|
|
247
|
+
description: "Compute cryptographic hashes (MD5, SHA1, SHA256, SHA512), verify hashes, compute HMAC signatures.",
|
|
248
|
+
category: "text",
|
|
249
|
+
scope: "hash:use",
|
|
250
|
+
endpoints: [
|
|
251
|
+
{
|
|
252
|
+
id: "hash.compute",
|
|
253
|
+
name: "Hash",
|
|
254
|
+
description: "Compute a hash of text using the specified algorithm.",
|
|
255
|
+
method: "POST",
|
|
256
|
+
path: "/v1/hash",
|
|
257
|
+
requiresAuth: true,
|
|
258
|
+
inputSchema: {
|
|
259
|
+
type: "object",
|
|
260
|
+
properties: {
|
|
261
|
+
text: { type: "string" },
|
|
262
|
+
algorithm: {
|
|
263
|
+
type: "string",
|
|
264
|
+
enum: ["md5", "sha1", "sha256", "sha512"],
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
required: ["text", "algorithm"],
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
id: "hash.verify",
|
|
272
|
+
name: "Verify Hash",
|
|
273
|
+
description: "Verify that text matches a hash (constant-time comparison).",
|
|
274
|
+
method: "POST",
|
|
275
|
+
path: "/v1/hash/verify",
|
|
276
|
+
requiresAuth: true,
|
|
277
|
+
inputSchema: {
|
|
278
|
+
type: "object",
|
|
279
|
+
properties: {
|
|
280
|
+
text: { type: "string" },
|
|
281
|
+
hash: { type: "string" },
|
|
282
|
+
algorithm: {
|
|
283
|
+
type: "string",
|
|
284
|
+
enum: ["md5", "sha1", "sha256", "sha512"],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
required: ["text", "hash", "algorithm"],
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
id: "hash.hmac",
|
|
292
|
+
name: "HMAC",
|
|
293
|
+
description: "Compute an HMAC signature.",
|
|
294
|
+
method: "POST",
|
|
295
|
+
path: "/v1/hash/hmac",
|
|
296
|
+
requiresAuth: true,
|
|
297
|
+
inputSchema: {
|
|
298
|
+
type: "object",
|
|
299
|
+
properties: {
|
|
300
|
+
text: { type: "string" },
|
|
301
|
+
key: { type: "string" },
|
|
302
|
+
algorithm: {
|
|
303
|
+
type: "string",
|
|
304
|
+
enum: ["md5", "sha1", "sha256", "sha512"],
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
required: ["text", "key", "algorithm"],
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
slug: "regex",
|
|
314
|
+
name: "Regex",
|
|
315
|
+
description: "Test, extract, replace, split, and validate regular expressions against text.",
|
|
316
|
+
category: "text",
|
|
317
|
+
scope: "regex:use",
|
|
318
|
+
endpoints: [
|
|
319
|
+
{
|
|
320
|
+
id: "regex.test",
|
|
321
|
+
name: "Test / Match",
|
|
322
|
+
description: "Find all matches with capture groups and indices.",
|
|
323
|
+
method: "POST",
|
|
324
|
+
path: "/v1/regex/test",
|
|
325
|
+
requiresAuth: true,
|
|
326
|
+
inputSchema: {
|
|
327
|
+
type: "object",
|
|
328
|
+
properties: {
|
|
329
|
+
pattern: { type: "string", description: "Regex pattern (without slashes)" },
|
|
330
|
+
flags: { type: "string", description: "Regex flags, e.g. 'gi'", default: "" },
|
|
331
|
+
input: { type: "string" },
|
|
332
|
+
},
|
|
333
|
+
required: ["pattern", "input"],
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
id: "regex.replace",
|
|
338
|
+
name: "Replace",
|
|
339
|
+
description: "Replace matches using backreferences ($1, $2).",
|
|
340
|
+
method: "POST",
|
|
341
|
+
path: "/v1/regex/replace",
|
|
342
|
+
requiresAuth: true,
|
|
343
|
+
inputSchema: {
|
|
344
|
+
type: "object",
|
|
345
|
+
properties: {
|
|
346
|
+
pattern: { type: "string" },
|
|
347
|
+
flags: { type: "string", default: "" },
|
|
348
|
+
input: { type: "string" },
|
|
349
|
+
replacement: { type: "string" },
|
|
350
|
+
global: { type: "boolean", default: true },
|
|
351
|
+
},
|
|
352
|
+
required: ["pattern", "input", "replacement"],
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
id: "regex.extract",
|
|
357
|
+
name: "Extract",
|
|
358
|
+
description: "Extract all matches as a flat array of strings.",
|
|
359
|
+
method: "POST",
|
|
360
|
+
path: "/v1/regex/extract",
|
|
361
|
+
requiresAuth: true,
|
|
362
|
+
inputSchema: {
|
|
363
|
+
type: "object",
|
|
364
|
+
properties: {
|
|
365
|
+
pattern: { type: "string" },
|
|
366
|
+
flags: { type: "string", default: "" },
|
|
367
|
+
input: { type: "string" },
|
|
368
|
+
},
|
|
369
|
+
required: ["pattern", "input"],
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
id: "regex.split",
|
|
374
|
+
name: "Split",
|
|
375
|
+
description: "Split a string by a regex delimiter.",
|
|
376
|
+
method: "POST",
|
|
377
|
+
path: "/v1/regex/split",
|
|
378
|
+
requiresAuth: true,
|
|
379
|
+
inputSchema: {
|
|
380
|
+
type: "object",
|
|
381
|
+
properties: {
|
|
382
|
+
pattern: { type: "string" },
|
|
383
|
+
flags: { type: "string", default: "" },
|
|
384
|
+
input: { type: "string" },
|
|
385
|
+
limit: { type: "number" },
|
|
386
|
+
},
|
|
387
|
+
required: ["pattern", "input"],
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
id: "regex.validate",
|
|
392
|
+
name: "Validate Pattern",
|
|
393
|
+
description: "Check if a regex pattern is valid syntax.",
|
|
394
|
+
method: "POST",
|
|
395
|
+
path: "/v1/regex/validate",
|
|
396
|
+
requiresAuth: true,
|
|
397
|
+
inputSchema: {
|
|
398
|
+
type: "object",
|
|
399
|
+
properties: {
|
|
400
|
+
pattern: { type: "string" },
|
|
401
|
+
flags: { type: "string", default: "" },
|
|
402
|
+
},
|
|
403
|
+
required: ["pattern"],
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
slug: "markdown",
|
|
410
|
+
name: "Markdown",
|
|
411
|
+
description: "Convert Markdown to HTML or plain text, extract table of contents, lint for issues.",
|
|
412
|
+
category: "text",
|
|
413
|
+
scope: "markdown:use",
|
|
414
|
+
endpoints: [
|
|
415
|
+
{
|
|
416
|
+
id: "markdown.to-html",
|
|
417
|
+
name: "To HTML",
|
|
418
|
+
description: "Convert Markdown to HTML.",
|
|
419
|
+
method: "POST",
|
|
420
|
+
path: "/v1/markdown/to-html",
|
|
421
|
+
requiresAuth: true,
|
|
422
|
+
inputSchema: {
|
|
423
|
+
type: "object",
|
|
424
|
+
properties: { markdown: { type: "string" } },
|
|
425
|
+
required: ["markdown"],
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
id: "markdown.to-text",
|
|
430
|
+
name: "To Plain Text",
|
|
431
|
+
description: "Strip Markdown formatting and return plain text.",
|
|
432
|
+
method: "POST",
|
|
433
|
+
path: "/v1/markdown/to-text",
|
|
434
|
+
requiresAuth: true,
|
|
435
|
+
inputSchema: {
|
|
436
|
+
type: "object",
|
|
437
|
+
properties: { markdown: { type: "string" } },
|
|
438
|
+
required: ["markdown"],
|
|
439
|
+
},
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
id: "markdown.toc",
|
|
443
|
+
name: "Table of Contents",
|
|
444
|
+
description: "Extract heading hierarchy as a table of contents.",
|
|
445
|
+
method: "POST",
|
|
446
|
+
path: "/v1/markdown/toc",
|
|
447
|
+
requiresAuth: true,
|
|
448
|
+
inputSchema: {
|
|
449
|
+
type: "object",
|
|
450
|
+
properties: { markdown: { type: "string" } },
|
|
451
|
+
required: ["markdown"],
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
id: "markdown.lint",
|
|
456
|
+
name: "Lint",
|
|
457
|
+
description: "Check Markdown for common issues (unclosed code blocks, broken links, etc.).",
|
|
458
|
+
method: "POST",
|
|
459
|
+
path: "/v1/markdown/lint",
|
|
460
|
+
requiresAuth: true,
|
|
461
|
+
inputSchema: {
|
|
462
|
+
type: "object",
|
|
463
|
+
properties: { markdown: { type: "string" } },
|
|
464
|
+
required: ["markdown"],
|
|
465
|
+
},
|
|
466
|
+
},
|
|
467
|
+
],
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
slug: "diff",
|
|
471
|
+
name: "Text Diff",
|
|
472
|
+
description: "Compare two texts and produce unified diffs, line-by-line diffs, word diffs, or apply patches.",
|
|
473
|
+
category: "text",
|
|
474
|
+
scope: "diff:use",
|
|
475
|
+
endpoints: [
|
|
476
|
+
{
|
|
477
|
+
id: "diff.text",
|
|
478
|
+
name: "Unified Diff",
|
|
479
|
+
description: "Generate a unified diff (patch) between two strings.",
|
|
480
|
+
method: "POST",
|
|
481
|
+
path: "/v1/diff/text",
|
|
482
|
+
requiresAuth: true,
|
|
483
|
+
inputSchema: {
|
|
484
|
+
type: "object",
|
|
485
|
+
properties: {
|
|
486
|
+
a: { type: "string", description: "Original text" },
|
|
487
|
+
b: { type: "string", description: "New text" },
|
|
488
|
+
filename_a: { type: "string" },
|
|
489
|
+
filename_b: { type: "string" },
|
|
490
|
+
},
|
|
491
|
+
required: ["a", "b"],
|
|
492
|
+
},
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
id: "diff.lines",
|
|
496
|
+
name: "Line-by-Line Diff",
|
|
497
|
+
description: "Structured line-by-line diff with added/removed/unchanged markers.",
|
|
498
|
+
method: "POST",
|
|
499
|
+
path: "/v1/diff/lines",
|
|
500
|
+
requiresAuth: true,
|
|
501
|
+
inputSchema: {
|
|
502
|
+
type: "object",
|
|
503
|
+
properties: {
|
|
504
|
+
a: { type: "string" },
|
|
505
|
+
b: { type: "string" },
|
|
506
|
+
},
|
|
507
|
+
required: ["a", "b"],
|
|
508
|
+
},
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
id: "diff.words",
|
|
512
|
+
name: "Word Diff",
|
|
513
|
+
description: "Word-level diff showing exactly which words changed.",
|
|
514
|
+
method: "POST",
|
|
515
|
+
path: "/v1/diff/words",
|
|
516
|
+
requiresAuth: true,
|
|
517
|
+
inputSchema: {
|
|
518
|
+
type: "object",
|
|
519
|
+
properties: {
|
|
520
|
+
a: { type: "string" },
|
|
521
|
+
b: { type: "string" },
|
|
522
|
+
},
|
|
523
|
+
required: ["a", "b"],
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
id: "diff.patch",
|
|
528
|
+
name: "Apply Patch",
|
|
529
|
+
description: "Apply a unified diff patch to original text.",
|
|
530
|
+
method: "POST",
|
|
531
|
+
path: "/v1/diff/patch",
|
|
532
|
+
requiresAuth: true,
|
|
533
|
+
inputSchema: {
|
|
534
|
+
type: "object",
|
|
535
|
+
properties: {
|
|
536
|
+
original: { type: "string" },
|
|
537
|
+
patch: { type: "string" },
|
|
538
|
+
},
|
|
539
|
+
required: ["original", "patch"],
|
|
540
|
+
},
|
|
541
|
+
},
|
|
542
|
+
],
|
|
543
|
+
},
|
|
544
|
+
// ─── DATA ──────────────────────────────────────────────────────────
|
|
545
|
+
{
|
|
546
|
+
slug: "json",
|
|
547
|
+
name: "JSON Utilities",
|
|
548
|
+
description: "Format, minify, query, flatten, unflatten, diff, merge, and generate JSON Schema.",
|
|
549
|
+
category: "data",
|
|
550
|
+
scope: "json:use",
|
|
551
|
+
endpoints: [
|
|
552
|
+
{
|
|
553
|
+
id: "json.format",
|
|
554
|
+
name: "Format / Pretty-Print",
|
|
555
|
+
description: "Pretty-print JSON with configurable indentation.",
|
|
556
|
+
method: "POST",
|
|
557
|
+
path: "/v1/json/format",
|
|
558
|
+
requiresAuth: true,
|
|
559
|
+
inputSchema: {
|
|
560
|
+
type: "object",
|
|
561
|
+
properties: {
|
|
562
|
+
json: { type: "string", description: "JSON string to format" },
|
|
563
|
+
indent: {
|
|
564
|
+
description: "Indentation: 2, 4, or 'tab'",
|
|
565
|
+
oneOf: [{ type: "number" }, { type: "string", enum: ["tab"] }],
|
|
566
|
+
default: 2,
|
|
567
|
+
},
|
|
568
|
+
},
|
|
569
|
+
required: ["json"],
|
|
570
|
+
},
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
id: "json.minify",
|
|
574
|
+
name: "Minify",
|
|
575
|
+
description: "Strip all whitespace from JSON.",
|
|
576
|
+
method: "POST",
|
|
577
|
+
path: "/v1/json/minify",
|
|
578
|
+
requiresAuth: true,
|
|
579
|
+
inputSchema: {
|
|
580
|
+
type: "object",
|
|
581
|
+
properties: { json: { type: "string" } },
|
|
582
|
+
required: ["json"],
|
|
583
|
+
},
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
id: "json.query",
|
|
587
|
+
name: "Query (JSONPath)",
|
|
588
|
+
description: "Query JSON using dot-notation or JSONPath expressions.",
|
|
589
|
+
method: "POST",
|
|
590
|
+
path: "/v1/json/query",
|
|
591
|
+
requiresAuth: true,
|
|
592
|
+
inputSchema: {
|
|
593
|
+
type: "object",
|
|
594
|
+
properties: {
|
|
595
|
+
json: { type: "string" },
|
|
596
|
+
query: {
|
|
597
|
+
type: "string",
|
|
598
|
+
description: "e.g. 'user.name' or '$.users[0].email'",
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
required: ["json", "query"],
|
|
602
|
+
},
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
id: "json.flatten",
|
|
606
|
+
name: "Flatten",
|
|
607
|
+
description: "Flatten nested JSON to dot-notation keys.",
|
|
608
|
+
method: "POST",
|
|
609
|
+
path: "/v1/json/flatten",
|
|
610
|
+
requiresAuth: true,
|
|
611
|
+
inputSchema: {
|
|
612
|
+
type: "object",
|
|
613
|
+
properties: {
|
|
614
|
+
json: { type: "string" },
|
|
615
|
+
delimiter: { type: "string", default: "." },
|
|
616
|
+
},
|
|
617
|
+
required: ["json"],
|
|
618
|
+
},
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
id: "json.unflatten",
|
|
622
|
+
name: "Unflatten",
|
|
623
|
+
description: "Expand dot-notation keys back to nested JSON.",
|
|
624
|
+
method: "POST",
|
|
625
|
+
path: "/v1/json/unflatten",
|
|
626
|
+
requiresAuth: true,
|
|
627
|
+
inputSchema: {
|
|
628
|
+
type: "object",
|
|
629
|
+
properties: {
|
|
630
|
+
json: { type: "string" },
|
|
631
|
+
delimiter: { type: "string", default: "." },
|
|
632
|
+
},
|
|
633
|
+
required: ["json"],
|
|
634
|
+
},
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
id: "json.diff",
|
|
638
|
+
name: "JSON Diff",
|
|
639
|
+
description: "Compare two JSON objects and show added, removed, and changed paths.",
|
|
640
|
+
method: "POST",
|
|
641
|
+
path: "/v1/json/diff",
|
|
642
|
+
requiresAuth: true,
|
|
643
|
+
inputSchema: {
|
|
644
|
+
type: "object",
|
|
645
|
+
properties: {
|
|
646
|
+
a: { type: "string", description: "First JSON string" },
|
|
647
|
+
b: { type: "string", description: "Second JSON string" },
|
|
648
|
+
},
|
|
649
|
+
required: ["a", "b"],
|
|
650
|
+
},
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
id: "json.merge",
|
|
654
|
+
name: "Deep Merge",
|
|
655
|
+
description: "Deep-merge 2–10 JSON objects.",
|
|
656
|
+
method: "POST",
|
|
657
|
+
path: "/v1/json/merge",
|
|
658
|
+
requiresAuth: true,
|
|
659
|
+
inputSchema: {
|
|
660
|
+
type: "object",
|
|
661
|
+
properties: {
|
|
662
|
+
objects: {
|
|
663
|
+
type: "array",
|
|
664
|
+
items: { type: "string" },
|
|
665
|
+
minItems: 2,
|
|
666
|
+
maxItems: 10,
|
|
667
|
+
description: "Array of JSON strings to merge",
|
|
668
|
+
},
|
|
669
|
+
},
|
|
670
|
+
required: ["objects"],
|
|
671
|
+
},
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
id: "json.schema",
|
|
675
|
+
name: "Generate Schema",
|
|
676
|
+
description: "Infer a JSON Schema from a sample JSON value.",
|
|
677
|
+
method: "POST",
|
|
678
|
+
path: "/v1/json/schema",
|
|
679
|
+
requiresAuth: true,
|
|
680
|
+
inputSchema: {
|
|
681
|
+
type: "object",
|
|
682
|
+
properties: { json: { type: "string", description: "Sample JSON" } },
|
|
683
|
+
required: ["json"],
|
|
684
|
+
},
|
|
685
|
+
},
|
|
686
|
+
],
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
slug: "csv",
|
|
690
|
+
name: "CSV Processing",
|
|
691
|
+
description: "Parse, generate, query, sort, inspect columns, and compute statistics on CSV data.",
|
|
692
|
+
category: "data",
|
|
693
|
+
scope: "csv:use",
|
|
694
|
+
endpoints: [
|
|
695
|
+
{
|
|
696
|
+
id: "csv.parse",
|
|
697
|
+
name: "Parse",
|
|
698
|
+
description: "Parse a CSV string into a JSON array of rows.",
|
|
699
|
+
method: "POST",
|
|
700
|
+
path: "/v1/csv/parse",
|
|
701
|
+
requiresAuth: true,
|
|
702
|
+
inputSchema: {
|
|
703
|
+
type: "object",
|
|
704
|
+
properties: {
|
|
705
|
+
csv: { type: "string" },
|
|
706
|
+
header: { type: "boolean", default: true, description: "First row is header" },
|
|
707
|
+
delimiter: { type: "string", default: "," },
|
|
708
|
+
},
|
|
709
|
+
required: ["csv"],
|
|
710
|
+
},
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
id: "csv.generate",
|
|
714
|
+
name: "Generate",
|
|
715
|
+
description: "Convert a JSON array of objects to CSV.",
|
|
716
|
+
method: "POST",
|
|
717
|
+
path: "/v1/csv/generate",
|
|
718
|
+
requiresAuth: true,
|
|
719
|
+
inputSchema: {
|
|
720
|
+
type: "object",
|
|
721
|
+
properties: {
|
|
722
|
+
data: { type: "array", items: { type: "object" } },
|
|
723
|
+
delimiter: { type: "string", default: "," },
|
|
724
|
+
},
|
|
725
|
+
required: ["data"],
|
|
726
|
+
},
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
id: "csv.query",
|
|
730
|
+
name: "Query / Filter",
|
|
731
|
+
description: "Filter CSV rows by conditions (equals, contains, gt, lt).",
|
|
732
|
+
method: "POST",
|
|
733
|
+
path: "/v1/csv/query",
|
|
734
|
+
requiresAuth: true,
|
|
735
|
+
inputSchema: {
|
|
736
|
+
type: "object",
|
|
737
|
+
properties: {
|
|
738
|
+
csv: { type: "string" },
|
|
739
|
+
conditions: {
|
|
740
|
+
type: "array",
|
|
741
|
+
items: {
|
|
742
|
+
type: "object",
|
|
743
|
+
properties: {
|
|
744
|
+
column: { type: "string" },
|
|
745
|
+
operator: {
|
|
746
|
+
type: "string",
|
|
747
|
+
enum: ["equals", "contains", "gt", "lt"],
|
|
748
|
+
},
|
|
749
|
+
value: { type: "string" },
|
|
750
|
+
},
|
|
751
|
+
required: ["column", "operator", "value"],
|
|
752
|
+
},
|
|
753
|
+
},
|
|
754
|
+
},
|
|
755
|
+
required: ["csv", "conditions"],
|
|
756
|
+
},
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
id: "csv.sort",
|
|
760
|
+
name: "Sort",
|
|
761
|
+
description: "Sort CSV rows by one or more columns.",
|
|
762
|
+
method: "POST",
|
|
763
|
+
path: "/v1/csv/sort",
|
|
764
|
+
requiresAuth: true,
|
|
765
|
+
inputSchema: {
|
|
766
|
+
type: "object",
|
|
767
|
+
properties: {
|
|
768
|
+
csv: { type: "string" },
|
|
769
|
+
columns: {
|
|
770
|
+
type: "array",
|
|
771
|
+
items: {
|
|
772
|
+
type: "object",
|
|
773
|
+
properties: {
|
|
774
|
+
column: { type: "string" },
|
|
775
|
+
direction: { type: "string", enum: ["asc", "desc"] },
|
|
776
|
+
},
|
|
777
|
+
required: ["column", "direction"],
|
|
778
|
+
},
|
|
779
|
+
},
|
|
780
|
+
},
|
|
781
|
+
required: ["csv", "columns"],
|
|
782
|
+
},
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
id: "csv.columns",
|
|
786
|
+
name: "Inspect Columns",
|
|
787
|
+
description: "List column names and inferred data types.",
|
|
788
|
+
method: "POST",
|
|
789
|
+
path: "/v1/csv/columns",
|
|
790
|
+
requiresAuth: true,
|
|
791
|
+
inputSchema: {
|
|
792
|
+
type: "object",
|
|
793
|
+
properties: { csv: { type: "string" } },
|
|
794
|
+
required: ["csv"],
|
|
795
|
+
},
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
id: "csv.stats",
|
|
799
|
+
name: "Statistics",
|
|
800
|
+
description: "Compute min, max, mean, sum for numeric columns.",
|
|
801
|
+
method: "POST",
|
|
802
|
+
path: "/v1/csv/stats",
|
|
803
|
+
requiresAuth: true,
|
|
804
|
+
inputSchema: {
|
|
805
|
+
type: "object",
|
|
806
|
+
properties: { csv: { type: "string" } },
|
|
807
|
+
required: ["csv"],
|
|
808
|
+
},
|
|
809
|
+
},
|
|
810
|
+
],
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
slug: "validate",
|
|
814
|
+
name: "Input Validation",
|
|
815
|
+
description: "Validate emails, URLs, phone numbers, JSON, credit cards, IP addresses, and color values.",
|
|
816
|
+
category: "data",
|
|
817
|
+
scope: "validate:use",
|
|
818
|
+
endpoints: [
|
|
819
|
+
{
|
|
820
|
+
id: "validate.email",
|
|
821
|
+
name: "Validate Email",
|
|
822
|
+
description: "Check if an email address is syntactically valid.",
|
|
823
|
+
method: "POST",
|
|
824
|
+
path: "/v1/validate/email",
|
|
825
|
+
requiresAuth: true,
|
|
826
|
+
inputSchema: {
|
|
827
|
+
type: "object",
|
|
828
|
+
properties: { email: { type: "string" } },
|
|
829
|
+
required: ["email"],
|
|
830
|
+
},
|
|
831
|
+
},
|
|
832
|
+
{
|
|
833
|
+
id: "validate.url",
|
|
834
|
+
name: "Validate URL",
|
|
835
|
+
description: "Check if a URL is valid, optionally test if it's reachable.",
|
|
836
|
+
method: "POST",
|
|
837
|
+
path: "/v1/validate/url",
|
|
838
|
+
requiresAuth: true,
|
|
839
|
+
inputSchema: {
|
|
840
|
+
type: "object",
|
|
841
|
+
properties: {
|
|
842
|
+
url: { type: "string" },
|
|
843
|
+
check_reachable: {
|
|
844
|
+
type: "boolean",
|
|
845
|
+
default: false,
|
|
846
|
+
description: "Also perform a live reachability check",
|
|
847
|
+
},
|
|
848
|
+
},
|
|
849
|
+
required: ["url"],
|
|
850
|
+
},
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
id: "validate.phone",
|
|
854
|
+
name: "Validate Phone",
|
|
855
|
+
description: "Basic phone number format validation.",
|
|
856
|
+
method: "POST",
|
|
857
|
+
path: "/v1/validate/phone",
|
|
858
|
+
requiresAuth: true,
|
|
859
|
+
inputSchema: {
|
|
860
|
+
type: "object",
|
|
861
|
+
properties: { phone: { type: "string" } },
|
|
862
|
+
required: ["phone"],
|
|
863
|
+
},
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
id: "validate.json",
|
|
867
|
+
name: "Validate JSON",
|
|
868
|
+
description: "Check if a string is valid JSON and report its type.",
|
|
869
|
+
method: "POST",
|
|
870
|
+
path: "/v1/validate/json",
|
|
871
|
+
requiresAuth: true,
|
|
872
|
+
inputSchema: {
|
|
873
|
+
type: "object",
|
|
874
|
+
properties: { json: { type: "string" } },
|
|
875
|
+
required: ["json"],
|
|
876
|
+
},
|
|
877
|
+
},
|
|
878
|
+
{
|
|
879
|
+
id: "validate.credit-card",
|
|
880
|
+
name: "Validate Credit Card",
|
|
881
|
+
description: "Validate a credit card number using the Luhn algorithm.",
|
|
882
|
+
method: "POST",
|
|
883
|
+
path: "/v1/validate/credit-card",
|
|
884
|
+
requiresAuth: true,
|
|
885
|
+
inputSchema: {
|
|
886
|
+
type: "object",
|
|
887
|
+
properties: {
|
|
888
|
+
number: { type: "string", description: "Card number (digits only or formatted)" },
|
|
889
|
+
},
|
|
890
|
+
required: ["number"],
|
|
891
|
+
},
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
id: "validate.ip",
|
|
895
|
+
name: "Validate IP",
|
|
896
|
+
description: "Validate an IPv4 or IPv6 address.",
|
|
897
|
+
method: "POST",
|
|
898
|
+
path: "/v1/validate/ip",
|
|
899
|
+
requiresAuth: true,
|
|
900
|
+
inputSchema: {
|
|
901
|
+
type: "object",
|
|
902
|
+
properties: { ip: { type: "string" } },
|
|
903
|
+
required: ["ip"],
|
|
904
|
+
},
|
|
905
|
+
},
|
|
906
|
+
{
|
|
907
|
+
id: "validate.color",
|
|
908
|
+
name: "Validate Color",
|
|
909
|
+
description: "Validate a CSS color value (hex, rgb, rgba, hsl).",
|
|
910
|
+
method: "POST",
|
|
911
|
+
path: "/v1/validate/color",
|
|
912
|
+
requiresAuth: true,
|
|
913
|
+
inputSchema: {
|
|
914
|
+
type: "object",
|
|
915
|
+
properties: { color: { type: "string" } },
|
|
916
|
+
required: ["color"],
|
|
917
|
+
},
|
|
918
|
+
},
|
|
919
|
+
],
|
|
920
|
+
},
|
|
921
|
+
// ─── MEDIA ─────────────────────────────────────────────────────────
|
|
922
|
+
{
|
|
923
|
+
slug: "image",
|
|
924
|
+
name: "Image Processing",
|
|
925
|
+
description: "Resize, convert format, compress, crop, rotate, grayscale images. Input/output as base64.",
|
|
926
|
+
category: "media",
|
|
927
|
+
scope: "image:use",
|
|
928
|
+
endpoints: [
|
|
929
|
+
{
|
|
930
|
+
id: "image.resize",
|
|
931
|
+
name: "Resize",
|
|
932
|
+
description: "Resize an image to specified dimensions.",
|
|
933
|
+
method: "POST",
|
|
934
|
+
path: "/v1/image/resize",
|
|
935
|
+
requiresAuth: true,
|
|
936
|
+
inputSchema: {
|
|
937
|
+
type: "object",
|
|
938
|
+
properties: {
|
|
939
|
+
image: { type: "string", description: "Base64-encoded image" },
|
|
940
|
+
width: { type: "number" },
|
|
941
|
+
height: { type: "number" },
|
|
942
|
+
fit: {
|
|
943
|
+
type: "string",
|
|
944
|
+
enum: ["cover", "contain", "fill", "inside", "outside"],
|
|
945
|
+
default: "cover",
|
|
946
|
+
},
|
|
947
|
+
},
|
|
948
|
+
required: ["image", "width", "height"],
|
|
949
|
+
},
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
id: "image.convert",
|
|
953
|
+
name: "Convert Format",
|
|
954
|
+
description: "Convert image to JPEG, PNG, WebP, or AVIF.",
|
|
955
|
+
method: "POST",
|
|
956
|
+
path: "/v1/image/convert",
|
|
957
|
+
requiresAuth: true,
|
|
958
|
+
inputSchema: {
|
|
959
|
+
type: "object",
|
|
960
|
+
properties: {
|
|
961
|
+
image: { type: "string" },
|
|
962
|
+
format: { type: "string", enum: ["jpeg", "png", "webp", "avif"] },
|
|
963
|
+
quality: { type: "number", minimum: 1, maximum: 100, default: 80 },
|
|
964
|
+
},
|
|
965
|
+
required: ["image", "format"],
|
|
966
|
+
},
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
id: "image.compress",
|
|
970
|
+
name: "Compress",
|
|
971
|
+
description: "Compress an image at a given quality level.",
|
|
972
|
+
method: "POST",
|
|
973
|
+
path: "/v1/image/compress",
|
|
974
|
+
requiresAuth: true,
|
|
975
|
+
inputSchema: {
|
|
976
|
+
type: "object",
|
|
977
|
+
properties: {
|
|
978
|
+
image: { type: "string" },
|
|
979
|
+
quality: { type: "number", minimum: 1, maximum: 100, default: 75 },
|
|
980
|
+
},
|
|
981
|
+
required: ["image"],
|
|
982
|
+
},
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
id: "image.metadata",
|
|
986
|
+
name: "Metadata",
|
|
987
|
+
description: "Extract image dimensions, format, color space, and other metadata.",
|
|
988
|
+
method: "POST",
|
|
989
|
+
path: "/v1/image/metadata",
|
|
990
|
+
requiresAuth: true,
|
|
991
|
+
inputSchema: {
|
|
992
|
+
type: "object",
|
|
993
|
+
properties: { image: { type: "string" } },
|
|
994
|
+
required: ["image"],
|
|
995
|
+
},
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
id: "image.crop",
|
|
999
|
+
name: "Crop",
|
|
1000
|
+
description: "Crop an image to specified region.",
|
|
1001
|
+
method: "POST",
|
|
1002
|
+
path: "/v1/image/crop",
|
|
1003
|
+
requiresAuth: true,
|
|
1004
|
+
inputSchema: {
|
|
1005
|
+
type: "object",
|
|
1006
|
+
properties: {
|
|
1007
|
+
image: { type: "string" },
|
|
1008
|
+
x: { type: "number" },
|
|
1009
|
+
y: { type: "number" },
|
|
1010
|
+
width: { type: "number" },
|
|
1011
|
+
height: { type: "number" },
|
|
1012
|
+
},
|
|
1013
|
+
required: ["image", "x", "y", "width", "height"],
|
|
1014
|
+
},
|
|
1015
|
+
},
|
|
1016
|
+
{
|
|
1017
|
+
id: "image.rotate",
|
|
1018
|
+
name: "Rotate",
|
|
1019
|
+
description: "Rotate an image by degrees.",
|
|
1020
|
+
method: "POST",
|
|
1021
|
+
path: "/v1/image/rotate",
|
|
1022
|
+
requiresAuth: true,
|
|
1023
|
+
inputSchema: {
|
|
1024
|
+
type: "object",
|
|
1025
|
+
properties: {
|
|
1026
|
+
image: { type: "string" },
|
|
1027
|
+
degrees: { type: "number", minimum: -360, maximum: 360 },
|
|
1028
|
+
},
|
|
1029
|
+
required: ["image", "degrees"],
|
|
1030
|
+
},
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
id: "image.grayscale",
|
|
1034
|
+
name: "Grayscale",
|
|
1035
|
+
description: "Convert an image to grayscale.",
|
|
1036
|
+
method: "POST",
|
|
1037
|
+
path: "/v1/image/grayscale",
|
|
1038
|
+
requiresAuth: true,
|
|
1039
|
+
inputSchema: {
|
|
1040
|
+
type: "object",
|
|
1041
|
+
properties: { image: { type: "string" } },
|
|
1042
|
+
required: ["image"],
|
|
1043
|
+
},
|
|
1044
|
+
},
|
|
1045
|
+
],
|
|
1046
|
+
},
|
|
1047
|
+
{
|
|
1048
|
+
slug: "qr",
|
|
1049
|
+
name: "QR Code",
|
|
1050
|
+
description: "Generate QR codes as PNG or SVG from any text or URL.",
|
|
1051
|
+
category: "media",
|
|
1052
|
+
scope: "qr:write",
|
|
1053
|
+
endpoints: [
|
|
1054
|
+
{
|
|
1055
|
+
id: "qr.generate",
|
|
1056
|
+
name: "Generate QR Code",
|
|
1057
|
+
description: "Generate a QR code image (PNG or SVG) from text or a URL.",
|
|
1058
|
+
method: "POST",
|
|
1059
|
+
path: "/v1/qr",
|
|
1060
|
+
requiresAuth: true,
|
|
1061
|
+
inputSchema: {
|
|
1062
|
+
type: "object",
|
|
1063
|
+
properties: {
|
|
1064
|
+
text: { type: "string", description: "Content to encode in the QR code" },
|
|
1065
|
+
format: { type: "string", enum: ["png", "svg"], default: "png" },
|
|
1066
|
+
size: { type: "number", minimum: 100, maximum: 1000, default: 300 },
|
|
1067
|
+
margin: { type: "number", minimum: 0, maximum: 10, default: 4 },
|
|
1068
|
+
},
|
|
1069
|
+
required: ["text"],
|
|
1070
|
+
},
|
|
1071
|
+
},
|
|
1072
|
+
],
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
slug: "color",
|
|
1076
|
+
name: "Color Utilities",
|
|
1077
|
+
description: "Convert colors between hex/RGB/HSL/HSV, generate palettes, mix colors, check WCAG contrast, lighten/darken.",
|
|
1078
|
+
category: "media",
|
|
1079
|
+
scope: "color:use",
|
|
1080
|
+
endpoints: [
|
|
1081
|
+
{
|
|
1082
|
+
id: "color.convert",
|
|
1083
|
+
name: "Convert",
|
|
1084
|
+
description: "Convert a color between hex, RGB, HSL, and HSV formats.",
|
|
1085
|
+
method: "POST",
|
|
1086
|
+
path: "/v1/color/convert",
|
|
1087
|
+
requiresAuth: true,
|
|
1088
|
+
inputSchema: {
|
|
1089
|
+
type: "object",
|
|
1090
|
+
properties: {
|
|
1091
|
+
color: {
|
|
1092
|
+
description: "Color as hex string, RGB object {r,g,b}, or HSL object {h,s,l}",
|
|
1093
|
+
oneOf: [
|
|
1094
|
+
{ type: "string" },
|
|
1095
|
+
{
|
|
1096
|
+
type: "object",
|
|
1097
|
+
properties: {
|
|
1098
|
+
r: { type: "number" },
|
|
1099
|
+
g: { type: "number" },
|
|
1100
|
+
b: { type: "number" },
|
|
1101
|
+
},
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
type: "object",
|
|
1105
|
+
properties: {
|
|
1106
|
+
h: { type: "number" },
|
|
1107
|
+
s: { type: "number" },
|
|
1108
|
+
l: { type: "number" },
|
|
1109
|
+
},
|
|
1110
|
+
},
|
|
1111
|
+
],
|
|
1112
|
+
},
|
|
1113
|
+
},
|
|
1114
|
+
required: ["color"],
|
|
1115
|
+
},
|
|
1116
|
+
},
|
|
1117
|
+
{
|
|
1118
|
+
id: "color.palette",
|
|
1119
|
+
name: "Generate Palette",
|
|
1120
|
+
description: "Generate a color palette (complementary, analogous, triadic, etc.).",
|
|
1121
|
+
method: "POST",
|
|
1122
|
+
path: "/v1/color/palette",
|
|
1123
|
+
requiresAuth: true,
|
|
1124
|
+
inputSchema: {
|
|
1125
|
+
type: "object",
|
|
1126
|
+
properties: {
|
|
1127
|
+
color: { type: "string", description: "Base color as hex" },
|
|
1128
|
+
type: {
|
|
1129
|
+
type: "string",
|
|
1130
|
+
enum: [
|
|
1131
|
+
"complementary",
|
|
1132
|
+
"analogous",
|
|
1133
|
+
"triadic",
|
|
1134
|
+
"tetradic",
|
|
1135
|
+
"split-complementary",
|
|
1136
|
+
"monochromatic",
|
|
1137
|
+
],
|
|
1138
|
+
},
|
|
1139
|
+
},
|
|
1140
|
+
required: ["color", "type"],
|
|
1141
|
+
},
|
|
1142
|
+
},
|
|
1143
|
+
{
|
|
1144
|
+
id: "color.mix",
|
|
1145
|
+
name: "Mix Colors",
|
|
1146
|
+
description: "Blend two colors at a given weight (0.0–1.0).",
|
|
1147
|
+
method: "POST",
|
|
1148
|
+
path: "/v1/color/mix",
|
|
1149
|
+
requiresAuth: true,
|
|
1150
|
+
inputSchema: {
|
|
1151
|
+
type: "object",
|
|
1152
|
+
properties: {
|
|
1153
|
+
color1: { type: "string" },
|
|
1154
|
+
color2: { type: "string" },
|
|
1155
|
+
weight: { type: "number", minimum: 0, maximum: 1, default: 0.5 },
|
|
1156
|
+
},
|
|
1157
|
+
required: ["color1", "color2"],
|
|
1158
|
+
},
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
id: "color.contrast",
|
|
1162
|
+
name: "WCAG Contrast",
|
|
1163
|
+
description: "Check WCAG AA/AAA contrast ratio between two colors.",
|
|
1164
|
+
method: "POST",
|
|
1165
|
+
path: "/v1/color/contrast",
|
|
1166
|
+
requiresAuth: true,
|
|
1167
|
+
inputSchema: {
|
|
1168
|
+
type: "object",
|
|
1169
|
+
properties: {
|
|
1170
|
+
color1: { type: "string" },
|
|
1171
|
+
color2: { type: "string" },
|
|
1172
|
+
},
|
|
1173
|
+
required: ["color1", "color2"],
|
|
1174
|
+
},
|
|
1175
|
+
},
|
|
1176
|
+
{
|
|
1177
|
+
id: "color.lighten",
|
|
1178
|
+
name: "Lighten",
|
|
1179
|
+
description: "Increase a color's lightness by a percentage (0–100).",
|
|
1180
|
+
method: "POST",
|
|
1181
|
+
path: "/v1/color/lighten",
|
|
1182
|
+
requiresAuth: true,
|
|
1183
|
+
inputSchema: {
|
|
1184
|
+
type: "object",
|
|
1185
|
+
properties: {
|
|
1186
|
+
color: { type: "string" },
|
|
1187
|
+
amount: { type: "number", minimum: 0, maximum: 100 },
|
|
1188
|
+
},
|
|
1189
|
+
required: ["color", "amount"],
|
|
1190
|
+
},
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
id: "color.darken",
|
|
1194
|
+
name: "Darken",
|
|
1195
|
+
description: "Decrease a color's lightness by a percentage (0–100).",
|
|
1196
|
+
method: "POST",
|
|
1197
|
+
path: "/v1/color/darken",
|
|
1198
|
+
requiresAuth: true,
|
|
1199
|
+
inputSchema: {
|
|
1200
|
+
type: "object",
|
|
1201
|
+
properties: {
|
|
1202
|
+
color: { type: "string" },
|
|
1203
|
+
amount: { type: "number", minimum: 0, maximum: 100 },
|
|
1204
|
+
},
|
|
1205
|
+
required: ["color", "amount"],
|
|
1206
|
+
},
|
|
1207
|
+
},
|
|
1208
|
+
],
|
|
1209
|
+
},
|
|
1210
|
+
// ─── TIME ──────────────────────────────────────────────────────────
|
|
1211
|
+
{
|
|
1212
|
+
slug: "timestamp",
|
|
1213
|
+
name: "Timestamp Utilities",
|
|
1214
|
+
description: "Get current time, convert between timestamp formats, diff timestamps, add durations, format timestamps.",
|
|
1215
|
+
category: "time",
|
|
1216
|
+
scope: "timestamp:use",
|
|
1217
|
+
endpoints: [
|
|
1218
|
+
{
|
|
1219
|
+
id: "timestamp.now",
|
|
1220
|
+
name: "Now",
|
|
1221
|
+
description: "Get the current time in ISO, Unix seconds, Unix ms, and UTC string.",
|
|
1222
|
+
method: "POST",
|
|
1223
|
+
path: "/v1/timestamp/now",
|
|
1224
|
+
requiresAuth: true,
|
|
1225
|
+
inputSchema: { type: "object", properties: {} },
|
|
1226
|
+
},
|
|
1227
|
+
{
|
|
1228
|
+
id: "timestamp.convert",
|
|
1229
|
+
name: "Convert",
|
|
1230
|
+
description: "Convert any timestamp (ISO, Unix seconds, Unix ms) to all formats.",
|
|
1231
|
+
method: "POST",
|
|
1232
|
+
path: "/v1/timestamp/convert",
|
|
1233
|
+
requiresAuth: true,
|
|
1234
|
+
inputSchema: {
|
|
1235
|
+
type: "object",
|
|
1236
|
+
properties: {
|
|
1237
|
+
timestamp: {
|
|
1238
|
+
description: "ISO string, Unix seconds, or Unix milliseconds",
|
|
1239
|
+
oneOf: [{ type: "string" }, { type: "number" }],
|
|
1240
|
+
},
|
|
1241
|
+
},
|
|
1242
|
+
required: ["timestamp"],
|
|
1243
|
+
},
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
id: "timestamp.diff",
|
|
1247
|
+
name: "Difference",
|
|
1248
|
+
description: "Calculate the difference between two timestamps.",
|
|
1249
|
+
method: "POST",
|
|
1250
|
+
path: "/v1/timestamp/diff",
|
|
1251
|
+
requiresAuth: true,
|
|
1252
|
+
inputSchema: {
|
|
1253
|
+
type: "object",
|
|
1254
|
+
properties: {
|
|
1255
|
+
from: { description: "Start timestamp", oneOf: [{ type: "string" }, { type: "number" }] },
|
|
1256
|
+
to: { description: "End timestamp", oneOf: [{ type: "string" }, { type: "number" }] },
|
|
1257
|
+
},
|
|
1258
|
+
required: ["from", "to"],
|
|
1259
|
+
},
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
id: "timestamp.add",
|
|
1263
|
+
name: "Add Duration",
|
|
1264
|
+
description: "Add years, months, weeks, days, hours, minutes, or seconds to a timestamp.",
|
|
1265
|
+
method: "POST",
|
|
1266
|
+
path: "/v1/timestamp/add",
|
|
1267
|
+
requiresAuth: true,
|
|
1268
|
+
inputSchema: {
|
|
1269
|
+
type: "object",
|
|
1270
|
+
properties: {
|
|
1271
|
+
timestamp: { oneOf: [{ type: "string" }, { type: "number" }] },
|
|
1272
|
+
duration: {
|
|
1273
|
+
type: "object",
|
|
1274
|
+
properties: {
|
|
1275
|
+
years: { type: "number" },
|
|
1276
|
+
months: { type: "number" },
|
|
1277
|
+
weeks: { type: "number" },
|
|
1278
|
+
days: { type: "number" },
|
|
1279
|
+
hours: { type: "number" },
|
|
1280
|
+
minutes: { type: "number" },
|
|
1281
|
+
seconds: { type: "number" },
|
|
1282
|
+
},
|
|
1283
|
+
},
|
|
1284
|
+
},
|
|
1285
|
+
required: ["timestamp", "duration"],
|
|
1286
|
+
},
|
|
1287
|
+
},
|
|
1288
|
+
{
|
|
1289
|
+
id: "timestamp.format",
|
|
1290
|
+
name: "Format",
|
|
1291
|
+
description: "Format a timestamp using a custom pattern (YYYY-MM-DD HH:mm:ss etc.).",
|
|
1292
|
+
method: "POST",
|
|
1293
|
+
path: "/v1/timestamp/format",
|
|
1294
|
+
requiresAuth: true,
|
|
1295
|
+
inputSchema: {
|
|
1296
|
+
type: "object",
|
|
1297
|
+
properties: {
|
|
1298
|
+
timestamp: { oneOf: [{ type: "string" }, { type: "number" }] },
|
|
1299
|
+
format: { type: "string", description: "e.g. 'YYYY-MM-DD HH:mm:ss'" },
|
|
1300
|
+
},
|
|
1301
|
+
required: ["timestamp", "format"],
|
|
1302
|
+
},
|
|
1303
|
+
},
|
|
1304
|
+
],
|
|
1305
|
+
},
|
|
1306
|
+
{
|
|
1307
|
+
slug: "cron",
|
|
1308
|
+
name: "Cron",
|
|
1309
|
+
description: "Parse, validate, build, and preview next occurrences of cron expressions.",
|
|
1310
|
+
category: "time",
|
|
1311
|
+
scope: "cron:use",
|
|
1312
|
+
endpoints: [
|
|
1313
|
+
{
|
|
1314
|
+
id: "cron.parse",
|
|
1315
|
+
name: "Parse",
|
|
1316
|
+
description: "Convert a cron expression to a human-readable description.",
|
|
1317
|
+
method: "POST",
|
|
1318
|
+
path: "/v1/cron/parse",
|
|
1319
|
+
requiresAuth: true,
|
|
1320
|
+
inputSchema: {
|
|
1321
|
+
type: "object",
|
|
1322
|
+
properties: {
|
|
1323
|
+
expression: { type: "string", description: "e.g. '0 9 * * 1-5'" },
|
|
1324
|
+
},
|
|
1325
|
+
required: ["expression"],
|
|
1326
|
+
},
|
|
1327
|
+
},
|
|
1328
|
+
{
|
|
1329
|
+
id: "cron.next",
|
|
1330
|
+
name: "Next Occurrences",
|
|
1331
|
+
description: "Get the next N scheduled dates for a cron expression.",
|
|
1332
|
+
method: "POST",
|
|
1333
|
+
path: "/v1/cron/next",
|
|
1334
|
+
requiresAuth: true,
|
|
1335
|
+
inputSchema: {
|
|
1336
|
+
type: "object",
|
|
1337
|
+
properties: {
|
|
1338
|
+
expression: { type: "string" },
|
|
1339
|
+
count: { type: "number", minimum: 1, maximum: 50, default: 5 },
|
|
1340
|
+
after: { type: "string", description: "ISO8601 start date (defaults to now)" },
|
|
1341
|
+
},
|
|
1342
|
+
required: ["expression"],
|
|
1343
|
+
},
|
|
1344
|
+
},
|
|
1345
|
+
{
|
|
1346
|
+
id: "cron.validate",
|
|
1347
|
+
name: "Validate",
|
|
1348
|
+
description: "Check if a cron expression is valid and get field breakdown.",
|
|
1349
|
+
method: "POST",
|
|
1350
|
+
path: "/v1/cron/validate",
|
|
1351
|
+
requiresAuth: true,
|
|
1352
|
+
inputSchema: {
|
|
1353
|
+
type: "object",
|
|
1354
|
+
properties: { expression: { type: "string" } },
|
|
1355
|
+
required: ["expression"],
|
|
1356
|
+
},
|
|
1357
|
+
},
|
|
1358
|
+
{
|
|
1359
|
+
id: "cron.build",
|
|
1360
|
+
name: "Build",
|
|
1361
|
+
description: "Build a cron expression from plain English parameters.",
|
|
1362
|
+
method: "POST",
|
|
1363
|
+
path: "/v1/cron/build",
|
|
1364
|
+
requiresAuth: true,
|
|
1365
|
+
inputSchema: {
|
|
1366
|
+
type: "object",
|
|
1367
|
+
properties: {
|
|
1368
|
+
every: {
|
|
1369
|
+
type: "string",
|
|
1370
|
+
description: "Interval: 'day', 'hour', 'minute', 'week', 'month', or weekday name",
|
|
1371
|
+
},
|
|
1372
|
+
at: { type: "string", description: "Time of day as HH:MM, e.g. '09:00'" },
|
|
1373
|
+
on: { type: "string", description: "Day of month or weekday name" },
|
|
1374
|
+
},
|
|
1375
|
+
required: ["every"],
|
|
1376
|
+
},
|
|
1377
|
+
},
|
|
1378
|
+
],
|
|
1379
|
+
},
|
|
1380
|
+
// ─── NETWORK ───────────────────────────────────────────────────────
|
|
1381
|
+
{
|
|
1382
|
+
slug: "ip",
|
|
1383
|
+
name: "IP Utilities",
|
|
1384
|
+
description: "Lookup caller IP, parse IP addresses, compute subnet math (CIDR), check range membership, convert formats.",
|
|
1385
|
+
category: "network",
|
|
1386
|
+
scope: "ip:use",
|
|
1387
|
+
endpoints: [
|
|
1388
|
+
{
|
|
1389
|
+
id: "ip.lookup",
|
|
1390
|
+
name: "My IP",
|
|
1391
|
+
description: "Return the caller's IP address.",
|
|
1392
|
+
method: "POST",
|
|
1393
|
+
path: "/v1/ip/lookup",
|
|
1394
|
+
requiresAuth: true,
|
|
1395
|
+
inputSchema: { type: "object", properties: {} },
|
|
1396
|
+
},
|
|
1397
|
+
{
|
|
1398
|
+
id: "ip.parse",
|
|
1399
|
+
name: "Parse IP",
|
|
1400
|
+
description: "Parse an IP address into decimal, binary, hex, and flag details.",
|
|
1401
|
+
method: "POST",
|
|
1402
|
+
path: "/v1/ip/parse",
|
|
1403
|
+
requiresAuth: true,
|
|
1404
|
+
inputSchema: {
|
|
1405
|
+
type: "object",
|
|
1406
|
+
properties: { ip: { type: "string" } },
|
|
1407
|
+
required: ["ip"],
|
|
1408
|
+
},
|
|
1409
|
+
},
|
|
1410
|
+
{
|
|
1411
|
+
id: "ip.subnet",
|
|
1412
|
+
name: "Subnet / CIDR",
|
|
1413
|
+
description: "Compute subnet details from a CIDR notation (e.g. 192.168.1.0/24).",
|
|
1414
|
+
method: "POST",
|
|
1415
|
+
path: "/v1/ip/subnet",
|
|
1416
|
+
requiresAuth: true,
|
|
1417
|
+
inputSchema: {
|
|
1418
|
+
type: "object",
|
|
1419
|
+
properties: {
|
|
1420
|
+
cidr: { type: "string", description: "e.g. '192.168.1.0/24'" },
|
|
1421
|
+
},
|
|
1422
|
+
required: ["cidr"],
|
|
1423
|
+
},
|
|
1424
|
+
},
|
|
1425
|
+
{
|
|
1426
|
+
id: "ip.range",
|
|
1427
|
+
name: "Range Check",
|
|
1428
|
+
description: "Check if an IP address is within a CIDR range.",
|
|
1429
|
+
method: "POST",
|
|
1430
|
+
path: "/v1/ip/range",
|
|
1431
|
+
requiresAuth: true,
|
|
1432
|
+
inputSchema: {
|
|
1433
|
+
type: "object",
|
|
1434
|
+
properties: {
|
|
1435
|
+
ip: { type: "string" },
|
|
1436
|
+
cidr: { type: "string" },
|
|
1437
|
+
},
|
|
1438
|
+
required: ["ip", "cidr"],
|
|
1439
|
+
},
|
|
1440
|
+
},
|
|
1441
|
+
{
|
|
1442
|
+
id: "ip.convert",
|
|
1443
|
+
name: "Convert IP Format",
|
|
1444
|
+
description: "Convert an IPv4 address between dotted-decimal, decimal, binary, and hex.",
|
|
1445
|
+
method: "POST",
|
|
1446
|
+
path: "/v1/ip/convert",
|
|
1447
|
+
requiresAuth: true,
|
|
1448
|
+
inputSchema: {
|
|
1449
|
+
type: "object",
|
|
1450
|
+
properties: {
|
|
1451
|
+
ip: { type: "string", description: "IP in any format (dotted, decimal, binary, hex)" },
|
|
1452
|
+
},
|
|
1453
|
+
required: ["ip"],
|
|
1454
|
+
},
|
|
1455
|
+
},
|
|
1456
|
+
],
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
slug: "shorten",
|
|
1460
|
+
name: "URL Shortener",
|
|
1461
|
+
description: "Shorten URLs and track click statistics.",
|
|
1462
|
+
category: "network",
|
|
1463
|
+
scope: "shorten:write",
|
|
1464
|
+
endpoints: [
|
|
1465
|
+
{
|
|
1466
|
+
id: "shorten.create",
|
|
1467
|
+
name: "Shorten URL",
|
|
1468
|
+
description: "Create a short URL.",
|
|
1469
|
+
method: "POST",
|
|
1470
|
+
path: "/v1/shorten",
|
|
1471
|
+
requiresAuth: true,
|
|
1472
|
+
inputSchema: {
|
|
1473
|
+
type: "object",
|
|
1474
|
+
properties: {
|
|
1475
|
+
url: { type: "string", description: "The URL to shorten" },
|
|
1476
|
+
},
|
|
1477
|
+
required: ["url"],
|
|
1478
|
+
},
|
|
1479
|
+
},
|
|
1480
|
+
{
|
|
1481
|
+
id: "shorten.stats",
|
|
1482
|
+
name: "URL Stats",
|
|
1483
|
+
description: "Get click count and details for a shortened URL.",
|
|
1484
|
+
method: "GET",
|
|
1485
|
+
path: "/v1/shorten/:code/stats",
|
|
1486
|
+
requiresAuth: true,
|
|
1487
|
+
inputSchema: {
|
|
1488
|
+
type: "object",
|
|
1489
|
+
properties: {
|
|
1490
|
+
code: { type: "string", description: "The short URL code" },
|
|
1491
|
+
},
|
|
1492
|
+
required: ["code"],
|
|
1493
|
+
},
|
|
1494
|
+
},
|
|
1495
|
+
],
|
|
1496
|
+
},
|
|
1497
|
+
// ─── GENERATION ────────────────────────────────────────────────────
|
|
1498
|
+
{
|
|
1499
|
+
slug: "uuid",
|
|
1500
|
+
name: "UUID",
|
|
1501
|
+
description: "Generate UUIDv4s, validate UUID strings, and parse UUID components.",
|
|
1502
|
+
category: "generation",
|
|
1503
|
+
scope: "uuid:use",
|
|
1504
|
+
endpoints: [
|
|
1505
|
+
{
|
|
1506
|
+
id: "uuid.v4",
|
|
1507
|
+
name: "Generate UUIDv4",
|
|
1508
|
+
description: "Generate one or more random UUIDs.",
|
|
1509
|
+
method: "POST",
|
|
1510
|
+
path: "/v1/uuid/v4",
|
|
1511
|
+
requiresAuth: true,
|
|
1512
|
+
inputSchema: {
|
|
1513
|
+
type: "object",
|
|
1514
|
+
properties: {
|
|
1515
|
+
count: { type: "number", minimum: 1, maximum: 100, default: 1 },
|
|
1516
|
+
},
|
|
1517
|
+
},
|
|
1518
|
+
},
|
|
1519
|
+
{
|
|
1520
|
+
id: "uuid.validate",
|
|
1521
|
+
name: "Validate UUID",
|
|
1522
|
+
description: "Check if a string is a valid UUID and identify its version.",
|
|
1523
|
+
method: "POST",
|
|
1524
|
+
path: "/v1/uuid/validate",
|
|
1525
|
+
requiresAuth: true,
|
|
1526
|
+
inputSchema: {
|
|
1527
|
+
type: "object",
|
|
1528
|
+
properties: { uuid: { type: "string" } },
|
|
1529
|
+
required: ["uuid"],
|
|
1530
|
+
},
|
|
1531
|
+
},
|
|
1532
|
+
{
|
|
1533
|
+
id: "uuid.parse",
|
|
1534
|
+
name: "Parse UUID",
|
|
1535
|
+
description: "Parse a UUID into its RFC 4122 component fields.",
|
|
1536
|
+
method: "POST",
|
|
1537
|
+
path: "/v1/uuid/parse",
|
|
1538
|
+
requiresAuth: true,
|
|
1539
|
+
inputSchema: {
|
|
1540
|
+
type: "object",
|
|
1541
|
+
properties: { uuid: { type: "string" } },
|
|
1542
|
+
required: ["uuid"],
|
|
1543
|
+
},
|
|
1544
|
+
},
|
|
1545
|
+
],
|
|
1546
|
+
},
|
|
1547
|
+
{
|
|
1548
|
+
slug: "random",
|
|
1549
|
+
name: "Random Generation",
|
|
1550
|
+
description: "Generate random numbers, strings, passwords, pick/shuffle array items, generate random colors.",
|
|
1551
|
+
category: "generation",
|
|
1552
|
+
scope: "random:use",
|
|
1553
|
+
endpoints: [
|
|
1554
|
+
{
|
|
1555
|
+
id: "random.number",
|
|
1556
|
+
name: "Random Number",
|
|
1557
|
+
description: "Generate random number(s) within a range.",
|
|
1558
|
+
method: "POST",
|
|
1559
|
+
path: "/v1/random/number",
|
|
1560
|
+
requiresAuth: true,
|
|
1561
|
+
inputSchema: {
|
|
1562
|
+
type: "object",
|
|
1563
|
+
properties: {
|
|
1564
|
+
min: { type: "number" },
|
|
1565
|
+
max: { type: "number" },
|
|
1566
|
+
count: { type: "number", minimum: 1, maximum: 1000, default: 1 },
|
|
1567
|
+
decimals: { type: "number", minimum: 0, maximum: 10, default: 0 },
|
|
1568
|
+
},
|
|
1569
|
+
required: ["min", "max"],
|
|
1570
|
+
},
|
|
1571
|
+
},
|
|
1572
|
+
{
|
|
1573
|
+
id: "random.string",
|
|
1574
|
+
name: "Random String",
|
|
1575
|
+
description: "Generate random strings from various character sets.",
|
|
1576
|
+
method: "POST",
|
|
1577
|
+
path: "/v1/random/string",
|
|
1578
|
+
requiresAuth: true,
|
|
1579
|
+
inputSchema: {
|
|
1580
|
+
type: "object",
|
|
1581
|
+
properties: {
|
|
1582
|
+
length: { type: "number", minimum: 1, maximum: 4096 },
|
|
1583
|
+
charset: {
|
|
1584
|
+
type: "string",
|
|
1585
|
+
enum: ["alpha", "numeric", "alphanumeric", "hex", "custom"],
|
|
1586
|
+
default: "alphanumeric",
|
|
1587
|
+
},
|
|
1588
|
+
custom_chars: { type: "string" },
|
|
1589
|
+
count: { type: "number", minimum: 1, maximum: 100, default: 1 },
|
|
1590
|
+
},
|
|
1591
|
+
required: ["length"],
|
|
1592
|
+
},
|
|
1593
|
+
},
|
|
1594
|
+
{
|
|
1595
|
+
id: "random.password",
|
|
1596
|
+
name: "Random Password",
|
|
1597
|
+
description: "Generate secure random passwords with configurable complexity.",
|
|
1598
|
+
method: "POST",
|
|
1599
|
+
path: "/v1/random/password",
|
|
1600
|
+
requiresAuth: true,
|
|
1601
|
+
inputSchema: {
|
|
1602
|
+
type: "object",
|
|
1603
|
+
properties: {
|
|
1604
|
+
length: { type: "number", minimum: 4, maximum: 512, default: 16 },
|
|
1605
|
+
uppercase: { type: "boolean", default: true },
|
|
1606
|
+
lowercase: { type: "boolean", default: true },
|
|
1607
|
+
numbers: { type: "boolean", default: true },
|
|
1608
|
+
symbols: { type: "boolean", default: true },
|
|
1609
|
+
count: { type: "number", minimum: 1, maximum: 100, default: 1 },
|
|
1610
|
+
},
|
|
1611
|
+
},
|
|
1612
|
+
},
|
|
1613
|
+
{
|
|
1614
|
+
id: "random.pick",
|
|
1615
|
+
name: "Random Pick",
|
|
1616
|
+
description: "Pick one or more random items from an array.",
|
|
1617
|
+
method: "POST",
|
|
1618
|
+
path: "/v1/random/pick",
|
|
1619
|
+
requiresAuth: true,
|
|
1620
|
+
inputSchema: {
|
|
1621
|
+
type: "object",
|
|
1622
|
+
properties: {
|
|
1623
|
+
items: { type: "array" },
|
|
1624
|
+
count: { type: "number", minimum: 1, default: 1 },
|
|
1625
|
+
unique: { type: "boolean", default: true },
|
|
1626
|
+
},
|
|
1627
|
+
required: ["items"],
|
|
1628
|
+
},
|
|
1629
|
+
},
|
|
1630
|
+
{
|
|
1631
|
+
id: "random.shuffle",
|
|
1632
|
+
name: "Shuffle",
|
|
1633
|
+
description: "Randomly shuffle an array (Fisher-Yates).",
|
|
1634
|
+
method: "POST",
|
|
1635
|
+
path: "/v1/random/shuffle",
|
|
1636
|
+
requiresAuth: true,
|
|
1637
|
+
inputSchema: {
|
|
1638
|
+
type: "object",
|
|
1639
|
+
properties: { items: { type: "array" } },
|
|
1640
|
+
required: ["items"],
|
|
1641
|
+
},
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
id: "random.color",
|
|
1645
|
+
name: "Random Color",
|
|
1646
|
+
description: "Generate random colors in hex, RGB, or HSL format.",
|
|
1647
|
+
method: "POST",
|
|
1648
|
+
path: "/v1/random/color",
|
|
1649
|
+
requiresAuth: true,
|
|
1650
|
+
inputSchema: {
|
|
1651
|
+
type: "object",
|
|
1652
|
+
properties: {
|
|
1653
|
+
format: { type: "string", enum: ["hex", "rgb", "hsl"], default: "hex" },
|
|
1654
|
+
count: { type: "number", minimum: 1, maximum: 100, default: 1 },
|
|
1655
|
+
},
|
|
1656
|
+
},
|
|
1657
|
+
},
|
|
1658
|
+
],
|
|
1659
|
+
},
|
|
1660
|
+
// ─── PLATFORM ──────────────────────────────────────────────────────
|
|
1661
|
+
{
|
|
1662
|
+
slug: "report-bug",
|
|
1663
|
+
name: "Bug Reporter",
|
|
1664
|
+
description: "Report bugs and errors directly from within an agent workflow. When you encounter an error using any UnClick tool, call this endpoint to automatically file a bug report. Severity is auto-detected from the error message (HTTP 500 → critical, timeout/bad response → high, validation errors → medium, other → low) or you can set it manually.",
|
|
1665
|
+
category: "platform",
|
|
1666
|
+
scope: "",
|
|
1667
|
+
endpoints: [
|
|
1668
|
+
{
|
|
1669
|
+
id: "report_bug.create",
|
|
1670
|
+
name: "Report Bug",
|
|
1671
|
+
description: "Submit a bug report when you encounter an error using an UnClick tool. Include the tool name, the error you received, what you sent, and optionally what you expected to happen.",
|
|
1672
|
+
method: "POST",
|
|
1673
|
+
path: "/v1/report-bug",
|
|
1674
|
+
requiresAuth: true,
|
|
1675
|
+
inputSchema: {
|
|
1676
|
+
type: "object",
|
|
1677
|
+
properties: {
|
|
1678
|
+
tool_name: {
|
|
1679
|
+
type: "string",
|
|
1680
|
+
description: "Name of the UnClick tool that produced the error (e.g. 'hash', 'image', 'kv')",
|
|
1681
|
+
},
|
|
1682
|
+
error_message: {
|
|
1683
|
+
type: "string",
|
|
1684
|
+
description: "The full error message or description of what went wrong",
|
|
1685
|
+
},
|
|
1686
|
+
request_payload: {
|
|
1687
|
+
type: "object",
|
|
1688
|
+
description: "The exact request body you sent to the tool when the error occurred",
|
|
1689
|
+
},
|
|
1690
|
+
expected_behavior: {
|
|
1691
|
+
type: "string",
|
|
1692
|
+
description: "What you expected the tool to do (optional but helpful for triage)",
|
|
1693
|
+
},
|
|
1694
|
+
severity: {
|
|
1695
|
+
type: "string",
|
|
1696
|
+
enum: ["critical", "high", "medium", "low"],
|
|
1697
|
+
description: "Override auto-detected severity. Leave blank to let UnClick detect it.",
|
|
1698
|
+
},
|
|
1699
|
+
agent_context: {
|
|
1700
|
+
type: "object",
|
|
1701
|
+
description: "Any additional context about your agent, task, or environment",
|
|
1702
|
+
},
|
|
1703
|
+
},
|
|
1704
|
+
required: ["tool_name", "error_message"],
|
|
1705
|
+
},
|
|
1706
|
+
},
|
|
1707
|
+
],
|
|
1708
|
+
},
|
|
1709
|
+
// ─── STORAGE ───────────────────────────────────────────────────────
|
|
1710
|
+
{
|
|
1711
|
+
slug: "kv",
|
|
1712
|
+
name: "Key-Value Store",
|
|
1713
|
+
description: "Persistent key-value storage with TTL support. Set, get, delete, list, and increment keys.",
|
|
1714
|
+
category: "storage",
|
|
1715
|
+
scope: "kv:write",
|
|
1716
|
+
endpoints: [
|
|
1717
|
+
{
|
|
1718
|
+
id: "kv.set",
|
|
1719
|
+
name: "Set",
|
|
1720
|
+
description: "Store a value at a key with optional TTL.",
|
|
1721
|
+
method: "POST",
|
|
1722
|
+
path: "/v1/kv/set",
|
|
1723
|
+
requiresAuth: true,
|
|
1724
|
+
inputSchema: {
|
|
1725
|
+
type: "object",
|
|
1726
|
+
properties: {
|
|
1727
|
+
key: { type: "string" },
|
|
1728
|
+
value: { description: "Any JSON-serializable value" },
|
|
1729
|
+
ttl: { type: "number", description: "Time-to-live in seconds (max 1 year)" },
|
|
1730
|
+
},
|
|
1731
|
+
required: ["key", "value"],
|
|
1732
|
+
},
|
|
1733
|
+
},
|
|
1734
|
+
{
|
|
1735
|
+
id: "kv.get",
|
|
1736
|
+
name: "Get",
|
|
1737
|
+
description: "Retrieve a value by key.",
|
|
1738
|
+
method: "POST",
|
|
1739
|
+
path: "/v1/kv/get",
|
|
1740
|
+
requiresAuth: true,
|
|
1741
|
+
inputSchema: {
|
|
1742
|
+
type: "object",
|
|
1743
|
+
properties: { key: { type: "string" } },
|
|
1744
|
+
required: ["key"],
|
|
1745
|
+
},
|
|
1746
|
+
},
|
|
1747
|
+
{
|
|
1748
|
+
id: "kv.delete",
|
|
1749
|
+
name: "Delete",
|
|
1750
|
+
description: "Delete a key (idempotent).",
|
|
1751
|
+
method: "POST",
|
|
1752
|
+
path: "/v1/kv/delete",
|
|
1753
|
+
requiresAuth: true,
|
|
1754
|
+
inputSchema: {
|
|
1755
|
+
type: "object",
|
|
1756
|
+
properties: { key: { type: "string" } },
|
|
1757
|
+
required: ["key"],
|
|
1758
|
+
},
|
|
1759
|
+
},
|
|
1760
|
+
{
|
|
1761
|
+
id: "kv.list",
|
|
1762
|
+
name: "List Keys",
|
|
1763
|
+
description: "List all live keys, optionally filtered by prefix.",
|
|
1764
|
+
method: "POST",
|
|
1765
|
+
path: "/v1/kv/list",
|
|
1766
|
+
requiresAuth: true,
|
|
1767
|
+
inputSchema: {
|
|
1768
|
+
type: "object",
|
|
1769
|
+
properties: {
|
|
1770
|
+
prefix: { type: "string" },
|
|
1771
|
+
page: { type: "number", default: 1 },
|
|
1772
|
+
limit: { type: "number", minimum: 1, maximum: 500, default: 50 },
|
|
1773
|
+
},
|
|
1774
|
+
},
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
id: "kv.exists",
|
|
1778
|
+
name: "Exists",
|
|
1779
|
+
description: "Check if a key exists and has not expired.",
|
|
1780
|
+
method: "POST",
|
|
1781
|
+
path: "/v1/kv/exists",
|
|
1782
|
+
requiresAuth: true,
|
|
1783
|
+
inputSchema: {
|
|
1784
|
+
type: "object",
|
|
1785
|
+
properties: { key: { type: "string" } },
|
|
1786
|
+
required: ["key"],
|
|
1787
|
+
},
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
id: "kv.increment",
|
|
1791
|
+
name: "Increment",
|
|
1792
|
+
description: "Atomically increment a numeric key's value.",
|
|
1793
|
+
method: "POST",
|
|
1794
|
+
path: "/v1/kv/increment",
|
|
1795
|
+
requiresAuth: true,
|
|
1796
|
+
inputSchema: {
|
|
1797
|
+
type: "object",
|
|
1798
|
+
properties: {
|
|
1799
|
+
key: { type: "string" },
|
|
1800
|
+
amount: { type: "number", default: 1 },
|
|
1801
|
+
},
|
|
1802
|
+
required: ["key"],
|
|
1803
|
+
},
|
|
1804
|
+
},
|
|
1805
|
+
],
|
|
1806
|
+
},
|
|
1807
|
+
{
|
|
1808
|
+
slug: "webhook",
|
|
1809
|
+
name: "Webhook Bin",
|
|
1810
|
+
description: "Create temporary webhook URLs to capture and inspect HTTP requests (great for testing webhooks).",
|
|
1811
|
+
category: "storage",
|
|
1812
|
+
scope: "webhook:write",
|
|
1813
|
+
endpoints: [
|
|
1814
|
+
{
|
|
1815
|
+
id: "webhook.create",
|
|
1816
|
+
name: "Create Bin",
|
|
1817
|
+
description: "Create a temporary webhook bin URL that captures incoming requests for 24 hours.",
|
|
1818
|
+
method: "POST",
|
|
1819
|
+
path: "/v1/webhook/create",
|
|
1820
|
+
requiresAuth: true,
|
|
1821
|
+
inputSchema: { type: "object", properties: {} },
|
|
1822
|
+
},
|
|
1823
|
+
{
|
|
1824
|
+
id: "webhook.requests",
|
|
1825
|
+
name: "List Requests",
|
|
1826
|
+
description: "List all captured requests for a webhook bin.",
|
|
1827
|
+
method: "POST",
|
|
1828
|
+
path: "/v1/webhook/:id/requests",
|
|
1829
|
+
requiresAuth: true,
|
|
1830
|
+
inputSchema: {
|
|
1831
|
+
type: "object",
|
|
1832
|
+
properties: {
|
|
1833
|
+
id: { type: "string", description: "Webhook bin ID" },
|
|
1834
|
+
limit: { type: "number", minimum: 1, maximum: 100, default: 20 },
|
|
1835
|
+
page: { type: "number", default: 1 },
|
|
1836
|
+
},
|
|
1837
|
+
required: ["id"],
|
|
1838
|
+
},
|
|
1839
|
+
},
|
|
1840
|
+
{
|
|
1841
|
+
id: "webhook.delete",
|
|
1842
|
+
name: "Delete Bin",
|
|
1843
|
+
description: "Delete a webhook bin.",
|
|
1844
|
+
method: "DELETE",
|
|
1845
|
+
path: "/v1/webhook/:id",
|
|
1846
|
+
requiresAuth: true,
|
|
1847
|
+
inputSchema: {
|
|
1848
|
+
type: "object",
|
|
1849
|
+
properties: { id: { type: "string" } },
|
|
1850
|
+
required: ["id"],
|
|
1851
|
+
},
|
|
1852
|
+
},
|
|
1853
|
+
],
|
|
1854
|
+
},
|
|
1855
|
+
];
|
|
1856
|
+
/** Flat map of all endpoints keyed by endpoint id */
|
|
1857
|
+
export const ENDPOINT_MAP = new Map();
|
|
1858
|
+
for (const tool of CATALOG) {
|
|
1859
|
+
for (const endpoint of tool.endpoints) {
|
|
1860
|
+
ENDPOINT_MAP.set(endpoint.id, { tool, endpoint });
|
|
1861
|
+
}
|
|
1862
|
+
}
|
|
1863
|
+
/** Map of tool slug → ToolDef */
|
|
1864
|
+
export const TOOL_MAP = new Map(CATALOG.map((t) => [t.slug, t]));
|
|
1865
|
+
//# sourceMappingURL=catalog.js.map
|