@xano/developer-mcp 1.0.21 → 1.0.22

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 (48) hide show
  1. package/README.md +100 -19
  2. package/dist/index.js +4 -242
  3. package/dist/meta_api_docs/format.d.ts +16 -1
  4. package/dist/meta_api_docs/format.js +24 -6
  5. package/dist/meta_api_docs/format.test.d.ts +1 -0
  6. package/dist/meta_api_docs/format.test.js +274 -0
  7. package/dist/meta_api_docs/index.test.d.ts +1 -0
  8. package/dist/meta_api_docs/index.test.js +128 -0
  9. package/dist/meta_api_docs/types.test.d.ts +1 -0
  10. package/dist/meta_api_docs/types.test.js +132 -0
  11. package/dist/run_api_docs/format.d.ts +1 -0
  12. package/dist/run_api_docs/format.js +3 -170
  13. package/dist/run_api_docs/format.test.d.ts +1 -0
  14. package/dist/run_api_docs/format.test.js +86 -0
  15. package/dist/run_api_docs/index.test.d.ts +1 -0
  16. package/dist/run_api_docs/index.test.js +127 -0
  17. package/dist/xanoscript.d.ts +41 -0
  18. package/dist/xanoscript.js +261 -0
  19. package/dist/xanoscript.test.d.ts +1 -0
  20. package/dist/xanoscript.test.js +303 -0
  21. package/dist/xanoscript_docs/README.md +2 -0
  22. package/dist/xanoscript_docs/agents.md +1 -1
  23. package/dist/xanoscript_docs/functions.md +4 -4
  24. package/dist/xanoscript_docs/integrations.md +43 -1
  25. package/dist/xanoscript_docs/performance.md +1 -1
  26. package/dist/xanoscript_docs/tasks.md +2 -2
  27. package/dist/xanoscript_docs/tools.md +2 -2
  28. package/dist/xanoscript_docs_auto/README.md +119 -0
  29. package/dist/xanoscript_docs_auto/agents.md +446 -0
  30. package/dist/xanoscript_docs_auto/apis.md +517 -0
  31. package/dist/xanoscript_docs_auto/control-flow.md +543 -0
  32. package/dist/xanoscript_docs_auto/database.md +551 -0
  33. package/dist/xanoscript_docs_auto/debugging.md +527 -0
  34. package/dist/xanoscript_docs_auto/filters.md +464 -0
  35. package/dist/xanoscript_docs_auto/functions.md +431 -0
  36. package/dist/xanoscript_docs_auto/integrations.md +657 -0
  37. package/dist/xanoscript_docs_auto/mcp-servers.md +408 -0
  38. package/dist/xanoscript_docs_auto/operators.md +368 -0
  39. package/dist/xanoscript_docs_auto/syntax.md +287 -0
  40. package/dist/xanoscript_docs_auto/tables.md +447 -0
  41. package/dist/xanoscript_docs_auto/tasks.md +479 -0
  42. package/dist/xanoscript_docs_auto/testing.md +574 -0
  43. package/dist/xanoscript_docs_auto/tools.md +485 -0
  44. package/dist/xanoscript_docs_auto/triggers.md +595 -0
  45. package/dist/xanoscript_docs_auto/types.md +323 -0
  46. package/dist/xanoscript_docs_auto/variables.md +462 -0
  47. package/dist/xanoscript_docs_auto/version.json +5 -0
  48. package/package.json +6 -2
@@ -0,0 +1,462 @@
1
+ ---
2
+ applyTo: "**/*.xs"
3
+ ---
4
+
5
+ # Variables
6
+
7
+ System variables, built-in variables, and variable operations in XanoScript.
8
+
9
+ ## Quick Reference
10
+
11
+ | Variable | Description |
12
+ |----------|-------------|
13
+ | `$input.*` | Input parameters |
14
+ | `$auth.*` | Authenticated user data |
15
+ | `$env.*` | Environment variables |
16
+ | `$db.*` | Database field references |
17
+ | `$this` | Current item in loops |
18
+ | `$error` | Error info in catch blocks |
19
+ | `now` | Current timestamp |
20
+
21
+ ---
22
+
23
+ ## Variable Definition
24
+
25
+ ### Create Variable
26
+
27
+ ```xs
28
+ var $name {
29
+ value = "initial value"
30
+ }
31
+
32
+ var $count {
33
+ value = 0
34
+ }
35
+
36
+ var $items {
37
+ value = []
38
+ }
39
+
40
+ var $config {
41
+ value = {
42
+ enabled: true,
43
+ limit: 100
44
+ }
45
+ }
46
+ ```
47
+
48
+ ### Update Variable
49
+
50
+ ```xs
51
+ var.update $count {
52
+ value = $count + 1
53
+ }
54
+
55
+ var.update $items {
56
+ value = $items|push:$new_item
57
+ }
58
+
59
+ var.update $config {
60
+ value = $config|set:"limit":200
61
+ }
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Input Variables
67
+
68
+ Access parameters passed to functions, queries, and tasks:
69
+
70
+ ```xs
71
+ // In function definition
72
+ function "example" {
73
+ input {
74
+ text name
75
+ int age
76
+ json options
77
+ }
78
+ stack {
79
+ var $greeting {
80
+ value = "Hello, " ~ $input.name
81
+ }
82
+
83
+ var $birth_year {
84
+ value = now|timestamp_year - $input.age
85
+ }
86
+
87
+ var $limit {
88
+ value = $input.options.limit ?? 10
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ ### Accessing Nested Input
95
+
96
+ ```xs
97
+ $input.user.name
98
+ $input.settings.theme
99
+ $input.items|first
100
+ $input.data|get:"key"
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Auth Variables
106
+
107
+ Access authenticated user data:
108
+
109
+ ```xs
110
+ $auth.id // User ID
111
+ $auth.role // User role
112
+ $auth.email // User email
113
+ $auth.name // User name
114
+ ```
115
+
116
+ ### Check Authentication
117
+
118
+ ```xs
119
+ conditional {
120
+ if ($auth != null) {
121
+ // User is authenticated
122
+ var $user_id { value = $auth.id }
123
+ }
124
+ else {
125
+ // Not authenticated
126
+ throw {
127
+ name = "Unauthorized"
128
+ value = "Please log in"
129
+ code = 401
130
+ }
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### Role-Based Access
136
+
137
+ ```xs
138
+ precondition ($auth.role == "admin") {
139
+ error_type = "accessdenied"
140
+ error = "Admin access required"
141
+ }
142
+ ```
143
+
144
+ ---
145
+
146
+ ## Environment Variables
147
+
148
+ Access environment configuration:
149
+
150
+ ```xs
151
+ $env.DATABASE_URL
152
+ $env.API_KEY
153
+ $env.MY_CUSTOM_VAR
154
+ ```
155
+
156
+ ### System Environment Variables
157
+
158
+ | Variable | Description |
159
+ |----------|-------------|
160
+ | `$env.$remote_ip` | Client IP address |
161
+ | `$env.$remote_port` | Client port |
162
+ | `$env.$remote_host` | Remote hostname |
163
+ | `$env.$request_method` | HTTP method |
164
+ | `$env.$request_uri` | Request URI |
165
+ | `$env.$request_querystring` | Query string |
166
+ | `$env.$http_headers` | Request headers |
167
+ | `$env.$request_auth_token` | Auth token |
168
+ | `$env.$datasource` | Current datasource |
169
+ | `$env.$branch` | Current branch |
170
+
171
+ ### Using Environment Variables
172
+
173
+ ```xs
174
+ // API configuration
175
+ api.request {
176
+ url = $env.EXTERNAL_API_URL
177
+ headers = {
178
+ "Authorization": "Bearer " ~ $env.EXTERNAL_API_KEY
179
+ }
180
+ }
181
+
182
+ // Feature flags
183
+ conditional {
184
+ if ($env.FEATURE_NEW_UI == "true") {
185
+ // New UI logic
186
+ }
187
+ }
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Database Variables
193
+
194
+ Reference database fields in queries:
195
+
196
+ ```xs
197
+ db.query user {
198
+ where = $db.user.active == true
199
+ && $db.user.email == $input.email
200
+ } as $users
201
+ ```
202
+
203
+ ### Table References
204
+
205
+ ```xs
206
+ $db.user.id
207
+ $db.user.name
208
+ $db.product.price
209
+ $db.order.created_at
210
+ ```
211
+
212
+ ### With Filters
213
+
214
+ ```xs
215
+ $db.user.name|to_lower
216
+ $db.product.price|round:2
217
+ $db.order.created_at|timestamp_year
218
+ ```
219
+
220
+ ---
221
+
222
+ ## Loop Variables
223
+
224
+ ### $this
225
+
226
+ Current item in loops:
227
+
228
+ ```xs
229
+ foreach ($items) {
230
+ each as $item {
231
+ debug.log { value = $item }
232
+ // Also accessible as $this
233
+ debug.log { value = $this }
234
+ }
235
+ }
236
+ ```
237
+
238
+ ### With Index
239
+
240
+ ```xs
241
+ foreach ($items) {
242
+ each as $item {
243
+ var $position { value = $this.index }
244
+ debug.log {
245
+ value = "Item " ~ $position ~ ": " ~ $item.name
246
+ }
247
+ }
248
+ }
249
+ ```
250
+
251
+ ### In Map/Filter
252
+
253
+ ```xs
254
+ // $$ represents current item in map/filter
255
+ $items|map:$$.name
256
+ $items|filter:$$.active == true
257
+ $items|find:$$.id == $target_id
258
+ ```
259
+
260
+ ---
261
+
262
+ ## Error Variables
263
+
264
+ In catch blocks:
265
+
266
+ ```xs
267
+ try_catch {
268
+ try {
269
+ // Risky operation
270
+ }
271
+ catch {
272
+ var $error_name { value = $error.name }
273
+ var $error_message { value = $error.message }
274
+ var $error_code { value = $error.code }
275
+
276
+ debug.log {
277
+ value = "Error: " ~ $error.message
278
+ }
279
+ }
280
+ }
281
+ ```
282
+
283
+ ---
284
+
285
+ ## Trigger Variables
286
+
287
+ In trigger handlers:
288
+
289
+ ```xs
290
+ table_trigger "example" {
291
+ table = user
292
+ event = update
293
+
294
+ stack {
295
+ // Old record data
296
+ var $old_email { value = $trigger.old.email }
297
+
298
+ // New record data
299
+ var $new_email { value = $trigger.new.email }
300
+
301
+ // Trigger metadata
302
+ var $event_type { value = $trigger.event }
303
+ var $table_name { value = $trigger.table }
304
+ }
305
+ }
306
+ ```
307
+
308
+ ---
309
+
310
+ ## Special Values
311
+
312
+ ### now
313
+
314
+ Current timestamp:
315
+
316
+ ```xs
317
+ var $current_time { value = now }
318
+ var $today { value = now|format_timestamp:"Y-m-d":"UTC" }
319
+ var $yesterday { value = now|transform_timestamp:"-1 day" }
320
+ ```
321
+
322
+ ### null
323
+
324
+ Null value:
325
+
326
+ ```xs
327
+ var $empty { value = null }
328
+
329
+ conditional {
330
+ if ($value == null) {
331
+ // Handle null
332
+ }
333
+ }
334
+ ```
335
+
336
+ ### true/false
337
+
338
+ Boolean values:
339
+
340
+ ```xs
341
+ var $enabled { value = true }
342
+ var $disabled { value = false }
343
+ ```
344
+
345
+ ---
346
+
347
+ ## Variable Scope
348
+
349
+ ### Stack Scope
350
+
351
+ Variables defined in stack are available within that stack:
352
+
353
+ ```xs
354
+ stack {
355
+ var $local { value = "visible here" }
356
+
357
+ conditional {
358
+ if (true) {
359
+ // $local is accessible here
360
+ debug.log { value = $local }
361
+ }
362
+ }
363
+ }
364
+ // $local not accessible outside stack
365
+ ```
366
+
367
+ ### Response Scope
368
+
369
+ Variables can be returned via response:
370
+
371
+ ```xs
372
+ function "example" {
373
+ stack {
374
+ var $result { value = "computed value" }
375
+ }
376
+ response = $result
377
+ }
378
+ ```
379
+
380
+ ---
381
+
382
+ ## Common Patterns
383
+
384
+ ### Default Values
385
+
386
+ ```xs
387
+ var $limit {
388
+ value = $input.limit ?? 10
389
+ }
390
+
391
+ var $name {
392
+ value = $input.name|first_notempty:"Anonymous"
393
+ }
394
+ ```
395
+
396
+ ### Accumulating Values
397
+
398
+ ```xs
399
+ var $total { value = 0 }
400
+
401
+ foreach ($items) {
402
+ each as $item {
403
+ var.update $total {
404
+ value = $total + $item.price
405
+ }
406
+ }
407
+ }
408
+ ```
409
+
410
+ ### Building Objects
411
+
412
+ ```xs
413
+ var $result { value = {} }
414
+
415
+ var.update $result {
416
+ value = $result|set:"name":$input.name
417
+ }
418
+
419
+ var.update $result {
420
+ value = $result|set:"timestamp":now
421
+ }
422
+ ```
423
+
424
+ ### Building Arrays
425
+
426
+ ```xs
427
+ var $processed { value = [] }
428
+
429
+ foreach ($items) {
430
+ each as $item {
431
+ function.run "process" {
432
+ input = {item: $item}
433
+ } as $processed_item
434
+
435
+ var.update $processed {
436
+ value = $processed|push:$processed_item
437
+ }
438
+ }
439
+ }
440
+ ```
441
+
442
+ ---
443
+
444
+ ## Environment Variable Access
445
+
446
+ ### Get All Environment Variables
447
+
448
+ ```xs
449
+ util.get_env {} as $all_env
450
+ ```
451
+
452
+ ### Get All Input Data
453
+
454
+ ```xs
455
+ util.get_all_input {} as $all_input
456
+ ```
457
+
458
+ ### Get All Variables
459
+
460
+ ```xs
461
+ util.get_vars {} as $all_vars
462
+ ```
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "updated": "2026-02-07",
4
+ "generated_from": "xs-language-server"
5
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xano/developer-mcp",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "description": "MCP server for Xano Headless API documentation and XanoScript code validation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,6 +14,9 @@
14
14
  "build": "tsc && cp -r src/xanoscript_docs dist/",
15
15
  "start": "node dist/index.js",
16
16
  "dev": "tsc && node dist/index.js",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest",
19
+ "test:coverage": "vitest run --coverage",
17
20
  "prepublishOnly": "npm run build"
18
21
  },
19
22
  "keywords": [
@@ -43,6 +46,7 @@
43
46
  "devDependencies": {
44
47
  "@types/minimatch": "^5.1.2",
45
48
  "@types/node": "^22.0.0",
46
- "typescript": "^5.9.0"
49
+ "typescript": "^5.9.0",
50
+ "vitest": "^3.0.0"
47
51
  }
48
52
  }