@oriro/orirocli 0.1.11 → 0.1.12

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 (1263) hide show
  1. package/ATTRIBUTION.md +53 -53
  2. package/LICENSE +21 -21
  3. package/README.md +2 -7
  4. package/dist/cli.js +402 -40
  5. package/package.json +64 -64
  6. package/skills/1password/SKILL.md +118 -118
  7. package/skills/1password/references/cli-examples.md +29 -29
  8. package/skills/1password/references/get-started.md +21 -21
  9. package/skills/21stdev/SKILL.md +64 -64
  10. package/skills/algorithmic-art/LICENSE +21 -21
  11. package/skills/algorithmic-art/SKILL.md +446 -446
  12. package/skills/algorithmic-art/templates/generator_template.js +223 -223
  13. package/skills/algorithmic-art/templates/viewer.html +598 -598
  14. package/skills/apple-notes/SKILL.md +81 -81
  15. package/skills/apple-reminders/SKILL.md +122 -122
  16. package/skills/bear-notes/SKILL.md +111 -111
  17. package/skills/blogwatcher/SKILL.md +73 -73
  18. package/skills/blucli/SKILL.md +51 -51
  19. package/skills/brand-guidelines/LICENSE +21 -21
  20. package/skills/brand-guidelines/SKILL.md +76 -76
  21. package/skills/business/biz-analysis/LICENSE +21 -21
  22. package/skills/business/biz-analysis/SKILL.md +103 -103
  23. package/skills/business/biz-corporate-strategy/LICENSE +21 -21
  24. package/skills/business/biz-corporate-strategy/SKILL.md +76 -76
  25. package/skills/business/biz-customer-success/LICENSE +21 -21
  26. package/skills/business/biz-customer-success/SKILL.md +55 -55
  27. package/skills/business/biz-entrepreneurship/LICENSE +21 -21
  28. package/skills/business/biz-entrepreneurship/SKILL.md +72 -72
  29. package/skills/business/biz-hr/LICENSE +21 -21
  30. package/skills/business/biz-hr/SKILL.md +67 -67
  31. package/skills/business/biz-international/LICENSE +21 -21
  32. package/skills/business/biz-international/SKILL.md +51 -51
  33. package/skills/business/biz-leadership/LICENSE +21 -21
  34. package/skills/business/biz-leadership/SKILL.md +106 -106
  35. package/skills/business/biz-marketing-strategy/LICENSE +21 -21
  36. package/skills/business/biz-marketing-strategy/SKILL.md +119 -119
  37. package/skills/business/biz-negotiation/LICENSE +21 -21
  38. package/skills/business/biz-negotiation/SKILL.md +152 -152
  39. package/skills/business/biz-operations/LICENSE +21 -21
  40. package/skills/business/biz-operations/SKILL.md +74 -74
  41. package/skills/business/biz-project/LICENSE +21 -21
  42. package/skills/business/biz-project/SKILL.md +203 -203
  43. package/skills/business/biz-risk/LICENSE +21 -21
  44. package/skills/business/biz-risk/SKILL.md +85 -85
  45. package/skills/business/biz-sales/LICENSE +21 -21
  46. package/skills/business/biz-sales/SKILL.md +92 -92
  47. package/skills/business/biz-startup-ops/LICENSE +21 -21
  48. package/skills/business/biz-startup-ops/SKILL.md +70 -70
  49. package/skills/business/biz-strategy/LICENSE +21 -21
  50. package/skills/business/biz-strategy/SKILL.md +233 -233
  51. package/skills/business/biz-supply-chain-advanced/LICENSE +21 -21
  52. package/skills/business/biz-supply-chain-advanced/SKILL.md +68 -68
  53. package/skills/business/fin-chartered-exams/LICENSE +21 -21
  54. package/skills/business/fin-chartered-exams/SKILL.md +69 -69
  55. package/skills/camsnap/SKILL.md +49 -49
  56. package/skills/canvas/SKILL.md +82 -82
  57. package/skills/canvas-design/LICENSE +21 -21
  58. package/skills/canvas-design/SKILL.md +140 -140
  59. package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -93
  60. package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -93
  61. package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -93
  62. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
  63. package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -93
  64. package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -93
  65. package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -94
  66. package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -93
  67. package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -93
  68. package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
  69. package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -93
  70. package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
  71. package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -93
  72. package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
  73. package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -93
  74. package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -93
  75. package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -93
  76. package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -93
  77. package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -93
  78. package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -93
  79. package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -93
  80. package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -93
  81. package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -93
  82. package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -93
  83. package/skills/coding-agent/SKILL.md +146 -146
  84. package/skills/communication/comm-business-writing/LICENSE +21 -21
  85. package/skills/communication/comm-business-writing/SKILL.md +67 -67
  86. package/skills/communication/comm-cross-cultural/LICENSE +21 -21
  87. package/skills/communication/comm-cross-cultural/SKILL.md +88 -88
  88. package/skills/communication/comm-journalism/LICENSE +21 -21
  89. package/skills/communication/comm-journalism/SKILL.md +81 -81
  90. package/skills/communication/comm-linguistics/LICENSE +21 -21
  91. package/skills/communication/comm-linguistics/SKILL.md +82 -82
  92. package/skills/communication/comm-negotiation/LICENSE +21 -21
  93. package/skills/communication/comm-negotiation/SKILL.md +120 -120
  94. package/skills/communication/comm-presentations/LICENSE +21 -21
  95. package/skills/communication/comm-presentations/SKILL.md +93 -93
  96. package/skills/communication/comm-public-speaking/LICENSE +21 -21
  97. package/skills/communication/comm-public-speaking/SKILL.md +68 -68
  98. package/skills/communication/comm-writing/LICENSE +21 -21
  99. package/skills/communication/comm-writing/SKILL.md +69 -69
  100. package/skills/craft/ai-engineering/LICENSE +21 -21
  101. package/skills/craft/ai-engineering/SKILL.md +828 -828
  102. package/skills/craft/app-builder-guide/LICENSE +21 -21
  103. package/skills/craft/app-builder-guide/SKILL.md +332 -332
  104. package/skills/craft/become-an-ai-engineer-26/CONTRIBUTING.md +46 -46
  105. package/skills/craft/become-an-ai-engineer-26/LICENSE +21 -21
  106. package/skills/craft/become-an-ai-engineer-26/README.md +270 -270
  107. package/skills/craft/become-an-ai-engineer-26/SKILL.md +667 -667
  108. package/skills/craft/become-an-ai-engineer-26/community/BUILDS.md +13 -13
  109. package/skills/craft/become-an-ai-engineer-26/community/DISCUSSIONS.md +8 -8
  110. package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/README.md +14 -14
  111. package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/project/TEMPLATE.md +33 -33
  112. package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/README.md +25 -25
  113. package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/code/raw_loop.py +126 -126
  114. package/skills/craft/become-an-ai-engineer-26/phases/phase-2-architecture/README.md +17 -17
  115. package/skills/craft/become-an-ai-engineer-26/phases/phase-3-harness/README.md +17 -17
  116. package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/README.md +21 -21
  117. package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/code/.github/workflows/eval.yml +40 -40
  118. package/skills/craft/become-an-ai-engineer-26/phases/phase-5-production/README.md +16 -16
  119. package/skills/craft/become-an-ai-engineer-26/projects/1-mobile-app-slm/README.md +11 -11
  120. package/skills/craft/become-an-ai-engineer-26/projects/2-self-improving-coder/README.md +11 -11
  121. package/skills/craft/become-an-ai-engineer-26/projects/3-video-editor-agent/README.md +11 -11
  122. package/skills/craft/become-an-ai-engineer-26/projects/4-personal-life-os/README.md +12 -12
  123. package/skills/craft/become-an-ai-engineer-26/projects/5-enterprise-workflow/README.md +12 -12
  124. package/skills/craft/become-an-ai-engineer-26/references/benchmark-numbers.md +41 -41
  125. package/skills/craft/become-an-ai-engineer-26/references/mhc-stable-training.md +73 -73
  126. package/skills/craft/become-an-ai-engineer-26/references/stack-decisions.md +37 -37
  127. package/skills/craft/become-an-ai-engineer-26/references/yarn-context-extension.md +123 -123
  128. package/skills/craft/codex-result-handling/LICENSE +21 -21
  129. package/skills/craft/codex-result-handling/SKILL.md +26 -26
  130. package/skills/craft/debug-and-build-methodology/LICENSE +21 -21
  131. package/skills/craft/debug-and-build-methodology/SKILL.md +432 -432
  132. package/skills/craft/design/LICENSE +21 -21
  133. package/skills/craft/design/SKILL.md +274 -274
  134. package/skills/craft/dev/LICENSE +21 -21
  135. package/skills/craft/dev/SKILL.md +12 -12
  136. package/skills/craft/dev/release.md +85 -85
  137. package/skills/craft/dev/roll.md +50 -50
  138. package/skills/craft/doc-coauthoring/LICENSE +21 -21
  139. package/skills/craft/doc-coauthoring/SKILL.md +397 -397
  140. package/skills/craft/focus/LICENSE +21 -21
  141. package/skills/craft/focus/SKILL.md +432 -432
  142. package/skills/craft/focus/UPSTREAM_README.md +233 -233
  143. package/skills/craft/gh/LICENSE +21 -21
  144. package/skills/craft/gh/SKILL.md +84 -84
  145. package/skills/craft/gh-skill/LICENSE +21 -21
  146. package/skills/craft/gh-skill/SKILL.md +121 -121
  147. package/skills/craft/godmode/LICENSE +21 -21
  148. package/skills/craft/godmode/SKILL.md +87 -87
  149. package/skills/craft/godmode/references/android-launch.md +680 -680
  150. package/skills/craft/godmode/references/data-gcp.md +1038 -1038
  151. package/skills/craft/godmode/references/expo-eas.md +816 -816
  152. package/skills/craft/godmode/references/ios-launch.md +734 -734
  153. package/skills/craft/google-ai-latest/LICENSE +21 -21
  154. package/skills/craft/google-ai-latest/SKILL.md +682 -682
  155. package/skills/craft/gpt-5-4-prompting/LICENSE +21 -21
  156. package/skills/craft/gpt-5-4-prompting/SKILL.md +63 -63
  157. package/skills/craft/gpt-5-4-prompting/references/codex-prompt-antipatterns.md +101 -101
  158. package/skills/craft/gpt-5-4-prompting/references/codex-prompt-recipes.md +150 -150
  159. package/skills/craft/gpt-5-4-prompting/references/prompt-blocks.md +172 -172
  160. package/skills/craft/grill-me/LICENSE +21 -21
  161. package/skills/craft/grill-me/SKILL.md +13 -13
  162. package/skills/craft/idea-to-deploy/LICENSE +21 -21
  163. package/skills/craft/idea-to-deploy/SKILL.md +292 -292
  164. package/skills/craft/idea-to-deploy/references/auth-playbook.md +195 -195
  165. package/skills/craft/idea-to-deploy/references/gcp-deployment.md +268 -268
  166. package/skills/craft/idea-to-deploy/references/stack-selection.md +117 -117
  167. package/skills/craft/image-generation-engineer/LICENSE +21 -21
  168. package/skills/craft/image-generation-engineer/SKILL.md +183 -183
  169. package/skills/craft/image-generation-engineer/references/architectures.md +260 -260
  170. package/skills/craft/image-generation-engineer/references/foundations.md +107 -107
  171. package/skills/craft/image-generation-engineer/references/inference-and-serving.md +253 -253
  172. package/skills/craft/image-generation-engineer/references/training.md +149 -149
  173. package/skills/craft/marketing/LICENSE +21 -21
  174. package/skills/craft/marketing/SKILL.md +1954 -1954
  175. package/skills/craft/master-architect/LICENSE +21 -21
  176. package/skills/craft/master-architect/SKILL.md +361 -361
  177. package/skills/craft/master-architect/references/ai-ml.md +317 -317
  178. package/skills/craft/master-architect/references/architecture.md +268 -268
  179. package/skills/craft/master-architect/references/auth-playbook.md +195 -195
  180. package/skills/craft/master-architect/references/cloud.md +323 -323
  181. package/skills/craft/master-architect/references/cyber.md +839 -839
  182. package/skills/craft/master-architect/references/data-eng.md +366 -366
  183. package/skills/craft/master-architect/references/devops.md +550 -550
  184. package/skills/craft/master-architect/references/gcp-deployment.md +268 -268
  185. package/skills/craft/master-architect/references/languages.md +748 -748
  186. package/skills/craft/master-architect/references/legacy.md +240 -240
  187. package/skills/craft/master-architect/references/mobile.md +447 -447
  188. package/skills/craft/master-architect/references/patterns.md +451 -451
  189. package/skills/craft/master-architect/references/saas-patterns.md +379 -379
  190. package/skills/craft/master-architect/references/sdlc.md +349 -349
  191. package/skills/craft/master-architect/references/stack-selection.md +117 -117
  192. package/skills/craft/oriro-ui-2026/LICENSE +21 -21
  193. package/skills/craft/oriro-ui-2026/SKILL.md +329 -329
  194. package/skills/craft/playwright-cli/LICENSE +21 -21
  195. package/skills/craft/playwright-cli/SKILL.md +393 -393
  196. package/skills/craft/playwright-cli/references/element-attributes.md +23 -23
  197. package/skills/craft/playwright-cli/references/playwright-tests.md +39 -39
  198. package/skills/craft/playwright-cli/references/request-mocking.md +87 -87
  199. package/skills/craft/playwright-cli/references/running-code.md +240 -240
  200. package/skills/craft/playwright-cli/references/session-management.md +226 -226
  201. package/skills/craft/playwright-cli/references/spec-driven-testing.md +312 -312
  202. package/skills/craft/playwright-cli/references/storage-state.md +275 -275
  203. package/skills/craft/playwright-cli/references/test-generation.md +134 -134
  204. package/skills/craft/playwright-cli/references/tracing.md +142 -142
  205. package/skills/craft/playwright-cli/references/video-recording.md +150 -150
  206. package/skills/craft/remotion-best-practices/LICENSE +21 -21
  207. package/skills/craft/remotion-best-practices/SKILL.md +345 -345
  208. package/skills/craft/remotion-best-practices/rules/3d.md +86 -86
  209. package/skills/craft/remotion-best-practices/rules/assets/charts-bar-chart.tsx +165 -165
  210. package/skills/craft/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +89 -89
  211. package/skills/craft/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +101 -101
  212. package/skills/craft/remotion-best-practices/rules/audio-visualization.md +195 -195
  213. package/skills/craft/remotion-best-practices/rules/audio.md +167 -167
  214. package/skills/craft/remotion-best-practices/rules/calculate-metadata.md +118 -118
  215. package/skills/craft/remotion-best-practices/rules/compositions.md +132 -132
  216. package/skills/craft/remotion-best-practices/rules/display-captions.md +176 -176
  217. package/skills/craft/remotion-best-practices/rules/ffmpeg.md +34 -34
  218. package/skills/craft/remotion-best-practices/rules/get-audio-duration.md +58 -58
  219. package/skills/craft/remotion-best-practices/rules/get-video-dimensions.md +68 -68
  220. package/skills/craft/remotion-best-practices/rules/get-video-duration.md +60 -60
  221. package/skills/craft/remotion-best-practices/rules/gifs.md +135 -135
  222. package/skills/craft/remotion-best-practices/rules/google-fonts.md +72 -72
  223. package/skills/craft/remotion-best-practices/rules/html-in-canvas.md +122 -122
  224. package/skills/craft/remotion-best-practices/rules/images.md +67 -67
  225. package/skills/craft/remotion-best-practices/rules/import-srt-captions.md +69 -69
  226. package/skills/craft/remotion-best-practices/rules/light-leaks.md +73 -73
  227. package/skills/craft/remotion-best-practices/rules/local-fonts.md +65 -65
  228. package/skills/craft/remotion-best-practices/rules/lottie.md +67 -67
  229. package/skills/craft/remotion-best-practices/rules/maplibre.md +441 -441
  230. package/skills/craft/remotion-best-practices/rules/measuring-dom-nodes.md +34 -34
  231. package/skills/craft/remotion-best-practices/rules/measuring-text.md +140 -140
  232. package/skills/craft/remotion-best-practices/rules/parameters.md +109 -109
  233. package/skills/craft/remotion-best-practices/rules/sequencing.md +144 -144
  234. package/skills/craft/remotion-best-practices/rules/sfx.md +30 -30
  235. package/skills/craft/remotion-best-practices/rules/silence-detection.md +73 -73
  236. package/skills/craft/remotion-best-practices/rules/subtitles.md +36 -36
  237. package/skills/craft/remotion-best-practices/rules/tailwind.md +11 -11
  238. package/skills/craft/remotion-best-practices/rules/text-animations.md +20 -20
  239. package/skills/craft/remotion-best-practices/rules/timing.md +130 -130
  240. package/skills/craft/remotion-best-practices/rules/transcribe-captions.md +70 -70
  241. package/skills/craft/remotion-best-practices/rules/transitions.md +193 -193
  242. package/skills/craft/remotion-best-practices/rules/transparent-videos.md +102 -102
  243. package/skills/craft/remotion-best-practices/rules/trimming.md +51 -51
  244. package/skills/craft/remotion-best-practices/rules/videos.md +169 -169
  245. package/skills/craft/remotion-best-practices/rules/voiceover.md +94 -94
  246. package/skills/craft/supabase-postgres-best-practices/CHANGELOG.md +25 -25
  247. package/skills/craft/supabase-postgres-best-practices/LICENSE +21 -21
  248. package/skills/craft/supabase-postgres-best-practices/SKILL.md +69 -69
  249. package/skills/craft/supabase-postgres-best-practices/references/_contributing.md +166 -166
  250. package/skills/craft/supabase-postgres-best-practices/references/_sections.md +47 -47
  251. package/skills/craft/supabase-postgres-best-practices/references/_template.md +34 -34
  252. package/skills/craft/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -55
  253. package/skills/craft/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -49
  254. package/skills/craft/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -46
  255. package/skills/craft/supabase-postgres-best-practices/references/conn-limits.md +44 -44
  256. package/skills/craft/supabase-postgres-best-practices/references/conn-pooling.md +41 -41
  257. package/skills/craft/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -46
  258. package/skills/craft/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -54
  259. package/skills/craft/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -53
  260. package/skills/craft/supabase-postgres-best-practices/references/data-pagination.md +50 -50
  261. package/skills/craft/supabase-postgres-best-practices/references/data-upsert.md +50 -50
  262. package/skills/craft/supabase-postgres-best-practices/references/lock-advisory.md +56 -56
  263. package/skills/craft/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -68
  264. package/skills/craft/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -50
  265. package/skills/craft/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -54
  266. package/skills/craft/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -45
  267. package/skills/craft/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -55
  268. package/skills/craft/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -55
  269. package/skills/craft/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -44
  270. package/skills/craft/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -40
  271. package/skills/craft/supabase-postgres-best-practices/references/query-index-types.md +48 -48
  272. package/skills/craft/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -43
  273. package/skills/craft/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -45
  274. package/skills/craft/supabase-postgres-best-practices/references/schema-constraints.md +80 -80
  275. package/skills/craft/supabase-postgres-best-practices/references/schema-data-types.md +46 -46
  276. package/skills/craft/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -59
  277. package/skills/craft/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -55
  278. package/skills/craft/supabase-postgres-best-practices/references/schema-partitioning.md +55 -55
  279. package/skills/craft/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -61
  280. package/skills/craft/supabase-postgres-best-practices/references/security-privileges.md +54 -54
  281. package/skills/craft/supabase-postgres-best-practices/references/security-rls-basics.md +50 -50
  282. package/skills/craft/supabase-postgres-best-practices/references/security-rls-performance.md +63 -63
  283. package/skills/craft/uipm-banner-design/LICENSE +21 -21
  284. package/skills/craft/uipm-banner-design/SKILL.md +201 -201
  285. package/skills/craft/uipm-banner-design/references/banner-sizes-and-styles.md +129 -129
  286. package/skills/craft/uipm-brand/LICENSE +21 -21
  287. package/skills/craft/uipm-brand/SKILL.md +104 -104
  288. package/skills/craft/uipm-brand/references/approval-checklist.md +184 -184
  289. package/skills/craft/uipm-brand/references/asset-organization.md +167 -167
  290. package/skills/craft/uipm-brand/references/brand-guideline-template.md +161 -161
  291. package/skills/craft/uipm-brand/references/color-palette-management.md +203 -203
  292. package/skills/craft/uipm-brand/references/consistency-checklist.md +105 -105
  293. package/skills/craft/uipm-brand/references/logo-usage-rules.md +204 -204
  294. package/skills/craft/uipm-brand/references/messaging-framework.md +91 -91
  295. package/skills/craft/uipm-brand/references/typography-specifications.md +265 -265
  296. package/skills/craft/uipm-brand/references/update.md +128 -128
  297. package/skills/craft/uipm-brand/references/visual-identity.md +109 -109
  298. package/skills/craft/uipm-brand/references/voice-framework.md +99 -99
  299. package/skills/craft/uipm-brand/scripts/extract-colors.cjs +333 -333
  300. package/skills/craft/uipm-brand/scripts/inject-brand-context.cjs +324 -324
  301. package/skills/craft/uipm-brand/scripts/sync-brand-to-tokens.cjs +269 -269
  302. package/skills/craft/uipm-brand/scripts/validate-asset.cjs +361 -361
  303. package/skills/craft/uipm-brand/templates/brand-guidelines-starter.md +280 -280
  304. package/skills/craft/uipm-design/LICENSE +21 -21
  305. package/skills/craft/uipm-design/SKILL.md +305 -305
  306. package/skills/craft/uipm-design/data/cip/deliverables.csv +50 -50
  307. package/skills/craft/uipm-design/data/cip/industries.csv +20 -20
  308. package/skills/craft/uipm-design/data/cip/mockup-contexts.csv +20 -20
  309. package/skills/craft/uipm-design/data/cip/styles.csv +20 -20
  310. package/skills/craft/uipm-design/data/icon/styles.csv +16 -16
  311. package/skills/craft/uipm-design/data/logo/colors.csv +56 -56
  312. package/skills/craft/uipm-design/data/logo/industries.csv +56 -56
  313. package/skills/craft/uipm-design/data/logo/styles.csv +56 -56
  314. package/skills/craft/uipm-design/references/banner-sizes-and-styles.md +129 -129
  315. package/skills/craft/uipm-design/references/cip-deliverable-guide.md +111 -111
  316. package/skills/craft/uipm-design/references/cip-design.md +121 -121
  317. package/skills/craft/uipm-design/references/cip-prompt-engineering.md +94 -94
  318. package/skills/craft/uipm-design/references/cip-style-guide.md +76 -76
  319. package/skills/craft/uipm-design/references/design-routing.md +226 -226
  320. package/skills/craft/uipm-design/references/icon-design.md +122 -122
  321. package/skills/craft/uipm-design/references/logo-color-psychology.md +113 -113
  322. package/skills/craft/uipm-design/references/logo-design.md +92 -92
  323. package/skills/craft/uipm-design/references/logo-prompt-engineering.md +176 -176
  324. package/skills/craft/uipm-design/references/logo-style-guide.md +129 -129
  325. package/skills/craft/uipm-design/references/slides-copywriting-formulas.md +92 -92
  326. package/skills/craft/uipm-design/references/slides-create.md +5 -5
  327. package/skills/craft/uipm-design/references/slides-html-template.md +374 -374
  328. package/skills/craft/uipm-design/references/slides-layout-patterns.md +155 -155
  329. package/skills/craft/uipm-design/references/slides-strategies.md +97 -97
  330. package/skills/craft/uipm-design/references/slides.md +42 -42
  331. package/skills/craft/uipm-design/references/social-photos-design.md +353 -353
  332. package/skills/craft/uipm-design/scripts/cip/core.py +215 -215
  333. package/skills/craft/uipm-design/scripts/cip/generate.py +484 -484
  334. package/skills/craft/uipm-design/scripts/cip/render-html.py +424 -424
  335. package/skills/craft/uipm-design/scripts/cip/search.py +127 -127
  336. package/skills/craft/uipm-design/scripts/icon/generate.py +487 -487
  337. package/skills/craft/uipm-design/scripts/logo/core.py +175 -175
  338. package/skills/craft/uipm-design/scripts/logo/generate.py +362 -362
  339. package/skills/craft/uipm-design/scripts/logo/search.py +114 -114
  340. package/skills/craft/uipm-design-system/LICENSE +21 -21
  341. package/skills/craft/uipm-design-system/SKILL.md +255 -255
  342. package/skills/craft/uipm-design-system/data/slide-backgrounds.csv +11 -11
  343. package/skills/craft/uipm-design-system/data/slide-charts.csv +26 -26
  344. package/skills/craft/uipm-design-system/data/slide-color-logic.csv +14 -14
  345. package/skills/craft/uipm-design-system/data/slide-copy.csv +26 -26
  346. package/skills/craft/uipm-design-system/data/slide-layout-logic.csv +16 -16
  347. package/skills/craft/uipm-design-system/data/slide-layouts.csv +26 -26
  348. package/skills/craft/uipm-design-system/data/slide-strategies.csv +16 -16
  349. package/skills/craft/uipm-design-system/data/slide-typography.csv +15 -15
  350. package/skills/craft/uipm-design-system/references/component-specs.md +236 -236
  351. package/skills/craft/uipm-design-system/references/component-tokens.md +214 -214
  352. package/skills/craft/uipm-design-system/references/primitive-tokens.md +199 -199
  353. package/skills/craft/uipm-design-system/references/semantic-tokens.md +215 -215
  354. package/skills/craft/uipm-design-system/references/states-and-variants.md +243 -243
  355. package/skills/craft/uipm-design-system/references/tailwind-integration.md +257 -257
  356. package/skills/craft/uipm-design-system/references/token-architecture.md +226 -226
  357. package/skills/craft/uipm-design-system/scripts/embed-tokens.cjs +97 -97
  358. package/skills/craft/uipm-design-system/scripts/fetch-background.py +317 -317
  359. package/skills/craft/uipm-design-system/scripts/generate-slide.py +753 -753
  360. package/skills/craft/uipm-design-system/scripts/generate-tokens.cjs +213 -213
  361. package/skills/craft/uipm-design-system/scripts/html-token-validator.py +327 -327
  362. package/skills/craft/uipm-design-system/scripts/search-slides.py +218 -218
  363. package/skills/craft/uipm-design-system/scripts/slide-token-validator.py +35 -35
  364. package/skills/craft/uipm-design-system/scripts/slide_search_core.py +453 -453
  365. package/skills/craft/uipm-design-system/scripts/validate-tokens.cjs +254 -254
  366. package/skills/craft/uipm-design-system/templates/design-tokens-starter.json +143 -143
  367. package/skills/craft/uipm-slides/LICENSE +21 -21
  368. package/skills/craft/uipm-slides/SKILL.md +45 -45
  369. package/skills/craft/uipm-slides/references/copywriting-formulas.md +92 -92
  370. package/skills/craft/uipm-slides/references/create.md +5 -5
  371. package/skills/craft/uipm-slides/references/html-template.md +374 -374
  372. package/skills/craft/uipm-slides/references/layout-patterns.md +155 -155
  373. package/skills/craft/uipm-slides/references/slide-strategies.md +97 -97
  374. package/skills/craft/uipm-ui-ux-pro-max/LICENSE +21 -21
  375. package/skills/craft/uipm-ui-ux-pro-max/SKILL.md +678 -678
  376. package/skills/craft/uipm-ui-ux-pro-max/data/_sync_all.py +414 -414
  377. package/skills/craft/uipm-ui-ux-pro-max/data/app-interface.csv +30 -30
  378. package/skills/craft/uipm-ui-ux-pro-max/data/charts.csv +26 -26
  379. package/skills/craft/uipm-ui-ux-pro-max/data/colors.csv +161 -161
  380. package/skills/craft/uipm-ui-ux-pro-max/data/design.csv +1775 -1775
  381. package/skills/craft/uipm-ui-ux-pro-max/data/draft.csv +1778 -1778
  382. package/skills/craft/uipm-ui-ux-pro-max/data/google-fonts.csv +1924 -1924
  383. package/skills/craft/uipm-ui-ux-pro-max/data/icons.csv +105 -105
  384. package/skills/craft/uipm-ui-ux-pro-max/data/landing.csv +35 -35
  385. package/skills/craft/uipm-ui-ux-pro-max/data/products.csv +162 -162
  386. package/skills/craft/uipm-ui-ux-pro-max/data/react-performance.csv +45 -45
  387. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/angular.csv +51 -51
  388. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/astro.csv +54 -54
  389. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  390. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  391. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
  392. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/laravel.csv +51 -51
  393. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  394. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
  395. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
  396. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  397. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react.csv +54 -54
  398. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
  399. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  400. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  401. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/threejs.csv +54 -54
  402. package/skills/craft/uipm-ui-ux-pro-max/data/stacks/vue.csv +50 -50
  403. package/skills/craft/uipm-ui-ux-pro-max/data/styles.csv +85 -85
  404. package/skills/craft/uipm-ui-ux-pro-max/data/typography.csv +74 -74
  405. package/skills/craft/uipm-ui-ux-pro-max/data/ui-reasoning.csv +162 -162
  406. package/skills/craft/uipm-ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  407. package/skills/craft/uipm-ui-ux-pro-max/scripts/core.py +262 -262
  408. package/skills/craft/uipm-ui-ux-pro-max/scripts/design_system.py +1148 -1148
  409. package/skills/craft/uipm-ui-ux-pro-max/scripts/search.py +114 -114
  410. package/skills/craft/uipm-ui-ux-pro-max/templates/base/quick-reference.md +297 -297
  411. package/skills/craft/uipm-ui-ux-pro-max/templates/base/skill-content.md +375 -375
  412. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/agent.json +21 -21
  413. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/augment.json +18 -18
  414. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/claude.json +21 -21
  415. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codebuddy.json +21 -21
  416. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codex.json +21 -21
  417. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/continue.json +21 -21
  418. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/copilot.json +21 -21
  419. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/cursor.json +21 -21
  420. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/droid.json +21 -21
  421. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/gemini.json +21 -21
  422. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kilocode.json +21 -21
  423. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kiro.json +21 -21
  424. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/opencode.json +21 -21
  425. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/qoder.json +21 -21
  426. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/roocode.json +21 -21
  427. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/trae.json +21 -21
  428. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/warp.json +18 -18
  429. package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/windsurf.json +21 -21
  430. package/skills/craft/vercel-optimize/AGENTS.md +48 -48
  431. package/skills/craft/vercel-optimize/CONTRIBUTING.md +41 -41
  432. package/skills/craft/vercel-optimize/LICENSE +21 -21
  433. package/skills/craft/vercel-optimize/README.md +91 -91
  434. package/skills/craft/vercel-optimize/SKILL.md +325 -325
  435. package/skills/craft/vercel-optimize/lib/auth-route.mjs +23 -23
  436. package/skills/craft/vercel-optimize/lib/budget-summary.mjs +208 -208
  437. package/skills/craft/vercel-optimize/lib/citations.mjs +147 -147
  438. package/skills/craft/vercel-optimize/lib/cost-coverage.mjs +162 -162
  439. package/skills/craft/vercel-optimize/lib/dedup-recs.mjs +340 -340
  440. package/skills/craft/vercel-optimize/lib/deep-dive.mjs +371 -371
  441. package/skills/craft/vercel-optimize/lib/display-labels.mjs +219 -219
  442. package/skills/craft/vercel-optimize/lib/extract-claims.mjs +640 -640
  443. package/skills/craft/vercel-optimize/lib/framework-support.mjs +69 -69
  444. package/skills/craft/vercel-optimize/lib/gates/build-minutes-fanout.mjs +73 -73
  445. package/skills/craft/vercel-optimize/lib/gates/cold-start.mjs +72 -72
  446. package/skills/craft/vercel-optimize/lib/gates/contract.mjs +82 -82
  447. package/skills/craft/vercel-optimize/lib/gates/cwv-poor.mjs +95 -95
  448. package/skills/craft/vercel-optimize/lib/gates/external-api-slow.mjs +60 -60
  449. package/skills/craft/vercel-optimize/lib/gates/hard-gates.mjs +70 -70
  450. package/skills/craft/vercel-optimize/lib/gates/index.mjs +45 -45
  451. package/skills/craft/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -62
  452. package/skills/craft/vercel-optimize/lib/gates/middleware-heavy.mjs +53 -53
  453. package/skills/craft/vercel-optimize/lib/gates/observability-events-attribution.mjs +58 -58
  454. package/skills/craft/vercel-optimize/lib/gates/platform-bot-protection.mjs +123 -123
  455. package/skills/craft/vercel-optimize/lib/gates/platform-fluid-compute.mjs +94 -94
  456. package/skills/craft/vercel-optimize/lib/gates/region-misconfig.mjs +71 -71
  457. package/skills/craft/vercel-optimize/lib/gates/route-errors.mjs +95 -95
  458. package/skills/craft/vercel-optimize/lib/gates/scanner-driven.mjs +150 -150
  459. package/skills/craft/vercel-optimize/lib/gates/select-candidates.mjs +137 -137
  460. package/skills/craft/vercel-optimize/lib/gates/slow-route.mjs +97 -97
  461. package/skills/craft/vercel-optimize/lib/gates/types.d.ts +38 -38
  462. package/skills/craft/vercel-optimize/lib/gates/uncached-route.mjs +103 -103
  463. package/skills/craft/vercel-optimize/lib/gates/usage-spike-triage.mjs +122 -122
  464. package/skills/craft/vercel-optimize/lib/grade-recommendation.mjs +170 -170
  465. package/skills/craft/vercel-optimize/lib/impact-label.mjs +128 -128
  466. package/skills/craft/vercel-optimize/lib/impact-magnitude.mjs +66 -66
  467. package/skills/craft/vercel-optimize/lib/investigation-brief.mjs +751 -751
  468. package/skills/craft/vercel-optimize/lib/observation-safety.mjs +217 -217
  469. package/skills/craft/vercel-optimize/lib/project-facts.mjs +101 -101
  470. package/skills/craft/vercel-optimize/lib/queries.mjs +333 -333
  471. package/skills/craft/vercel-optimize/lib/reconcile-candidates.mjs +388 -388
  472. package/skills/craft/vercel-optimize/lib/render-report.mjs +1065 -1065
  473. package/skills/craft/vercel-optimize/lib/repo-root.mjs +97 -97
  474. package/skills/craft/vercel-optimize/lib/route-normalize.mjs +224 -224
  475. package/skills/craft/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +56 -56
  476. package/skills/craft/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +33 -33
  477. package/skills/craft/vercel-optimize/lib/sanitizers/count-correct.mjs +53 -53
  478. package/skills/craft/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +32 -32
  479. package/skills/craft/vercel-optimize/lib/sanitizers/index.mjs +87 -87
  480. package/skills/craft/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +37 -37
  481. package/skills/craft/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -16
  482. package/skills/craft/vercel-optimize/lib/sanitizers/pre-release.mjs +75 -75
  483. package/skills/craft/vercel-optimize/lib/sanitizers/rate-limit.mjs +73 -73
  484. package/skills/craft/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +42 -42
  485. package/skills/craft/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +110 -110
  486. package/skills/craft/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -37
  487. package/skills/craft/vercel-optimize/lib/sanitizers/window-units.mjs +26 -26
  488. package/skills/craft/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +114 -114
  489. package/skills/craft/vercel-optimize/lib/scanners/edge-heavy-import.mjs +102 -102
  490. package/skills/craft/vercel-optimize/lib/scanners/force-dynamic.mjs +39 -39
  491. package/skills/craft/vercel-optimize/lib/scanners/headers-in-page.mjs +43 -43
  492. package/skills/craft/vercel-optimize/lib/scanners/index.mjs +35 -35
  493. package/skills/craft/vercel-optimize/lib/scanners/large-static-asset.mjs +93 -93
  494. package/skills/craft/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +47 -47
  495. package/skills/craft/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +53 -53
  496. package/skills/craft/vercel-optimize/lib/scanners/missing-cache-headers.mjs +97 -97
  497. package/skills/craft/vercel-optimize/lib/scanners/prisma-include-tree.mjs +39 -39
  498. package/skills/craft/vercel-optimize/lib/scanners/region-pin-in-config.mjs +89 -89
  499. package/skills/craft/vercel-optimize/lib/scanners/source-maps-production.mjs +33 -33
  500. package/skills/craft/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +47 -47
  501. package/skills/craft/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +136 -136
  502. package/skills/craft/vercel-optimize/lib/scanners/unoptimized-image.mjs +127 -127
  503. package/skills/craft/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +112 -112
  504. package/skills/craft/vercel-optimize/lib/support-topics.mjs +365 -365
  505. package/skills/craft/vercel-optimize/lib/throttle.mjs +280 -280
  506. package/skills/craft/vercel-optimize/lib/util.mjs +17 -17
  507. package/skills/craft/vercel-optimize/lib/vercel.mjs +855 -855
  508. package/skills/craft/vercel-optimize/lib/verify-claim.mjs +1843 -1843
  509. package/skills/craft/vercel-optimize/lib/workspace-resolver.mjs +552 -552
  510. package/skills/craft/vercel-optimize/metadata.json +14 -14
  511. package/skills/craft/vercel-optimize/references/candidates.md +176 -176
  512. package/skills/craft/vercel-optimize/references/data-collection.md +224 -224
  513. package/skills/craft/vercel-optimize/references/docs-library.json +683 -683
  514. package/skills/craft/vercel-optimize/references/doctrine.md +108 -108
  515. package/skills/craft/vercel-optimize/references/observability-plus.md +109 -109
  516. package/skills/craft/vercel-optimize/references/playbooks/README.md +57 -57
  517. package/skills/craft/vercel-optimize/references/playbooks/ai-application.md +32 -32
  518. package/skills/craft/vercel-optimize/references/playbooks/api-service.md +30 -30
  519. package/skills/craft/vercel-optimize/references/playbooks/content-site.md +30 -30
  520. package/skills/craft/vercel-optimize/references/playbooks/ecommerce.md +30 -30
  521. package/skills/craft/vercel-optimize/references/playbooks/marketing.md +30 -30
  522. package/skills/craft/vercel-optimize/references/playbooks/saas.md +31 -31
  523. package/skills/craft/vercel-optimize/references/playbooks/sveltekit.md +75 -75
  524. package/skills/craft/vercel-optimize/references/recommendations.md +214 -214
  525. package/skills/craft/vercel-optimize/references/scanner-patterns.md +266 -266
  526. package/skills/craft/vercel-optimize/references/scoring.md +208 -208
  527. package/skills/craft/vercel-optimize/references/support-topics/README.md +50 -50
  528. package/skills/craft/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +30 -30
  529. package/skills/craft/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +31 -31
  530. package/skills/craft/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +30 -30
  531. package/skills/craft/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +32 -32
  532. package/skills/craft/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +32 -32
  533. package/skills/craft/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +31 -31
  534. package/skills/craft/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +32 -32
  535. package/skills/craft/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +31 -31
  536. package/skills/craft/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +31 -31
  537. package/skills/craft/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +33 -33
  538. package/skills/craft/vercel-optimize/references/support-topics/database-egress-pooling-region.md +32 -32
  539. package/skills/craft/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +31 -31
  540. package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +31 -31
  541. package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path.md +31 -31
  542. package/skills/craft/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +26 -26
  543. package/skills/craft/vercel-optimize/references/support-topics/fluid-compute-caveats.md +26 -26
  544. package/skills/craft/vercel-optimize/references/support-topics/function-duration-io-and-after.md +31 -31
  545. package/skills/craft/vercel-optimize/references/support-topics/function-invocation-reduction.md +31 -31
  546. package/skills/craft/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +31 -31
  547. package/skills/craft/vercel-optimize/references/support-topics/image-optimization-cost-control.md +31 -31
  548. package/skills/craft/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +31 -31
  549. package/skills/craft/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +30 -30
  550. package/skills/craft/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +30 -30
  551. package/skills/craft/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +31 -31
  552. package/skills/craft/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +28 -28
  553. package/skills/craft/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +31 -31
  554. package/skills/craft/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +30 -30
  555. package/skills/craft/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +31 -31
  556. package/skills/craft/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +31 -31
  557. package/skills/craft/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +33 -33
  558. package/skills/craft/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +31 -31
  559. package/skills/craft/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +27 -27
  560. package/skills/craft/vercel-optimize/references/support-topics/post-response-work-waituntil.md +26 -26
  561. package/skills/craft/vercel-optimize/references/support-topics/route-error-durable-offload.md +33 -33
  562. package/skills/craft/vercel-optimize/references/support-topics/route-error-runtime-limits.md +31 -31
  563. package/skills/craft/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +30 -30
  564. package/skills/craft/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +31 -31
  565. package/skills/craft/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +30 -30
  566. package/skills/craft/vercel-optimize/references/support-topics/usage-spike-triage.md +31 -31
  567. package/skills/craft/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +31 -31
  568. package/skills/craft/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +30 -30
  569. package/skills/craft/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +32 -32
  570. package/skills/craft/vercel-optimize/references/verification.md +102 -102
  571. package/skills/craft/vercel-optimize/references/voice.md +76 -76
  572. package/skills/craft/vercel-optimize/scripts/budget-summary.mjs +58 -58
  573. package/skills/craft/vercel-optimize/scripts/build-docs.mjs +76 -76
  574. package/skills/craft/vercel-optimize/scripts/check-citations.mjs +91 -91
  575. package/skills/craft/vercel-optimize/scripts/check-docs-fresh.mjs +100 -100
  576. package/skills/craft/vercel-optimize/scripts/collect-signals.mjs +638 -638
  577. package/skills/craft/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +306 -306
  578. package/skills/craft/vercel-optimize/scripts/deep-dive.mjs +358 -358
  579. package/skills/craft/vercel-optimize/scripts/gate-investigations.mjs +178 -178
  580. package/skills/craft/vercel-optimize/scripts/merge-signals.mjs +203 -203
  581. package/skills/craft/vercel-optimize/scripts/prepare-investigation-brief.mjs +249 -249
  582. package/skills/craft/vercel-optimize/scripts/reconcile-candidates.mjs +69 -69
  583. package/skills/craft/vercel-optimize/scripts/render-report.mjs +462 -462
  584. package/skills/craft/vercel-optimize/scripts/scan-codebase.mjs +361 -361
  585. package/skills/craft/vercel-optimize/scripts/verify-and-regen.mjs +379 -379
  586. package/skills/craft/vercel-optimize/scripts/verify-finding.mjs +21 -21
  587. package/skills/craft/web-design-guidelines/LICENSE +21 -21
  588. package/skills/craft/web-design-guidelines/SKILL.md +43 -43
  589. package/skills/craft/zero-to-live/LICENSE +21 -21
  590. package/skills/craft/zero-to-live/SKILL.md +422 -422
  591. package/skills/creative/creative-3d-modeling/LICENSE +21 -21
  592. package/skills/creative/creative-3d-modeling/SKILL.md +70 -70
  593. package/skills/creative/creative-architecture/LICENSE +21 -21
  594. package/skills/creative/creative-architecture/SKILL.md +94 -94
  595. package/skills/creative/creative-design-principles/LICENSE +21 -21
  596. package/skills/creative/creative-design-principles/SKILL.md +95 -95
  597. package/skills/creative/creative-fashion-advanced/LICENSE +21 -21
  598. package/skills/creative/creative-fashion-advanced/SKILL.md +68 -68
  599. package/skills/creative/creative-fashion-design/LICENSE +21 -21
  600. package/skills/creative/creative-fashion-design/SKILL.md +66 -66
  601. package/skills/creative/creative-game-design/LICENSE +21 -21
  602. package/skills/creative/creative-game-design/SKILL.md +77 -77
  603. package/skills/creative/creative-industrial-design/LICENSE +21 -21
  604. package/skills/creative/creative-industrial-design/SKILL.md +57 -57
  605. package/skills/creative/creative-interior-design/LICENSE +21 -21
  606. package/skills/creative/creative-interior-design/SKILL.md +59 -59
  607. package/skills/creative/creative-music-theory/LICENSE +21 -21
  608. package/skills/creative/creative-music-theory/SKILL.md +98 -98
  609. package/skills/creative/creative-photography/LICENSE +21 -21
  610. package/skills/creative/creative-photography/SKILL.md +87 -87
  611. package/skills/creative/creative-textile-science/LICENSE +21 -21
  612. package/skills/creative/creative-textile-science/SKILL.md +67 -67
  613. package/skills/creative/creative-ux/LICENSE +21 -21
  614. package/skills/creative/creative-ux/SKILL.md +81 -81
  615. package/skills/creative/creative-video/LICENSE +21 -21
  616. package/skills/creative/creative-video/SKILL.md +84 -84
  617. package/skills/creative/creative-writing-craft/LICENSE +21 -21
  618. package/skills/creative/creative-writing-craft/SKILL.md +91 -91
  619. package/skills/diagram-maker/SKILL.md +56 -56
  620. package/skills/diagram-maker/references/excalidraw-patterns.md +85 -85
  621. package/skills/diagram-maker/references/svg-template.md +112 -112
  622. package/skills/discord/SKILL.md +140 -140
  623. package/skills/education/edu-adult-learning/LICENSE +21 -21
  624. package/skills/education/edu-adult-learning/SKILL.md +81 -81
  625. package/skills/education/edu-africa-multilingual/LICENSE +21 -21
  626. package/skills/education/edu-africa-multilingual/SKILL.md +55 -55
  627. package/skills/education/edu-arabic/LICENSE +21 -21
  628. package/skills/education/edu-arabic/SKILL.md +60 -60
  629. package/skills/education/edu-australia-nz/LICENSE +21 -21
  630. package/skills/education/edu-australia-nz/SKILL.md +48 -48
  631. package/skills/education/edu-china-mandarin/LICENSE +21 -21
  632. package/skills/education/edu-china-mandarin/SKILL.md +58 -58
  633. package/skills/education/edu-critical-thinking/LICENSE +21 -21
  634. package/skills/education/edu-critical-thinking/SKILL.md +86 -86
  635. package/skills/education/edu-curriculum/LICENSE +21 -21
  636. package/skills/education/edu-curriculum/SKILL.md +87 -87
  637. package/skills/education/edu-ed-tech/LICENSE +21 -21
  638. package/skills/education/edu-ed-tech/SKILL.md +73 -73
  639. package/skills/education/edu-france/LICENSE +21 -21
  640. package/skills/education/edu-france/SKILL.md +42 -42
  641. package/skills/education/edu-germany/LICENSE +21 -21
  642. package/skills/education/edu-germany/SKILL.md +46 -46
  643. package/skills/education/edu-india-competitive/LICENSE +21 -21
  644. package/skills/education/edu-india-competitive/SKILL.md +159 -159
  645. package/skills/education/edu-india-east/LICENSE +21 -21
  646. package/skills/education/edu-india-east/SKILL.md +60 -60
  647. package/skills/education/edu-india-hindi/LICENSE +21 -21
  648. package/skills/education/edu-india-hindi/SKILL.md +107 -107
  649. package/skills/education/edu-india-south/LICENSE +21 -21
  650. package/skills/education/edu-india-south/SKILL.md +64 -64
  651. package/skills/education/edu-india-west/LICENSE +21 -21
  652. package/skills/education/edu-india-west/SKILL.md +68 -68
  653. package/skills/education/edu-indonesia-malay/LICENSE +21 -21
  654. package/skills/education/edu-indonesia-malay/SKILL.md +57 -57
  655. package/skills/education/edu-international-ib/LICENSE +21 -21
  656. package/skills/education/edu-international-ib/SKILL.md +61 -61
  657. package/skills/education/edu-japan/LICENSE +21 -21
  658. package/skills/education/edu-japan/SKILL.md +48 -48
  659. package/skills/education/edu-korea/LICENSE +21 -21
  660. package/skills/education/edu-korea/SKILL.md +48 -48
  661. package/skills/education/edu-learning-science/LICENSE +21 -21
  662. package/skills/education/edu-learning-science/SKILL.md +76 -76
  663. package/skills/education/edu-portuguese-brazil/LICENSE +21 -21
  664. package/skills/education/edu-portuguese-brazil/SKILL.md +51 -51
  665. package/skills/education/edu-russia/LICENSE +21 -21
  666. package/skills/education/edu-russia/SKILL.md +50 -50
  667. package/skills/education/edu-spain-latam/LICENSE +21 -21
  668. package/skills/education/edu-spain-latam/SKILL.md +55 -55
  669. package/skills/education/edu-special/LICENSE +21 -21
  670. package/skills/education/edu-special/SKILL.md +76 -76
  671. package/skills/education/edu-thailand/LICENSE +21 -21
  672. package/skills/education/edu-thailand/SKILL.md +55 -55
  673. package/skills/education/edu-turkey/LICENSE +21 -21
  674. package/skills/education/edu-turkey/SKILL.md +58 -58
  675. package/skills/education/edu-uk-gcse-alevel/LICENSE +21 -21
  676. package/skills/education/edu-uk-gcse-alevel/SKILL.md +51 -51
  677. package/skills/education/edu-usa-graduate/LICENSE +21 -21
  678. package/skills/education/edu-usa-graduate/SKILL.md +57 -57
  679. package/skills/education/edu-usa-sat-act/LICENSE +21 -21
  680. package/skills/education/edu-usa-sat-act/SKILL.md +55 -55
  681. package/skills/education/edu-vietnam/LICENSE +21 -21
  682. package/skills/education/edu-vietnam/SKILL.md +53 -53
  683. package/skills/eightctl/SKILL.md +54 -54
  684. package/skills/engineering/eng-aerospace/LICENSE +21 -21
  685. package/skills/engineering/eng-aerospace/SKILL.md +117 -117
  686. package/skills/engineering/eng-chemical/LICENSE +21 -21
  687. package/skills/engineering/eng-chemical/SKILL.md +63 -63
  688. package/skills/engineering/eng-civil/LICENSE +21 -21
  689. package/skills/engineering/eng-civil/SKILL.md +223 -223
  690. package/skills/engineering/eng-control-systems/LICENSE +21 -21
  691. package/skills/engineering/eng-control-systems/SKILL.md +158 -158
  692. package/skills/engineering/eng-cryogenics/LICENSE +21 -21
  693. package/skills/engineering/eng-cryogenics/SKILL.md +151 -151
  694. package/skills/engineering/eng-electrical/LICENSE +21 -21
  695. package/skills/engineering/eng-electrical/SKILL.md +70 -70
  696. package/skills/engineering/eng-electronics-embedded/LICENSE +21 -21
  697. package/skills/engineering/eng-electronics-embedded/SKILL.md +89 -89
  698. package/skills/engineering/eng-environmental/LICENSE +21 -21
  699. package/skills/engineering/eng-environmental/SKILL.md +66 -66
  700. package/skills/engineering/eng-manufacturing/LICENSE +21 -21
  701. package/skills/engineering/eng-manufacturing/SKILL.md +78 -78
  702. package/skills/engineering/eng-mechanical/LICENSE +21 -21
  703. package/skills/engineering/eng-mechanical/SKILL.md +66 -66
  704. package/skills/engineering/eng-project/LICENSE +21 -21
  705. package/skills/engineering/eng-project/SKILL.md +72 -72
  706. package/skills/engineering/eng-propulsion/LICENSE +21 -21
  707. package/skills/engineering/eng-propulsion/SKILL.md +133 -133
  708. package/skills/engineering/eng-robotics/LICENSE +21 -21
  709. package/skills/engineering/eng-robotics/SKILL.md +92 -92
  710. package/skills/engineering/eng-systems/LICENSE +21 -21
  711. package/skills/engineering/eng-systems/SKILL.md +81 -81
  712. package/skills/environment/env-biodiversity/LICENSE +21 -21
  713. package/skills/environment/env-biodiversity/SKILL.md +66 -66
  714. package/skills/environment/env-circular-economy/LICENSE +21 -21
  715. package/skills/environment/env-circular-economy/SKILL.md +71 -71
  716. package/skills/environment/env-climate-action/LICENSE +21 -21
  717. package/skills/environment/env-climate-action/SKILL.md +55 -55
  718. package/skills/environment/env-energy/LICENSE +21 -21
  719. package/skills/environment/env-energy/SKILL.md +83 -83
  720. package/skills/environment/env-sustainability-biz/LICENSE +21 -21
  721. package/skills/environment/env-sustainability-biz/SKILL.md +65 -65
  722. package/skills/environment/env-water/LICENSE +21 -21
  723. package/skills/environment/env-water/SKILL.md +67 -67
  724. package/skills/finance/finance-accounting/LICENSE +21 -21
  725. package/skills/finance/finance-accounting/SKILL.md +239 -239
  726. package/skills/finance/finance-banking/LICENSE +21 -21
  727. package/skills/finance/finance-banking/SKILL.md +54 -54
  728. package/skills/finance/finance-corporate/LICENSE +21 -21
  729. package/skills/finance/finance-corporate/SKILL.md +105 -105
  730. package/skills/finance/finance-crypto/LICENSE +21 -21
  731. package/skills/finance/finance-crypto/SKILL.md +94 -94
  732. package/skills/finance/finance-debt-management/LICENSE +21 -21
  733. package/skills/finance/finance-debt-management/SKILL.md +87 -87
  734. package/skills/finance/finance-insurance/LICENSE +21 -21
  735. package/skills/finance/finance-insurance/SKILL.md +91 -91
  736. package/skills/finance/finance-investing/LICENSE +21 -21
  737. package/skills/finance/finance-investing/SKILL.md +269 -269
  738. package/skills/finance/finance-options-derivatives/LICENSE +21 -21
  739. package/skills/finance/finance-options-derivatives/SKILL.md +68 -68
  740. package/skills/finance/finance-personal/LICENSE +21 -21
  741. package/skills/finance/finance-personal/SKILL.md +268 -268
  742. package/skills/finance/finance-real-estate/LICENSE +21 -21
  743. package/skills/finance/finance-real-estate/SKILL.md +110 -110
  744. package/skills/finance/finance-startup/LICENSE +21 -21
  745. package/skills/finance/finance-startup/SKILL.md +253 -253
  746. package/skills/finance/finance-tax-planning/LICENSE +21 -21
  747. package/skills/finance/finance-tax-planning/SKILL.md +89 -89
  748. package/skills/finance/finance-trading/LICENSE +21 -21
  749. package/skills/finance/finance-trading/SKILL.md +112 -112
  750. package/skills/gemini/SKILL.md +51 -51
  751. package/skills/gh-issues/SKILL.md +216 -216
  752. package/skills/gifgrep/SKILL.md +89 -89
  753. package/skills/github/SKILL.md +87 -87
  754. package/skills/gog/SKILL.md +120 -120
  755. package/skills/goplaces/SKILL.md +56 -56
  756. package/skills/health/health-aging/LICENSE +21 -21
  757. package/skills/health/health-aging/SKILL.md +82 -82
  758. package/skills/health/health-chronic/LICENSE +21 -21
  759. package/skills/health/health-chronic/SKILL.md +202 -202
  760. package/skills/health/health-dental/LICENSE +21 -21
  761. package/skills/health/health-dental/SKILL.md +41 -41
  762. package/skills/health/health-eye-care/LICENSE +21 -21
  763. package/skills/health/health-eye-care/SKILL.md +56 -56
  764. package/skills/health/health-first-aid/LICENSE +21 -21
  765. package/skills/health/health-first-aid/SKILL.md +201 -201
  766. package/skills/health/health-fitness/LICENSE +21 -21
  767. package/skills/health/health-fitness/SKILL.md +111 -111
  768. package/skills/health/health-general/LICENSE +21 -21
  769. package/skills/health/health-general/SKILL.md +277 -277
  770. package/skills/health/health-mens/LICENSE +21 -21
  771. package/skills/health/health-mens/SKILL.md +53 -53
  772. package/skills/health/health-mental/LICENSE +21 -21
  773. package/skills/health/health-mental/SKILL.md +221 -221
  774. package/skills/health/health-naturopathy-ayurveda/LICENSE +21 -21
  775. package/skills/health/health-naturopathy-ayurveda/SKILL.md +60 -60
  776. package/skills/health/health-nutrition/LICENSE +21 -21
  777. package/skills/health/health-nutrition/SKILL.md +262 -262
  778. package/skills/health/health-pediatric/LICENSE +21 -21
  779. package/skills/health/health-pediatric/SKILL.md +94 -94
  780. package/skills/health/health-pharmacology/LICENSE +21 -21
  781. package/skills/health/health-pharmacology/SKILL.md +87 -87
  782. package/skills/health/health-pregnancy/LICENSE +21 -21
  783. package/skills/health/health-pregnancy/SKILL.md +71 -71
  784. package/skills/health/health-skin/LICENSE +21 -21
  785. package/skills/health/health-skin/SKILL.md +71 -71
  786. package/skills/health/health-sleep/LICENSE +21 -21
  787. package/skills/health/health-sleep/SKILL.md +81 -81
  788. package/skills/health/health-womens/LICENSE +21 -21
  789. package/skills/health/health-womens/SKILL.md +72 -72
  790. package/skills/health/health-yoga-wellness/LICENSE +21 -21
  791. package/skills/health/health-yoga-wellness/SKILL.md +58 -58
  792. package/skills/healthcare-systems/health-sys-global/LICENSE +21 -21
  793. package/skills/healthcare-systems/health-sys-global/SKILL.md +69 -69
  794. package/skills/healthcare-systems/health-sys-management/LICENSE +21 -21
  795. package/skills/healthcare-systems/health-sys-management/SKILL.md +71 -71
  796. package/skills/healthcare-systems/health-sys-navigation/LICENSE +21 -21
  797. package/skills/healthcare-systems/health-sys-navigation/SKILL.md +60 -60
  798. package/skills/healthcare-systems/health-sys-public/LICENSE +21 -21
  799. package/skills/healthcare-systems/health-sys-public/SKILL.md +71 -71
  800. package/skills/healthcheck/SKILL.md +109 -109
  801. package/skills/himalaya/SKILL.md +84 -84
  802. package/skills/himalaya/references/configuration.md +184 -184
  803. package/skills/himalaya/references/message-composition.md +199 -199
  804. package/skills/humanities/humanities-history-world/LICENSE +21 -21
  805. package/skills/humanities/humanities-history-world/SKILL.md +59 -59
  806. package/skills/humanities/humanities-indian-classical/LICENSE +21 -21
  807. package/skills/humanities/humanities-indian-classical/SKILL.md +104 -104
  808. package/skills/humanities/humanities-philosophy/LICENSE +21 -21
  809. package/skills/humanities/humanities-philosophy/SKILL.md +105 -105
  810. package/skills/humanities/humanities-world-religions/LICENSE +21 -21
  811. package/skills/humanities/humanities-world-religions/SKILL.md +67 -67
  812. package/skills/impeccable/SKILL.md +185 -185
  813. package/skills/imsg/SKILL.md +126 -126
  814. package/skills/industry/industry-construction/LICENSE +21 -21
  815. package/skills/industry/industry-construction/SKILL.md +81 -81
  816. package/skills/industry/industry-education-sector/LICENSE +21 -21
  817. package/skills/industry/industry-education-sector/SKILL.md +49 -49
  818. package/skills/industry/industry-fashion/LICENSE +21 -21
  819. package/skills/industry/industry-fashion/SKILL.md +82 -82
  820. package/skills/industry/industry-food/LICENSE +21 -21
  821. package/skills/industry/industry-food/SKILL.md +79 -79
  822. package/skills/industry/industry-government/LICENSE +21 -21
  823. package/skills/industry/industry-government/SKILL.md +80 -80
  824. package/skills/industry/industry-hospitality/LICENSE +21 -21
  825. package/skills/industry/industry-hospitality/SKILL.md +73 -73
  826. package/skills/industry/industry-insurance-sector/LICENSE +21 -21
  827. package/skills/industry/industry-insurance-sector/SKILL.md +57 -57
  828. package/skills/industry/industry-logistics/LICENSE +21 -21
  829. package/skills/industry/industry-logistics/SKILL.md +80 -80
  830. package/skills/industry/industry-media/LICENSE +21 -21
  831. package/skills/industry/industry-media/SKILL.md +66 -66
  832. package/skills/industry/industry-nonprofit/LICENSE +21 -21
  833. package/skills/industry/industry-nonprofit/SKILL.md +77 -77
  834. package/skills/industry/industry-pharma/LICENSE +21 -21
  835. package/skills/industry/industry-pharma/SKILL.md +69 -69
  836. package/skills/industry/industry-real-estate/LICENSE +21 -21
  837. package/skills/industry/industry-real-estate/SKILL.md +61 -61
  838. package/skills/industry/industry-sports/LICENSE +21 -21
  839. package/skills/industry/industry-sports/SKILL.md +71 -71
  840. package/skills/industry/industry-tech-startup/LICENSE +21 -21
  841. package/skills/industry/industry-tech-startup/SKILL.md +82 -82
  842. package/skills/internal-comms/LICENSE +21 -21
  843. package/skills/internal-comms/SKILL.md +38 -38
  844. package/skills/internal-comms/examples/3p-updates.md +49 -49
  845. package/skills/internal-comms/examples/company-newsletter.md +76 -76
  846. package/skills/internal-comms/examples/faq-answers.md +35 -35
  847. package/skills/internal-comms/examples/general-comms.md +19 -19
  848. package/skills/legal/legal-business/LICENSE +21 -21
  849. package/skills/legal/legal-business/SKILL.md +227 -227
  850. package/skills/legal/legal-consumer/LICENSE +21 -21
  851. package/skills/legal/legal-consumer/SKILL.md +155 -155
  852. package/skills/legal/legal-contracts/LICENSE +21 -21
  853. package/skills/legal/legal-contracts/SKILL.md +268 -268
  854. package/skills/legal/legal-corporate-governance/LICENSE +21 -21
  855. package/skills/legal/legal-corporate-governance/SKILL.md +53 -53
  856. package/skills/legal/legal-employment/LICENSE +21 -21
  857. package/skills/legal/legal-employment/SKILL.md +291 -291
  858. package/skills/legal/legal-immigration/LICENSE +21 -21
  859. package/skills/legal/legal-immigration/SKILL.md +146 -146
  860. package/skills/legal/legal-international/LICENSE +21 -21
  861. package/skills/legal/legal-international/SKILL.md +51 -51
  862. package/skills/legal/legal-ip/LICENSE +21 -21
  863. package/skills/legal/legal-ip/SKILL.md +264 -264
  864. package/skills/legal/legal-privacy/LICENSE +21 -21
  865. package/skills/legal/legal-privacy/SKILL.md +161 -161
  866. package/skills/legal/legal-real-estate/LICENSE +21 -21
  867. package/skills/legal/legal-real-estate/SKILL.md +142 -142
  868. package/skills/legal/legal-startup/LICENSE +21 -21
  869. package/skills/legal/legal-startup/SKILL.md +182 -182
  870. package/skills/legal/legal-tax/LICENSE +21 -21
  871. package/skills/legal/legal-tax/SKILL.md +156 -156
  872. package/skills/mcp-builder/LICENSE +21 -21
  873. package/skills/mcp-builder/SKILL.md +257 -257
  874. package/skills/mcp-builder/reference/evaluation.md +630 -630
  875. package/skills/mcp-builder/reference/mcp_best_practices.md +269 -269
  876. package/skills/mcp-builder/reference/node_mcp_server.md +980 -980
  877. package/skills/mcp-builder/reference/python_mcp_server.md +737 -737
  878. package/skills/mcp-builder/scripts/connections.py +151 -151
  879. package/skills/mcp-builder/scripts/evaluation.py +373 -373
  880. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -22
  881. package/skills/mcp-builder/scripts/requirements.txt +2 -2
  882. package/skills/mcporter/SKILL.md +65 -65
  883. package/skills/meme-maker/SKILL.md +46 -46
  884. package/skills/meme-maker/references/templates.json +358 -358
  885. package/skills/meme-maker/scripts/meme.mjs +398 -398
  886. package/skills/mental-health/mental-health-cbt/LICENSE +21 -21
  887. package/skills/mental-health/mental-health-cbt/SKILL.md +254 -254
  888. package/skills/mental-health/psych-addiction/LICENSE +21 -21
  889. package/skills/mental-health/psych-addiction/SKILL.md +79 -79
  890. package/skills/mental-health/psych-behavioral-econ/LICENSE +21 -21
  891. package/skills/mental-health/psych-behavioral-econ/SKILL.md +84 -84
  892. package/skills/mental-health/psych-child/LICENSE +21 -21
  893. package/skills/mental-health/psych-child/SKILL.md +84 -84
  894. package/skills/mental-health/psych-grief/LICENSE +21 -21
  895. package/skills/mental-health/psych-grief/SKILL.md +85 -85
  896. package/skills/mental-health/psych-mindfulness/LICENSE +21 -21
  897. package/skills/mental-health/psych-mindfulness/SKILL.md +71 -71
  898. package/skills/mental-health/psych-org/LICENSE +21 -21
  899. package/skills/mental-health/psych-org/SKILL.md +115 -115
  900. package/skills/mental-health/psych-positive/LICENSE +21 -21
  901. package/skills/mental-health/psych-positive/SKILL.md +86 -86
  902. package/skills/mental-health/psych-relationships/LICENSE +21 -21
  903. package/skills/mental-health/psych-relationships/SKILL.md +100 -100
  904. package/skills/mental-health/psych-trauma/LICENSE +21 -21
  905. package/skills/mental-health/psych-trauma/SKILL.md +109 -109
  906. package/skills/model-usage/SKILL.md +75 -75
  907. package/skills/model-usage/references/codexbar-cli.md +33 -33
  908. package/skills/model-usage/scripts/model_usage.py +319 -319
  909. package/skills/model-usage/scripts/test_model_usage.py +40 -40
  910. package/skills/nano-pdf/SKILL.md +42 -42
  911. package/skills/node-connect/SKILL.md +147 -147
  912. package/skills/node-inspect-debugger/SKILL.md +88 -88
  913. package/skills/notion/SKILL.md +154 -154
  914. package/skills/obsidian/SKILL.md +123 -123
  915. package/skills/openai-whisper/SKILL.md +42 -42
  916. package/skills/openai-whisper-api/SKILL.md +75 -75
  917. package/skills/openai-whisper-api/scripts/transcribe.sh +154 -154
  918. package/skills/openhue/SKILL.md +116 -116
  919. package/skills/oracle/SKILL.md +130 -130
  920. package/skills/ordercli/SKILL.md +82 -82
  921. package/skills/peekaboo/SKILL.md +217 -217
  922. package/skills/pyproject.toml +10 -10
  923. package/skills/python-debugpy/SKILL.md +76 -76
  924. package/skills/sag/SKILL.md +91 -91
  925. package/skills/science/sci-astronomy/LICENSE +21 -21
  926. package/skills/science/sci-astronomy/SKILL.md +80 -80
  927. package/skills/science/sci-biology/LICENSE +21 -21
  928. package/skills/science/sci-biology/SKILL.md +74 -74
  929. package/skills/science/sci-chemistry/LICENSE +21 -21
  930. package/skills/science/sci-chemistry/SKILL.md +89 -89
  931. package/skills/science/sci-climate/LICENSE +21 -21
  932. package/skills/science/sci-climate/SKILL.md +72 -72
  933. package/skills/science/sci-data-analysis/LICENSE +21 -21
  934. package/skills/science/sci-data-analysis/SKILL.md +87 -87
  935. package/skills/science/sci-environmental-science/LICENSE +21 -21
  936. package/skills/science/sci-environmental-science/SKILL.md +69 -69
  937. package/skills/science/sci-geology/LICENSE +21 -21
  938. package/skills/science/sci-geology/SKILL.md +56 -56
  939. package/skills/science/sci-method/LICENSE +21 -21
  940. package/skills/science/sci-method/SKILL.md +77 -77
  941. package/skills/science/sci-neuroscience/LICENSE +21 -21
  942. package/skills/science/sci-neuroscience/SKILL.md +79 -79
  943. package/skills/science/sci-physics/LICENSE +21 -21
  944. package/skills/science/sci-physics/SKILL.md +78 -78
  945. package/skills/science/sci-research-methods/LICENSE +21 -21
  946. package/skills/science/sci-research-methods/SKILL.md +83 -83
  947. package/skills/science/sci-statistics/LICENSE +21 -21
  948. package/skills/science/sci-statistics/SKILL.md +249 -249
  949. package/skills/session-logs/SKILL.md +155 -155
  950. package/skills/sherpa-onnx-tts/SKILL.md +113 -113
  951. package/skills/skill-creator/SKILL.md +81 -81
  952. package/skills/skill-creator/license.txt +202 -202
  953. package/skills/skill-creator/scripts/init_skill.py +378 -378
  954. package/skills/skill-creator/scripts/package_skill.py +144 -144
  955. package/skills/skill-creator/scripts/quick_validate.py +169 -169
  956. package/skills/skill-creator/scripts/test_init_skill.py +51 -51
  957. package/skills/skill-creator/scripts/test_package_skill.py +199 -199
  958. package/skills/skill-creator/scripts/test_quick_validate.py +116 -116
  959. package/skills/slack/SKILL.md +82 -82
  960. package/skills/slack-gif-creator/LICENSE +21 -21
  961. package/skills/slack-gif-creator/SKILL.md +293 -293
  962. package/skills/slack-gif-creator/requirements.txt +3 -3
  963. package/skills/social-sciences/social-anthropology/LICENSE +21 -21
  964. package/skills/social-sciences/social-anthropology/SKILL.md +62 -62
  965. package/skills/social-sciences/social-economics/LICENSE +21 -21
  966. package/skills/social-sciences/social-economics/SKILL.md +88 -88
  967. package/skills/social-sciences/social-geography/LICENSE +21 -21
  968. package/skills/social-sciences/social-geography/SKILL.md +61 -61
  969. package/skills/social-sciences/social-international-dev/LICENSE +21 -21
  970. package/skills/social-sciences/social-international-dev/SKILL.md +76 -76
  971. package/skills/social-sciences/social-political-science/LICENSE +21 -21
  972. package/skills/social-sciences/social-political-science/SKILL.md +70 -70
  973. package/skills/social-sciences/social-public-policy/LICENSE +21 -21
  974. package/skills/social-sciences/social-public-policy/SKILL.md +73 -73
  975. package/skills/social-sciences/social-sociology/LICENSE +21 -21
  976. package/skills/social-sciences/social-sociology/SKILL.md +78 -78
  977. package/skills/songsee/SKILL.md +53 -53
  978. package/skills/sonoscli/SKILL.md +69 -69
  979. package/skills/spike/SKILL.md +55 -55
  980. package/skills/spotify-player/SKILL.md +68 -68
  981. package/skills/summarize/SKILL.md +90 -90
  982. package/skills/taskflow/SKILL.md +153 -153
  983. package/skills/taskflow/examples/inbox-triage.lobster +33 -33
  984. package/skills/taskflow/examples/pr-intake.lobster +32 -32
  985. package/skills/taskflow-inbox-triage/SKILL.md +123 -123
  986. package/skills/technical/ai-ethics/LICENSE +21 -21
  987. package/skills/technical/ai-ethics/SKILL.md +92 -92
  988. package/skills/technical/ai-product-builder/LICENSE +21 -21
  989. package/skills/technical/ai-product-builder/SKILL.md +180 -180
  990. package/skills/technical/analytics-setup/LICENSE +21 -21
  991. package/skills/technical/analytics-setup/SKILL.md +125 -125
  992. package/skills/technical/api-builder/LICENSE +21 -21
  993. package/skills/technical/api-builder/SKILL.md +202 -202
  994. package/skills/technical/architecture-decisions/LICENSE +21 -21
  995. package/skills/technical/architecture-decisions/SKILL.md +120 -120
  996. package/skills/technical/auth-security/LICENSE +21 -21
  997. package/skills/technical/auth-security/SKILL.md +209 -209
  998. package/skills/technical/blockchain-web3/LICENSE +21 -21
  999. package/skills/technical/blockchain-web3/SKILL.md +84 -84
  1000. package/skills/technical/cloud-architecture/LICENSE +21 -21
  1001. package/skills/technical/cloud-architecture/SKILL.md +85 -85
  1002. package/skills/technical/content-platform/LICENSE +21 -21
  1003. package/skills/technical/content-platform/SKILL.md +134 -134
  1004. package/skills/technical/cybersecurity-advanced/LICENSE +21 -21
  1005. package/skills/technical/cybersecurity-advanced/SKILL.md +99 -99
  1006. package/skills/technical/data-engineering/LICENSE +21 -21
  1007. package/skills/technical/data-engineering/SKILL.md +117 -117
  1008. package/skills/technical/database-design/LICENSE +21 -21
  1009. package/skills/technical/database-design/SKILL.md +185 -185
  1010. package/skills/technical/devops-cicd/LICENSE +21 -21
  1011. package/skills/technical/devops-cicd/SKILL.md +181 -181
  1012. package/skills/technical/ecommerce-builder/LICENSE +21 -21
  1013. package/skills/technical/ecommerce-builder/SKILL.md +123 -123
  1014. package/skills/technical/email-marketing/LICENSE +21 -21
  1015. package/skills/technical/email-marketing/SKILL.md +128 -128
  1016. package/skills/technical/fintech-builder/LICENSE +21 -21
  1017. package/skills/technical/fintech-builder/SKILL.md +141 -141
  1018. package/skills/technical/full-stack-web/LICENSE +21 -21
  1019. package/skills/technical/full-stack-web/SKILL.md +173 -173
  1020. package/skills/technical/gdpr-basics/LICENSE +21 -21
  1021. package/skills/technical/gdpr-basics/SKILL.md +145 -145
  1022. package/skills/technical/launch-playbook/LICENSE +21 -21
  1023. package/skills/technical/launch-playbook/SKILL.md +95 -95
  1024. package/skills/technical/marketing-copy/LICENSE +21 -21
  1025. package/skills/technical/marketing-copy/SKILL.md +126 -126
  1026. package/skills/technical/marketplace-builder/LICENSE +21 -21
  1027. package/skills/technical/marketplace-builder/SKILL.md +105 -105
  1028. package/skills/technical/mobile-pwa/LICENSE +21 -21
  1029. package/skills/technical/mobile-pwa/SKILL.md +191 -191
  1030. package/skills/technical/no-code-tools/LICENSE +21 -21
  1031. package/skills/technical/no-code-tools/SKILL.md +80 -80
  1032. package/skills/technical/open-source/LICENSE +21 -21
  1033. package/skills/technical/open-source/SKILL.md +71 -71
  1034. package/skills/technical/performance-optimization/LICENSE +21 -21
  1035. package/skills/technical/performance-optimization/SKILL.md +155 -155
  1036. package/skills/technical/pricing-design/LICENSE +21 -21
  1037. package/skills/technical/pricing-design/SKILL.md +87 -87
  1038. package/skills/technical/product-management/LICENSE +21 -21
  1039. package/skills/technical/product-management/SKILL.md +94 -94
  1040. package/skills/technical/saas-builder/LICENSE +21 -21
  1041. package/skills/technical/saas-builder/SKILL.md +138 -138
  1042. package/skills/technical/scope-estimation/LICENSE +21 -21
  1043. package/skills/technical/scope-estimation/SKILL.md +99 -99
  1044. package/skills/technical/secrets-management/LICENSE +21 -21
  1045. package/skills/technical/secrets-management/SKILL.md +135 -135
  1046. package/skills/technical/seo-technical/LICENSE +21 -21
  1047. package/skills/technical/seo-technical/SKILL.md +136 -136
  1048. package/skills/technical/technical-writing/LICENSE +21 -21
  1049. package/skills/technical/technical-writing/SKILL.md +149 -149
  1050. package/skills/technical/ux-research-tools/LICENSE +21 -21
  1051. package/skills/technical/ux-research-tools/SKILL.md +54 -54
  1052. package/skills/theme-factory/LICENSE +21 -21
  1053. package/skills/theme-factory/SKILL.md +65 -65
  1054. package/skills/theme-factory/themes/arctic-frost.md +19 -19
  1055. package/skills/theme-factory/themes/botanical-garden.md +19 -19
  1056. package/skills/theme-factory/themes/desert-rose.md +19 -19
  1057. package/skills/theme-factory/themes/forest-canopy.md +19 -19
  1058. package/skills/theme-factory/themes/golden-hour.md +19 -19
  1059. package/skills/theme-factory/themes/midnight-galaxy.md +19 -19
  1060. package/skills/theme-factory/themes/modern-minimalist.md +19 -19
  1061. package/skills/theme-factory/themes/ocean-depths.md +19 -19
  1062. package/skills/theme-factory/themes/sunset-boulevard.md +19 -19
  1063. package/skills/theme-factory/themes/tech-innovation.md +19 -19
  1064. package/skills/things-mac/SKILL.md +90 -90
  1065. package/skills/tmux/SKILL.md +95 -95
  1066. package/skills/tmux/scripts/find-sessions.sh +112 -112
  1067. package/skills/tmux/scripts/wait-for-text.sh +83 -83
  1068. package/skills/trades/trades-agriculture/LICENSE +21 -21
  1069. package/skills/trades/trades-agriculture/SKILL.md +80 -80
  1070. package/skills/trades/trades-automotive/LICENSE +21 -21
  1071. package/skills/trades/trades-automotive/SKILL.md +84 -84
  1072. package/skills/trades/trades-carpentry/LICENSE +21 -21
  1073. package/skills/trades/trades-carpentry/SKILL.md +71 -71
  1074. package/skills/trades/trades-cooking-pro/LICENSE +21 -21
  1075. package/skills/trades/trades-cooking-pro/SKILL.md +90 -90
  1076. package/skills/trades/trades-electrical/LICENSE +21 -21
  1077. package/skills/trades/trades-electrical/SKILL.md +146 -146
  1078. package/skills/trades/trades-hvac/LICENSE +21 -21
  1079. package/skills/trades/trades-hvac/SKILL.md +80 -80
  1080. package/skills/trades/trades-landscaping/LICENSE +21 -21
  1081. package/skills/trades/trades-landscaping/SKILL.md +60 -60
  1082. package/skills/trades/trades-metalworking/LICENSE +21 -21
  1083. package/skills/trades/trades-metalworking/SKILL.md +64 -64
  1084. package/skills/trades/trades-painting/LICENSE +21 -21
  1085. package/skills/trades/trades-painting/SKILL.md +70 -70
  1086. package/skills/trades/trades-plumbing/LICENSE +21 -21
  1087. package/skills/trades/trades-plumbing/SKILL.md +160 -160
  1088. package/skills/trades/trades-welding/LICENSE +21 -21
  1089. package/skills/trades/trades-welding/SKILL.md +82 -82
  1090. package/skills/trello/SKILL.md +112 -112
  1091. package/skills/uipm-ui-styling/SKILL.md +328 -328
  1092. package/skills/video-frames/SKILL.md +50 -50
  1093. package/skills/video-frames/scripts/frame.sh +81 -81
  1094. package/skills/voice-call/SKILL.md +49 -49
  1095. package/skills/wacli/SKILL.md +76 -76
  1096. package/skills/weather/SKILL.md +91 -91
  1097. package/skills/web-artifacts-builder/LICENSE +21 -21
  1098. package/skills/web-artifacts-builder/SKILL.md +82 -82
  1099. package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +53 -53
  1100. package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -322
  1101. package/skills/xurl/SKILL.md +124 -124
  1102. package/skills/graphify/SKILL.md +0 -619
  1103. package/skills/graphify/__init__.py +0 -28
  1104. package/skills/graphify/__main__.py +0 -4582
  1105. package/skills/graphify/affected.py +0 -154
  1106. package/skills/graphify/always_on/agents-md.md +0 -12
  1107. package/skills/graphify/always_on/antigravity-rules.md +0 -14
  1108. package/skills/graphify/always_on/claude-md.md +0 -9
  1109. package/skills/graphify/always_on/gemini-md.md +0 -9
  1110. package/skills/graphify/always_on/kiro-steering.md +0 -5
  1111. package/skills/graphify/always_on/vscode-instructions.md +0 -17
  1112. package/skills/graphify/analyze.py +0 -724
  1113. package/skills/graphify/benchmark.py +0 -155
  1114. package/skills/graphify/build.py +0 -487
  1115. package/skills/graphify/cache.py +0 -417
  1116. package/skills/graphify/callflow_html.py +0 -2020
  1117. package/skills/graphify/cluster.py +0 -272
  1118. package/skills/graphify/command-kilo.md +0 -15
  1119. package/skills/graphify/dedup.py +0 -429
  1120. package/skills/graphify/detect.py +0 -1379
  1121. package/skills/graphify/diagnostics.py +0 -390
  1122. package/skills/graphify/export.py +0 -1408
  1123. package/skills/graphify/extract.py +0 -11570
  1124. package/skills/graphify/global_graph.py +0 -159
  1125. package/skills/graphify/google_workspace.py +0 -223
  1126. package/skills/graphify/hooks.py +0 -457
  1127. package/skills/graphify/ingest.py +0 -331
  1128. package/skills/graphify/llm.py +0 -1896
  1129. package/skills/graphify/manifest.py +0 -4
  1130. package/skills/graphify/mcp_ingest.py +0 -392
  1131. package/skills/graphify/multigraph_compat.py +0 -212
  1132. package/skills/graphify/pg_introspect.py +0 -142
  1133. package/skills/graphify/prs.py +0 -748
  1134. package/skills/graphify/querylog.py +0 -70
  1135. package/skills/graphify/report.py +0 -218
  1136. package/skills/graphify/scip_ingest.py +0 -363
  1137. package/skills/graphify/security.py +0 -336
  1138. package/skills/graphify/semantic_cleanup.py +0 -319
  1139. package/skills/graphify/serve.py +0 -1309
  1140. package/skills/graphify/skill-aider.md +0 -1246
  1141. package/skills/graphify/skill-amp.md +0 -613
  1142. package/skills/graphify/skill-claw.md +0 -616
  1143. package/skills/graphify/skill-codex.md +0 -613
  1144. package/skills/graphify/skill-copilot.md +0 -616
  1145. package/skills/graphify/skill-devin.md +0 -1372
  1146. package/skills/graphify/skill-droid.md +0 -613
  1147. package/skills/graphify/skill-kilo.md +0 -625
  1148. package/skills/graphify/skill-kiro.md +0 -615
  1149. package/skills/graphify/skill-opencode.md +0 -608
  1150. package/skills/graphify/skill-pi.md +0 -615
  1151. package/skills/graphify/skill-trae.md +0 -614
  1152. package/skills/graphify/skill-vscode.md +0 -612
  1153. package/skills/graphify/skill-windows.md +0 -651
  1154. package/skills/graphify/skills/amp/references/add-watch.md +0 -56
  1155. package/skills/graphify/skills/amp/references/exports.md +0 -71
  1156. package/skills/graphify/skills/amp/references/extraction-spec.md +0 -68
  1157. package/skills/graphify/skills/amp/references/github-and-merge.md +0 -46
  1158. package/skills/graphify/skills/amp/references/hooks.md +0 -33
  1159. package/skills/graphify/skills/amp/references/query.md +0 -249
  1160. package/skills/graphify/skills/amp/references/transcribe.md +0 -48
  1161. package/skills/graphify/skills/amp/references/update.md +0 -179
  1162. package/skills/graphify/skills/claude/references/add-watch.md +0 -56
  1163. package/skills/graphify/skills/claude/references/exports.md +0 -71
  1164. package/skills/graphify/skills/claude/references/extraction-spec.md +0 -68
  1165. package/skills/graphify/skills/claude/references/github-and-merge.md +0 -46
  1166. package/skills/graphify/skills/claude/references/hooks.md +0 -33
  1167. package/skills/graphify/skills/claude/references/query.md +0 -103
  1168. package/skills/graphify/skills/claude/references/transcribe.md +0 -48
  1169. package/skills/graphify/skills/claude/references/update.md +0 -179
  1170. package/skills/graphify/skills/claw/references/add-watch.md +0 -56
  1171. package/skills/graphify/skills/claw/references/exports.md +0 -71
  1172. package/skills/graphify/skills/claw/references/extraction-spec.md +0 -29
  1173. package/skills/graphify/skills/claw/references/github-and-merge.md +0 -46
  1174. package/skills/graphify/skills/claw/references/hooks.md +0 -33
  1175. package/skills/graphify/skills/claw/references/query.md +0 -249
  1176. package/skills/graphify/skills/claw/references/transcribe.md +0 -48
  1177. package/skills/graphify/skills/claw/references/update.md +0 -179
  1178. package/skills/graphify/skills/codex/references/add-watch.md +0 -56
  1179. package/skills/graphify/skills/codex/references/exports.md +0 -71
  1180. package/skills/graphify/skills/codex/references/extraction-spec.md +0 -29
  1181. package/skills/graphify/skills/codex/references/github-and-merge.md +0 -46
  1182. package/skills/graphify/skills/codex/references/hooks.md +0 -33
  1183. package/skills/graphify/skills/codex/references/query.md +0 -249
  1184. package/skills/graphify/skills/codex/references/transcribe.md +0 -48
  1185. package/skills/graphify/skills/codex/references/update.md +0 -179
  1186. package/skills/graphify/skills/copilot/references/add-watch.md +0 -56
  1187. package/skills/graphify/skills/copilot/references/exports.md +0 -71
  1188. package/skills/graphify/skills/copilot/references/extraction-spec.md +0 -68
  1189. package/skills/graphify/skills/copilot/references/github-and-merge.md +0 -46
  1190. package/skills/graphify/skills/copilot/references/hooks.md +0 -33
  1191. package/skills/graphify/skills/copilot/references/query.md +0 -249
  1192. package/skills/graphify/skills/copilot/references/transcribe.md +0 -48
  1193. package/skills/graphify/skills/copilot/references/update.md +0 -179
  1194. package/skills/graphify/skills/droid/references/add-watch.md +0 -56
  1195. package/skills/graphify/skills/droid/references/exports.md +0 -71
  1196. package/skills/graphify/skills/droid/references/extraction-spec.md +0 -68
  1197. package/skills/graphify/skills/droid/references/github-and-merge.md +0 -46
  1198. package/skills/graphify/skills/droid/references/hooks.md +0 -33
  1199. package/skills/graphify/skills/droid/references/query.md +0 -249
  1200. package/skills/graphify/skills/droid/references/transcribe.md +0 -48
  1201. package/skills/graphify/skills/droid/references/update.md +0 -179
  1202. package/skills/graphify/skills/kilo/references/add-watch.md +0 -56
  1203. package/skills/graphify/skills/kilo/references/exports.md +0 -71
  1204. package/skills/graphify/skills/kilo/references/extraction-spec.md +0 -68
  1205. package/skills/graphify/skills/kilo/references/github-and-merge.md +0 -46
  1206. package/skills/graphify/skills/kilo/references/hooks.md +0 -33
  1207. package/skills/graphify/skills/kilo/references/query.md +0 -249
  1208. package/skills/graphify/skills/kilo/references/transcribe.md +0 -48
  1209. package/skills/graphify/skills/kilo/references/update.md +0 -179
  1210. package/skills/graphify/skills/kiro/references/add-watch.md +0 -56
  1211. package/skills/graphify/skills/kiro/references/exports.md +0 -71
  1212. package/skills/graphify/skills/kiro/references/extraction-spec.md +0 -29
  1213. package/skills/graphify/skills/kiro/references/github-and-merge.md +0 -46
  1214. package/skills/graphify/skills/kiro/references/hooks.md +0 -33
  1215. package/skills/graphify/skills/kiro/references/query.md +0 -249
  1216. package/skills/graphify/skills/kiro/references/transcribe.md +0 -48
  1217. package/skills/graphify/skills/kiro/references/update.md +0 -179
  1218. package/skills/graphify/skills/opencode/references/add-watch.md +0 -56
  1219. package/skills/graphify/skills/opencode/references/exports.md +0 -71
  1220. package/skills/graphify/skills/opencode/references/extraction-spec.md +0 -68
  1221. package/skills/graphify/skills/opencode/references/github-and-merge.md +0 -46
  1222. package/skills/graphify/skills/opencode/references/hooks.md +0 -33
  1223. package/skills/graphify/skills/opencode/references/query.md +0 -249
  1224. package/skills/graphify/skills/opencode/references/transcribe.md +0 -48
  1225. package/skills/graphify/skills/opencode/references/update.md +0 -179
  1226. package/skills/graphify/skills/pi/references/add-watch.md +0 -56
  1227. package/skills/graphify/skills/pi/references/exports.md +0 -71
  1228. package/skills/graphify/skills/pi/references/extraction-spec.md +0 -29
  1229. package/skills/graphify/skills/pi/references/github-and-merge.md +0 -46
  1230. package/skills/graphify/skills/pi/references/hooks.md +0 -33
  1231. package/skills/graphify/skills/pi/references/query.md +0 -249
  1232. package/skills/graphify/skills/pi/references/transcribe.md +0 -48
  1233. package/skills/graphify/skills/pi/references/update.md +0 -179
  1234. package/skills/graphify/skills/trae/references/add-watch.md +0 -56
  1235. package/skills/graphify/skills/trae/references/exports.md +0 -71
  1236. package/skills/graphify/skills/trae/references/extraction-spec.md +0 -68
  1237. package/skills/graphify/skills/trae/references/github-and-merge.md +0 -46
  1238. package/skills/graphify/skills/trae/references/hooks.md +0 -35
  1239. package/skills/graphify/skills/trae/references/query.md +0 -249
  1240. package/skills/graphify/skills/trae/references/transcribe.md +0 -48
  1241. package/skills/graphify/skills/trae/references/update.md +0 -179
  1242. package/skills/graphify/skills/vscode/references/add-watch.md +0 -56
  1243. package/skills/graphify/skills/vscode/references/exports.md +0 -71
  1244. package/skills/graphify/skills/vscode/references/extraction-spec.md +0 -68
  1245. package/skills/graphify/skills/vscode/references/github-and-merge.md +0 -46
  1246. package/skills/graphify/skills/vscode/references/hooks.md +0 -33
  1247. package/skills/graphify/skills/vscode/references/query.md +0 -249
  1248. package/skills/graphify/skills/vscode/references/transcribe.md +0 -48
  1249. package/skills/graphify/skills/vscode/references/update.md +0 -179
  1250. package/skills/graphify/skills/windows/references/add-watch.md +0 -56
  1251. package/skills/graphify/skills/windows/references/exports.md +0 -71
  1252. package/skills/graphify/skills/windows/references/extraction-spec.md +0 -68
  1253. package/skills/graphify/skills/windows/references/github-and-merge.md +0 -46
  1254. package/skills/graphify/skills/windows/references/hooks.md +0 -33
  1255. package/skills/graphify/skills/windows/references/query.md +0 -249
  1256. package/skills/graphify/skills/windows/references/transcribe.md +0 -48
  1257. package/skills/graphify/skills/windows/references/update.md +0 -179
  1258. package/skills/graphify/symbol_resolution.py +0 -538
  1259. package/skills/graphify/transcribe.py +0 -184
  1260. package/skills/graphify/tree_html.py +0 -582
  1261. package/skills/graphify/validate.py +0 -72
  1262. package/skills/graphify/watch.py +0 -898
  1263. package/skills/graphify/wiki.py +0 -282
@@ -1,980 +1,980 @@
1
- # Node/TypeScript MCP Server Implementation Guide
2
-
3
- ## Overview
4
-
5
- This document provides Node/TypeScript-specific best practices and examples for implementing MCP servers using the MCP TypeScript SDK. It covers project structure, server setup, tool registration patterns, input validation with Zod, error handling, and complete working examples.
6
-
7
- ---
8
-
9
- ## Quick Reference
10
-
11
- ### Key Imports
12
-
13
- ```typescript
14
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
15
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
16
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
17
- import express from "express";
18
- import { z } from "zod";
19
- ```
20
-
21
- ### Server Initialization
22
-
23
- ```typescript
24
- const server = new McpServer({
25
- name: "service-mcp-server",
26
- version: "1.0.0",
27
- });
28
- ```
29
-
30
- ### Tool Registration Pattern
31
-
32
- ```typescript
33
- server.registerTool(
34
- "tool_name",
35
- {
36
- title: "Tool Display Name",
37
- description: "What the tool does",
38
- inputSchema: { param: z.string() },
39
- outputSchema: { result: z.string() },
40
- },
41
- async ({ param }) => {
42
- const output = { result: `Processed: ${param}` };
43
- return {
44
- content: [{ type: "text", text: JSON.stringify(output) }],
45
- structuredContent: output, // Modern pattern for structured data
46
- };
47
- },
48
- );
49
- ```
50
-
51
- ---
52
-
53
- ## MCP TypeScript SDK
54
-
55
- The official MCP TypeScript SDK provides:
56
-
57
- - `McpServer` class for server initialization
58
- - `registerTool` method for tool registration
59
- - Zod schema integration for runtime input validation
60
- - Type-safe tool handler implementations
61
-
62
- **IMPORTANT - Use Modern APIs Only:**
63
-
64
- - **DO use**: `server.registerTool()`, `server.registerResource()`, `server.registerPrompt()`
65
- - **DO NOT use**: Old deprecated APIs such as `server.tool()`, `server.setRequestHandler(ListToolsRequestSchema, ...)`, or manual handler registration
66
- - The `register*` methods provide better type safety, automatic schema handling, and are the recommended approach
67
-
68
- See the MCP SDK documentation in the references for complete details.
69
-
70
- ## Server Naming Convention
71
-
72
- Node/TypeScript MCP servers must follow this naming pattern:
73
-
74
- - **Format**: `{service}-mcp-server` (lowercase with hyphens)
75
- - **Examples**: `github-mcp-server`, `jira-mcp-server`, `stripe-mcp-server`
76
-
77
- The name should be:
78
-
79
- - General (not tied to specific features)
80
- - Descriptive of the service/API being integrated
81
- - Easy to infer from the task description
82
- - Without version numbers or dates
83
-
84
- ## Project Structure
85
-
86
- Create the following structure for Node/TypeScript MCP servers:
87
-
88
- ```
89
- {service}-mcp-server/
90
- ├── package.json
91
- ├── tsconfig.json
92
- ├── README.md
93
- ├── src/
94
- │ ├── index.ts # Main entry point with McpServer initialization
95
- │ ├── types.ts # TypeScript type definitions and interfaces
96
- │ ├── tools/ # Tool implementations (one file per domain)
97
- │ ├── services/ # API clients and shared utilities
98
- │ ├── schemas/ # Zod validation schemas
99
- │ └── constants.ts # Shared constants (API_URL, CHARACTER_LIMIT, etc.)
100
- └── dist/ # Built JavaScript files (entry point: dist/index.js)
101
- ```
102
-
103
- ## Tool Implementation
104
-
105
- ### Tool Naming
106
-
107
- Use snake_case for tool names (e.g., "search_users", "create_project", "get_channel_info") with clear, action-oriented names.
108
-
109
- **Avoid Naming Conflicts**: Include the service context to prevent overlaps:
110
-
111
- - Use "slack_send_message" instead of just "send_message"
112
- - Use "github_create_issue" instead of just "create_issue"
113
- - Use "asana_list_tasks" instead of just "list_tasks"
114
-
115
- ### Tool Structure
116
-
117
- Tools are registered using the `registerTool` method with the following requirements:
118
-
119
- - Use Zod schemas for runtime input validation and type safety
120
- - The `description` field must be explicitly provided - JSDoc comments are NOT automatically extracted
121
- - Explicitly provide `title`, `description`, `inputSchema`, and `annotations`
122
- - The `inputSchema` must be a Zod schema object (not a JSON schema)
123
- - Type all parameters and return values explicitly
124
-
125
- ```typescript
126
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
127
- import { z } from "zod";
128
-
129
- const server = new McpServer({
130
- name: "example-mcp",
131
- version: "1.0.0",
132
- });
133
-
134
- // Zod schema for input validation
135
- const UserSearchInputSchema = z
136
- .object({
137
- query: z
138
- .string()
139
- .min(2, "Query must be at least 2 characters")
140
- .max(200, "Query must not exceed 200 characters")
141
- .describe("Search string to match against names/emails"),
142
- limit: z.number().int().min(1).max(100).default(20).describe("Maximum results to return"),
143
- offset: z.number().int().min(0).default(0).describe("Number of results to skip for pagination"),
144
- response_format: z
145
- .nativeEnum(ResponseFormat)
146
- .default(ResponseFormat.MARKDOWN)
147
- .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
148
- })
149
- .strict();
150
-
151
- // Type definition from Zod schema
152
- type UserSearchInput = z.infer<typeof UserSearchInputSchema>;
153
-
154
- server.registerTool(
155
- "example_search_users",
156
- {
157
- title: "Search Example Users",
158
- description: `Search for users in the Example system by name, email, or team.
159
-
160
- This tool searches across all user profiles in the Example platform, supporting partial matches and various search filters. It does NOT create or modify users, only searches existing ones.
161
-
162
- Args:
163
- - query (string): Search string to match against names/emails
164
- - limit (number): Maximum results to return, between 1-100 (default: 20)
165
- - offset (number): Number of results to skip for pagination (default: 0)
166
- - response_format ('markdown' | 'json'): Output format (default: 'markdown')
167
-
168
- Returns:
169
- For JSON format: Structured data with schema:
170
- {
171
- "total": number, // Total number of matches found
172
- "count": number, // Number of results in this response
173
- "offset": number, // Current pagination offset
174
- "users": [
175
- {
176
- "id": string, // User ID (e.g., "U123456789")
177
- "name": string, // Full name (e.g., "John Doe")
178
- "email": string, // Email address
179
- "team": string, // Team name (optional)
180
- "active": boolean // Whether user is active
181
- }
182
- ],
183
- "has_more": boolean, // Whether more results are available
184
- "next_offset": number // Offset for next page (if has_more is true)
185
- }
186
-
187
- Examples:
188
- - Use when: "Find all marketing team members" -> params with query="team:marketing"
189
- - Use when: "Search for John's account" -> params with query="john"
190
- - Don't use when: You need to create a user (use example_create_user instead)
191
-
192
- Error Handling:
193
- - Returns "Error: Rate limit exceeded" if too many requests (429 status)
194
- - Returns "No users found matching '<query>'" if search returns empty`,
195
- inputSchema: UserSearchInputSchema,
196
- annotations: {
197
- readOnlyHint: true,
198
- destructiveHint: false,
199
- idempotentHint: true,
200
- openWorldHint: true,
201
- },
202
- },
203
- async (params: UserSearchInput) => {
204
- try {
205
- // Input validation is handled by Zod schema
206
- // Make API request using validated parameters
207
- const data = await makeApiRequest<any>("users/search", "GET", undefined, {
208
- q: params.query,
209
- limit: params.limit,
210
- offset: params.offset,
211
- });
212
-
213
- const users = data.users || [];
214
- const total = data.total || 0;
215
-
216
- if (!users.length) {
217
- return {
218
- content: [
219
- {
220
- type: "text",
221
- text: `No users found matching '${params.query}'`,
222
- },
223
- ],
224
- };
225
- }
226
-
227
- // Prepare structured output
228
- const output = {
229
- total,
230
- count: users.length,
231
- offset: params.offset,
232
- users: users.map((user: any) => ({
233
- id: user.id,
234
- name: user.name,
235
- email: user.email,
236
- ...(user.team ? { team: user.team } : {}),
237
- active: user.active ?? true,
238
- })),
239
- has_more: total > params.offset + users.length,
240
- ...(total > params.offset + users.length
241
- ? {
242
- next_offset: params.offset + users.length,
243
- }
244
- : {}),
245
- };
246
-
247
- // Format text representation based on requested format
248
- let textContent: string;
249
- if (params.response_format === ResponseFormat.MARKDOWN) {
250
- const lines = [
251
- `# User Search Results: '${params.query}'`,
252
- "",
253
- `Found ${total} users (showing ${users.length})`,
254
- "",
255
- ];
256
- for (const user of users) {
257
- lines.push(`## ${user.name} (${user.id})`);
258
- lines.push(`- **Email**: ${user.email}`);
259
- if (user.team) lines.push(`- **Team**: ${user.team}`);
260
- lines.push("");
261
- }
262
- textContent = lines.join("\n");
263
- } else {
264
- textContent = JSON.stringify(output, null, 2);
265
- }
266
-
267
- return {
268
- content: [{ type: "text", text: textContent }],
269
- structuredContent: output, // Modern pattern for structured data
270
- };
271
- } catch (error) {
272
- return {
273
- content: [
274
- {
275
- type: "text",
276
- text: handleApiError(error),
277
- },
278
- ],
279
- };
280
- }
281
- },
282
- );
283
- ```
284
-
285
- ## Zod Schemas for Input Validation
286
-
287
- Zod provides runtime type validation:
288
-
289
- ```typescript
290
- import { z } from "zod";
291
-
292
- // Basic schema with validation
293
- const CreateUserSchema = z
294
- .object({
295
- name: z.string().min(1, "Name is required").max(100, "Name must not exceed 100 characters"),
296
- email: z.string().email("Invalid email format"),
297
- age: z
298
- .number()
299
- .int("Age must be a whole number")
300
- .min(0, "Age cannot be negative")
301
- .max(150, "Age cannot be greater than 150"),
302
- })
303
- .strict(); // Use .strict() to forbid extra fields
304
-
305
- // Enums
306
- enum ResponseFormat {
307
- MARKDOWN = "markdown",
308
- JSON = "json",
309
- }
310
-
311
- const SearchSchema = z.object({
312
- response_format: z
313
- .nativeEnum(ResponseFormat)
314
- .default(ResponseFormat.MARKDOWN)
315
- .describe("Output format"),
316
- });
317
-
318
- // Optional fields with defaults
319
- const PaginationSchema = z.object({
320
- limit: z.number().int().min(1).max(100).default(20).describe("Maximum results to return"),
321
- offset: z.number().int().min(0).default(0).describe("Number of results to skip"),
322
- });
323
- ```
324
-
325
- ## Response Format Options
326
-
327
- Support multiple output formats for flexibility:
328
-
329
- ```typescript
330
- enum ResponseFormat {
331
- MARKDOWN = "markdown",
332
- JSON = "json",
333
- }
334
-
335
- const inputSchema = z.object({
336
- query: z.string(),
337
- response_format: z
338
- .nativeEnum(ResponseFormat)
339
- .default(ResponseFormat.MARKDOWN)
340
- .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
341
- });
342
- ```
343
-
344
- **Markdown format**:
345
-
346
- - Use headers, lists, and formatting for clarity
347
- - Convert timestamps to human-readable format
348
- - Show display names with IDs in parentheses
349
- - Omit verbose metadata
350
- - Group related information logically
351
-
352
- **JSON format**:
353
-
354
- - Return complete, structured data suitable for programmatic processing
355
- - Include all available fields and metadata
356
- - Use consistent field names and types
357
-
358
- ## Pagination Implementation
359
-
360
- For tools that list resources:
361
-
362
- ```typescript
363
- const ListSchema = z.object({
364
- limit: z.number().int().min(1).max(100).default(20),
365
- offset: z.number().int().min(0).default(0),
366
- });
367
-
368
- async function listItems(params: z.infer<typeof ListSchema>) {
369
- const data = await apiRequest(params.limit, params.offset);
370
-
371
- const response = {
372
- total: data.total,
373
- count: data.items.length,
374
- offset: params.offset,
375
- items: data.items,
376
- has_more: data.total > params.offset + data.items.length,
377
- next_offset:
378
- data.total > params.offset + data.items.length
379
- ? params.offset + data.items.length
380
- : undefined,
381
- };
382
-
383
- return JSON.stringify(response, null, 2);
384
- }
385
- ```
386
-
387
- ## Character Limits and Truncation
388
-
389
- Add a CHARACTER_LIMIT constant to prevent overwhelming responses:
390
-
391
- ```typescript
392
- // At module level in constants.ts
393
- export const CHARACTER_LIMIT = 25000; // Maximum response size in characters
394
-
395
- async function searchTool(params: SearchInput) {
396
- let result = generateResponse(data);
397
-
398
- // Check character limit and truncate if needed
399
- if (result.length > CHARACTER_LIMIT) {
400
- const truncatedData = data.slice(0, Math.max(1, data.length / 2));
401
- response.data = truncatedData;
402
- response.truncated = true;
403
- response.truncation_message =
404
- `Response truncated from ${data.length} to ${truncatedData.length} items. ` +
405
- `Use 'offset' parameter or add filters to see more results.`;
406
- result = JSON.stringify(response, null, 2);
407
- }
408
-
409
- return result;
410
- }
411
- ```
412
-
413
- ## Error Handling
414
-
415
- Provide clear, actionable error messages:
416
-
417
- ```typescript
418
- import axios, { AxiosError } from "axios";
419
-
420
- function handleApiError(error: unknown): string {
421
- if (error instanceof AxiosError) {
422
- if (error.response) {
423
- switch (error.response.status) {
424
- case 404:
425
- return "Error: Resource not found. Please check the ID is correct.";
426
- case 403:
427
- return "Error: Permission denied. You don't have access to this resource.";
428
- case 429:
429
- return "Error: Rate limit exceeded. Please wait before making more requests.";
430
- default:
431
- return `Error: API request failed with status ${error.response.status}`;
432
- }
433
- } else if (error.code === "ECONNABORTED") {
434
- return "Error: Request timed out. Please try again.";
435
- }
436
- }
437
- return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
438
- }
439
- ```
440
-
441
- ## Shared Utilities
442
-
443
- Extract common functionality into reusable functions:
444
-
445
- ```typescript
446
- // Shared API request function
447
- async function makeApiRequest<T>(
448
- endpoint: string,
449
- method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
450
- data?: any,
451
- params?: any,
452
- ): Promise<T> {
453
- try {
454
- const response = await axios({
455
- method,
456
- url: `${API_BASE_URL}/${endpoint}`,
457
- data,
458
- params,
459
- timeout: 30000,
460
- headers: {
461
- "Content-Type": "application/json",
462
- Accept: "application/json",
463
- },
464
- });
465
- return response.data;
466
- } catch (error) {
467
- throw error;
468
- }
469
- }
470
- ```
471
-
472
- ## Async/Await Best Practices
473
-
474
- Always use async/await for network requests and I/O operations:
475
-
476
- ```typescript
477
- // Good: Async network request
478
- async function fetchData(resourceId: string): Promise<ResourceData> {
479
- const response = await axios.get(`${API_URL}/resource/${resourceId}`);
480
- return response.data;
481
- }
482
-
483
- // Bad: Promise chains
484
- function fetchData(resourceId: string): Promise<ResourceData> {
485
- return axios.get(`${API_URL}/resource/${resourceId}`).then((response) => response.data); // Harder to read and maintain
486
- }
487
- ```
488
-
489
- ## TypeScript Best Practices
490
-
491
- 1. **Use Strict TypeScript**: Enable strict mode in tsconfig.json
492
- 2. **Define Interfaces**: Create clear interface definitions for all data structures
493
- 3. **Avoid `any`**: Use proper types or `unknown` instead of `any`
494
- 4. **Zod for Runtime Validation**: Use Zod schemas to validate external data
495
- 5. **Type Guards**: Create type guard functions for complex type checking
496
- 6. **Error Handling**: Always use try-catch with proper error type checking
497
- 7. **Null Safety**: Use optional chaining (`?.`) and nullish coalescing (`??`)
498
-
499
- ```typescript
500
- // Good: Type-safe with Zod and interfaces
501
- interface UserResponse {
502
- id: string;
503
- name: string;
504
- email: string;
505
- team?: string;
506
- active: boolean;
507
- }
508
-
509
- const UserSchema = z.object({
510
- id: z.string(),
511
- name: z.string(),
512
- email: z.string().email(),
513
- team: z.string().optional(),
514
- active: z.boolean(),
515
- });
516
-
517
- type User = z.infer<typeof UserSchema>;
518
-
519
- async function getUser(id: string): Promise<User> {
520
- const data = await apiCall(`/users/${id}`);
521
- return UserSchema.parse(data); // Runtime validation
522
- }
523
-
524
- // Bad: Using any
525
- async function getUser(id: string): Promise<any> {
526
- return await apiCall(`/users/${id}`); // No type safety
527
- }
528
- ```
529
-
530
- ## Package Configuration
531
-
532
- ### package.json
533
-
534
- ```json
535
- {
536
- "name": "{service}-mcp-server",
537
- "version": "1.0.0",
538
- "description": "MCP server for {Service} API integration",
539
- "type": "module",
540
- "main": "dist/index.js",
541
- "scripts": {
542
- "start": "node dist/index.js",
543
- "dev": "tsx watch src/index.ts",
544
- "build": "tsc",
545
- "clean": "rm -rf dist"
546
- },
547
- "engines": {
548
- "node": ">=18"
549
- },
550
- "dependencies": {
551
- "@modelcontextprotocol/sdk": "^1.6.1",
552
- "axios": "^1.7.9",
553
- "zod": "^3.23.8"
554
- },
555
- "devDependencies": {
556
- "@types/node": "^22.10.0",
557
- "tsx": "^4.19.2",
558
- "typescript": "^5.7.2"
559
- }
560
- }
561
- ```
562
-
563
- ### tsconfig.json
564
-
565
- ```json
566
- {
567
- "compilerOptions": {
568
- "target": "ES2022",
569
- "module": "Node16",
570
- "moduleResolution": "Node16",
571
- "lib": ["ES2022"],
572
- "outDir": "./dist",
573
- "rootDir": "./src",
574
- "strict": true,
575
- "esModuleInterop": true,
576
- "skipLibCheck": true,
577
- "forceConsistentCasingInFileNames": true,
578
- "declaration": true,
579
- "declarationMap": true,
580
- "sourceMap": true,
581
- "allowSyntheticDefaultImports": true
582
- },
583
- "include": ["src/**/*"],
584
- "exclude": ["node_modules", "dist"]
585
- }
586
- ```
587
-
588
- ## Complete Example
589
-
590
- ```typescript
591
- #!/usr/bin/env node
592
- /**
593
- * MCP Server for Example Service.
594
- *
595
- * This server provides tools to interact with Example API, including user search,
596
- * project management, and data export capabilities.
597
- */
598
-
599
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
600
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
601
- import { z } from "zod";
602
- import axios, { AxiosError } from "axios";
603
-
604
- // Constants
605
- const API_BASE_URL = "https://api.example.com/v1";
606
- const CHARACTER_LIMIT = 25000;
607
-
608
- // Enums
609
- enum ResponseFormat {
610
- MARKDOWN = "markdown",
611
- JSON = "json",
612
- }
613
-
614
- // Zod schemas
615
- const UserSearchInputSchema = z
616
- .object({
617
- query: z
618
- .string()
619
- .min(2, "Query must be at least 2 characters")
620
- .max(200, "Query must not exceed 200 characters")
621
- .describe("Search string to match against names/emails"),
622
- limit: z.number().int().min(1).max(100).default(20).describe("Maximum results to return"),
623
- offset: z.number().int().min(0).default(0).describe("Number of results to skip for pagination"),
624
- response_format: z
625
- .nativeEnum(ResponseFormat)
626
- .default(ResponseFormat.MARKDOWN)
627
- .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
628
- })
629
- .strict();
630
-
631
- type UserSearchInput = z.infer<typeof UserSearchInputSchema>;
632
-
633
- // Shared utility functions
634
- async function makeApiRequest<T>(
635
- endpoint: string,
636
- method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
637
- data?: any,
638
- params?: any,
639
- ): Promise<T> {
640
- try {
641
- const response = await axios({
642
- method,
643
- url: `${API_BASE_URL}/${endpoint}`,
644
- data,
645
- params,
646
- timeout: 30000,
647
- headers: {
648
- "Content-Type": "application/json",
649
- Accept: "application/json",
650
- },
651
- });
652
- return response.data;
653
- } catch (error) {
654
- throw error;
655
- }
656
- }
657
-
658
- function handleApiError(error: unknown): string {
659
- if (error instanceof AxiosError) {
660
- if (error.response) {
661
- switch (error.response.status) {
662
- case 404:
663
- return "Error: Resource not found. Please check the ID is correct.";
664
- case 403:
665
- return "Error: Permission denied. You don't have access to this resource.";
666
- case 429:
667
- return "Error: Rate limit exceeded. Please wait before making more requests.";
668
- default:
669
- return `Error: API request failed with status ${error.response.status}`;
670
- }
671
- } else if (error.code === "ECONNABORTED") {
672
- return "Error: Request timed out. Please try again.";
673
- }
674
- }
675
- return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
676
- }
677
-
678
- // Create MCP server instance
679
- const server = new McpServer({
680
- name: "example-mcp",
681
- version: "1.0.0",
682
- });
683
-
684
- // Register tools
685
- server.registerTool(
686
- "example_search_users",
687
- {
688
- title: "Search Example Users",
689
- description: `[Full description as shown above]`,
690
- inputSchema: UserSearchInputSchema,
691
- annotations: {
692
- readOnlyHint: true,
693
- destructiveHint: false,
694
- idempotentHint: true,
695
- openWorldHint: true,
696
- },
697
- },
698
- async (params: UserSearchInput) => {
699
- // Implementation as shown above
700
- },
701
- );
702
-
703
- // Main function
704
- // For stdio (local):
705
- async function runStdio() {
706
- if (!process.env.EXAMPLE_API_KEY) {
707
- console.error("ERROR: EXAMPLE_API_KEY environment variable is required");
708
- process.exit(1);
709
- }
710
-
711
- const transport = new StdioServerTransport();
712
- await server.connect(transport);
713
- console.error("MCP server running via stdio");
714
- }
715
-
716
- // For streamable HTTP (remote):
717
- async function runHTTP() {
718
- if (!process.env.EXAMPLE_API_KEY) {
719
- console.error("ERROR: EXAMPLE_API_KEY environment variable is required");
720
- process.exit(1);
721
- }
722
-
723
- const app = express();
724
- app.use(express.json());
725
-
726
- app.post("/mcp", async (req, res) => {
727
- const transport = new StreamableHTTPServerTransport({
728
- sessionIdGenerator: undefined,
729
- enableJsonResponse: true,
730
- });
731
- res.on("close", () => transport.close());
732
- await server.connect(transport);
733
- await transport.handleRequest(req, res, req.body);
734
- });
735
-
736
- const port = parseInt(process.env.PORT || "3000");
737
- app.listen(port, () => {
738
- console.error(`MCP server running on http://localhost:${port}/mcp`);
739
- });
740
- }
741
-
742
- // Choose transport based on environment
743
- const transport = process.env.TRANSPORT || "stdio";
744
- if (transport === "http") {
745
- runHTTP().catch((error) => {
746
- console.error("Server error:", error);
747
- process.exit(1);
748
- });
749
- } else {
750
- runStdio().catch((error) => {
751
- console.error("Server error:", error);
752
- process.exit(1);
753
- });
754
- }
755
- ```
756
-
757
- ---
758
-
759
- ## Advanced MCP Features
760
-
761
- ### Resource Registration
762
-
763
- Expose data as resources for efficient, URI-based access:
764
-
765
- ```typescript
766
- import { ResourceTemplate } from "@modelcontextprotocol/sdk/types.js";
767
-
768
- // Register a resource with URI template
769
- server.registerResource(
770
- {
771
- uri: "file://documents/{name}",
772
- name: "Document Resource",
773
- description: "Access documents by name",
774
- mimeType: "text/plain",
775
- },
776
- async (uri: string) => {
777
- // Extract parameter from URI
778
- const match = uri.match(/^file:\/\/documents\/(.+)$/);
779
- if (!match) {
780
- throw new Error("Invalid URI format");
781
- }
782
-
783
- const documentName = match[1];
784
- const content = await loadDocument(documentName);
785
-
786
- return {
787
- contents: [
788
- {
789
- uri,
790
- mimeType: "text/plain",
791
- text: content,
792
- },
793
- ],
794
- };
795
- },
796
- );
797
-
798
- // List available resources dynamically
799
- server.registerResourceList(async () => {
800
- const documents = await getAvailableDocuments();
801
- return {
802
- resources: documents.map((doc) => ({
803
- uri: `file://documents/${doc.name}`,
804
- name: doc.name,
805
- mimeType: "text/plain",
806
- description: doc.description,
807
- })),
808
- };
809
- });
810
- ```
811
-
812
- **When to use Resources vs Tools:**
813
-
814
- - **Resources**: For data access with simple URI-based parameters
815
- - **Tools**: For complex operations requiring validation and business logic
816
- - **Resources**: When data is relatively static or template-based
817
- - **Tools**: When operations have side effects or complex workflows
818
-
819
- ### Transport Options
820
-
821
- The TypeScript SDK supports two main transport mechanisms:
822
-
823
- #### Streamable HTTP (Recommended for Remote Servers)
824
-
825
- ```typescript
826
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
827
- import express from "express";
828
-
829
- const app = express();
830
- app.use(express.json());
831
-
832
- app.post("/mcp", async (req, res) => {
833
- // Create new transport for each request (stateless, prevents request ID collisions)
834
- const transport = new StreamableHTTPServerTransport({
835
- sessionIdGenerator: undefined,
836
- enableJsonResponse: true,
837
- });
838
-
839
- res.on("close", () => transport.close());
840
-
841
- await server.connect(transport);
842
- await transport.handleRequest(req, res, req.body);
843
- });
844
-
845
- app.listen(3000);
846
- ```
847
-
848
- #### stdio (For Local Integrations)
849
-
850
- ```typescript
851
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
852
-
853
- const transport = new StdioServerTransport();
854
- await server.connect(transport);
855
- ```
856
-
857
- **Transport selection:**
858
-
859
- - **Streamable HTTP**: Web services, remote access, multiple clients
860
- - **stdio**: Command-line tools, local development, subprocess integration
861
-
862
- ### Notification Support
863
-
864
- Notify clients when server state changes:
865
-
866
- ```typescript
867
- // Notify when tools list changes
868
- server.notification({
869
- method: "notifications/tools/list_changed",
870
- });
871
-
872
- // Notify when resources change
873
- server.notification({
874
- method: "notifications/resources/list_changed",
875
- });
876
- ```
877
-
878
- Use notifications sparingly - only when server capabilities genuinely change.
879
-
880
- ---
881
-
882
- ## Code Best Practices
883
-
884
- ### Code Composability and Reusability
885
-
886
- Your implementation MUST prioritize composability and code reuse:
887
-
888
- 1. **Extract Common Functionality**:
889
- - Create reusable helper functions for operations used across multiple tools
890
- - Build shared API clients for HTTP requests instead of duplicating code
891
- - Centralize error handling logic in utility functions
892
- - Extract business logic into dedicated functions that can be composed
893
- - Extract shared markdown or JSON field selection & formatting functionality
894
-
895
- 2. **Avoid Duplication**:
896
- - NEVER copy-paste similar code between tools
897
- - If you find yourself writing similar logic twice, extract it into a function
898
- - Common operations like pagination, filtering, field selection, and formatting should be shared
899
- - Authentication/authorization logic should be centralized
900
-
901
- ## Building and Running
902
-
903
- Always build your TypeScript code before running:
904
-
905
- ```bash
906
- # Build the project
907
- npm run build
908
-
909
- # Run the server
910
- npm start
911
-
912
- # Development with auto-reload
913
- npm run dev
914
- ```
915
-
916
- Always ensure `npm run build` completes successfully before considering the implementation complete.
917
-
918
- ## Quality Checklist
919
-
920
- Before finalizing your Node/TypeScript MCP server implementation, ensure:
921
-
922
- ### Strategic Design
923
-
924
- - [ ] Tools enable complete workflows, not just API endpoint wrappers
925
- - [ ] Tool names reflect natural task subdivisions
926
- - [ ] Response formats optimize for agent context efficiency
927
- - [ ] Human-readable identifiers used where appropriate
928
- - [ ] Error messages guide agents toward correct usage
929
-
930
- ### Implementation Quality
931
-
932
- - [ ] FOCUSED IMPLEMENTATION: Most important and valuable tools implemented
933
- - [ ] All tools registered using `registerTool` with complete configuration
934
- - [ ] All tools include `title`, `description`, `inputSchema`, and `annotations`
935
- - [ ] Annotations correctly set (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
936
- - [ ] All tools use Zod schemas for runtime input validation with `.strict()` enforcement
937
- - [ ] All Zod schemas have proper constraints and descriptive error messages
938
- - [ ] All tools have comprehensive descriptions with explicit input/output types
939
- - [ ] Descriptions include return value examples and complete schema documentation
940
- - [ ] Error messages are clear, actionable, and educational
941
-
942
- ### TypeScript Quality
943
-
944
- - [ ] TypeScript interfaces are defined for all data structures
945
- - [ ] Strict TypeScript is enabled in tsconfig.json
946
- - [ ] No use of `any` type - use `unknown` or proper types instead
947
- - [ ] All async functions have explicit Promise<T> return types
948
- - [ ] Error handling uses proper type guards (e.g., `axios.isAxiosError`, `z.ZodError`)
949
-
950
- ### Advanced Features (where applicable)
951
-
952
- - [ ] Resources registered for appropriate data endpoints
953
- - [ ] Appropriate transport configured (stdio or streamable HTTP)
954
- - [ ] Notifications implemented for dynamic server capabilities
955
- - [ ] Type-safe with SDK interfaces
956
-
957
- ### Project Configuration
958
-
959
- - [ ] Package.json includes all necessary dependencies
960
- - [ ] Build script produces working JavaScript in dist/ directory
961
- - [ ] Main entry point is properly configured as dist/index.js
962
- - [ ] Server name follows format: `{service}-mcp-server`
963
- - [ ] tsconfig.json properly configured with strict mode
964
-
965
- ### Code Quality
966
-
967
- - [ ] Pagination is properly implemented where applicable
968
- - [ ] Large responses check CHARACTER_LIMIT constant and truncate with clear messages
969
- - [ ] Filtering options are provided for potentially large result sets
970
- - [ ] All network operations handle timeouts and connection errors gracefully
971
- - [ ] Common functionality is extracted into reusable functions
972
- - [ ] Return types are consistent across similar operations
973
-
974
- ### Testing and Build
975
-
976
- - [ ] `npm run build` completes successfully without errors
977
- - [ ] dist/index.js created and executable
978
- - [ ] Server runs: `node dist/index.js --help`
979
- - [ ] All imports resolve correctly
980
- - [ ] Sample tool calls work as expected
1
+ # Node/TypeScript MCP Server Implementation Guide
2
+
3
+ ## Overview
4
+
5
+ This document provides Node/TypeScript-specific best practices and examples for implementing MCP servers using the MCP TypeScript SDK. It covers project structure, server setup, tool registration patterns, input validation with Zod, error handling, and complete working examples.
6
+
7
+ ---
8
+
9
+ ## Quick Reference
10
+
11
+ ### Key Imports
12
+
13
+ ```typescript
14
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
15
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
16
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
17
+ import express from "express";
18
+ import { z } from "zod";
19
+ ```
20
+
21
+ ### Server Initialization
22
+
23
+ ```typescript
24
+ const server = new McpServer({
25
+ name: "service-mcp-server",
26
+ version: "1.0.0",
27
+ });
28
+ ```
29
+
30
+ ### Tool Registration Pattern
31
+
32
+ ```typescript
33
+ server.registerTool(
34
+ "tool_name",
35
+ {
36
+ title: "Tool Display Name",
37
+ description: "What the tool does",
38
+ inputSchema: { param: z.string() },
39
+ outputSchema: { result: z.string() },
40
+ },
41
+ async ({ param }) => {
42
+ const output = { result: `Processed: ${param}` };
43
+ return {
44
+ content: [{ type: "text", text: JSON.stringify(output) }],
45
+ structuredContent: output, // Modern pattern for structured data
46
+ };
47
+ },
48
+ );
49
+ ```
50
+
51
+ ---
52
+
53
+ ## MCP TypeScript SDK
54
+
55
+ The official MCP TypeScript SDK provides:
56
+
57
+ - `McpServer` class for server initialization
58
+ - `registerTool` method for tool registration
59
+ - Zod schema integration for runtime input validation
60
+ - Type-safe tool handler implementations
61
+
62
+ **IMPORTANT - Use Modern APIs Only:**
63
+
64
+ - **DO use**: `server.registerTool()`, `server.registerResource()`, `server.registerPrompt()`
65
+ - **DO NOT use**: Old deprecated APIs such as `server.tool()`, `server.setRequestHandler(ListToolsRequestSchema, ...)`, or manual handler registration
66
+ - The `register*` methods provide better type safety, automatic schema handling, and are the recommended approach
67
+
68
+ See the MCP SDK documentation in the references for complete details.
69
+
70
+ ## Server Naming Convention
71
+
72
+ Node/TypeScript MCP servers must follow this naming pattern:
73
+
74
+ - **Format**: `{service}-mcp-server` (lowercase with hyphens)
75
+ - **Examples**: `github-mcp-server`, `jira-mcp-server`, `stripe-mcp-server`
76
+
77
+ The name should be:
78
+
79
+ - General (not tied to specific features)
80
+ - Descriptive of the service/API being integrated
81
+ - Easy to infer from the task description
82
+ - Without version numbers or dates
83
+
84
+ ## Project Structure
85
+
86
+ Create the following structure for Node/TypeScript MCP servers:
87
+
88
+ ```
89
+ {service}-mcp-server/
90
+ ├── package.json
91
+ ├── tsconfig.json
92
+ ├── README.md
93
+ ├── src/
94
+ │ ├── index.ts # Main entry point with McpServer initialization
95
+ │ ├── types.ts # TypeScript type definitions and interfaces
96
+ │ ├── tools/ # Tool implementations (one file per domain)
97
+ │ ├── services/ # API clients and shared utilities
98
+ │ ├── schemas/ # Zod validation schemas
99
+ │ └── constants.ts # Shared constants (API_URL, CHARACTER_LIMIT, etc.)
100
+ └── dist/ # Built JavaScript files (entry point: dist/index.js)
101
+ ```
102
+
103
+ ## Tool Implementation
104
+
105
+ ### Tool Naming
106
+
107
+ Use snake_case for tool names (e.g., "search_users", "create_project", "get_channel_info") with clear, action-oriented names.
108
+
109
+ **Avoid Naming Conflicts**: Include the service context to prevent overlaps:
110
+
111
+ - Use "slack_send_message" instead of just "send_message"
112
+ - Use "github_create_issue" instead of just "create_issue"
113
+ - Use "asana_list_tasks" instead of just "list_tasks"
114
+
115
+ ### Tool Structure
116
+
117
+ Tools are registered using the `registerTool` method with the following requirements:
118
+
119
+ - Use Zod schemas for runtime input validation and type safety
120
+ - The `description` field must be explicitly provided - JSDoc comments are NOT automatically extracted
121
+ - Explicitly provide `title`, `description`, `inputSchema`, and `annotations`
122
+ - The `inputSchema` must be a Zod schema object (not a JSON schema)
123
+ - Type all parameters and return values explicitly
124
+
125
+ ```typescript
126
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
127
+ import { z } from "zod";
128
+
129
+ const server = new McpServer({
130
+ name: "example-mcp",
131
+ version: "1.0.0",
132
+ });
133
+
134
+ // Zod schema for input validation
135
+ const UserSearchInputSchema = z
136
+ .object({
137
+ query: z
138
+ .string()
139
+ .min(2, "Query must be at least 2 characters")
140
+ .max(200, "Query must not exceed 200 characters")
141
+ .describe("Search string to match against names/emails"),
142
+ limit: z.number().int().min(1).max(100).default(20).describe("Maximum results to return"),
143
+ offset: z.number().int().min(0).default(0).describe("Number of results to skip for pagination"),
144
+ response_format: z
145
+ .nativeEnum(ResponseFormat)
146
+ .default(ResponseFormat.MARKDOWN)
147
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
148
+ })
149
+ .strict();
150
+
151
+ // Type definition from Zod schema
152
+ type UserSearchInput = z.infer<typeof UserSearchInputSchema>;
153
+
154
+ server.registerTool(
155
+ "example_search_users",
156
+ {
157
+ title: "Search Example Users",
158
+ description: `Search for users in the Example system by name, email, or team.
159
+
160
+ This tool searches across all user profiles in the Example platform, supporting partial matches and various search filters. It does NOT create or modify users, only searches existing ones.
161
+
162
+ Args:
163
+ - query (string): Search string to match against names/emails
164
+ - limit (number): Maximum results to return, between 1-100 (default: 20)
165
+ - offset (number): Number of results to skip for pagination (default: 0)
166
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
167
+
168
+ Returns:
169
+ For JSON format: Structured data with schema:
170
+ {
171
+ "total": number, // Total number of matches found
172
+ "count": number, // Number of results in this response
173
+ "offset": number, // Current pagination offset
174
+ "users": [
175
+ {
176
+ "id": string, // User ID (e.g., "U123456789")
177
+ "name": string, // Full name (e.g., "John Doe")
178
+ "email": string, // Email address
179
+ "team": string, // Team name (optional)
180
+ "active": boolean // Whether user is active
181
+ }
182
+ ],
183
+ "has_more": boolean, // Whether more results are available
184
+ "next_offset": number // Offset for next page (if has_more is true)
185
+ }
186
+
187
+ Examples:
188
+ - Use when: "Find all marketing team members" -> params with query="team:marketing"
189
+ - Use when: "Search for John's account" -> params with query="john"
190
+ - Don't use when: You need to create a user (use example_create_user instead)
191
+
192
+ Error Handling:
193
+ - Returns "Error: Rate limit exceeded" if too many requests (429 status)
194
+ - Returns "No users found matching '<query>'" if search returns empty`,
195
+ inputSchema: UserSearchInputSchema,
196
+ annotations: {
197
+ readOnlyHint: true,
198
+ destructiveHint: false,
199
+ idempotentHint: true,
200
+ openWorldHint: true,
201
+ },
202
+ },
203
+ async (params: UserSearchInput) => {
204
+ try {
205
+ // Input validation is handled by Zod schema
206
+ // Make API request using validated parameters
207
+ const data = await makeApiRequest<any>("users/search", "GET", undefined, {
208
+ q: params.query,
209
+ limit: params.limit,
210
+ offset: params.offset,
211
+ });
212
+
213
+ const users = data.users || [];
214
+ const total = data.total || 0;
215
+
216
+ if (!users.length) {
217
+ return {
218
+ content: [
219
+ {
220
+ type: "text",
221
+ text: `No users found matching '${params.query}'`,
222
+ },
223
+ ],
224
+ };
225
+ }
226
+
227
+ // Prepare structured output
228
+ const output = {
229
+ total,
230
+ count: users.length,
231
+ offset: params.offset,
232
+ users: users.map((user: any) => ({
233
+ id: user.id,
234
+ name: user.name,
235
+ email: user.email,
236
+ ...(user.team ? { team: user.team } : {}),
237
+ active: user.active ?? true,
238
+ })),
239
+ has_more: total > params.offset + users.length,
240
+ ...(total > params.offset + users.length
241
+ ? {
242
+ next_offset: params.offset + users.length,
243
+ }
244
+ : {}),
245
+ };
246
+
247
+ // Format text representation based on requested format
248
+ let textContent: string;
249
+ if (params.response_format === ResponseFormat.MARKDOWN) {
250
+ const lines = [
251
+ `# User Search Results: '${params.query}'`,
252
+ "",
253
+ `Found ${total} users (showing ${users.length})`,
254
+ "",
255
+ ];
256
+ for (const user of users) {
257
+ lines.push(`## ${user.name} (${user.id})`);
258
+ lines.push(`- **Email**: ${user.email}`);
259
+ if (user.team) lines.push(`- **Team**: ${user.team}`);
260
+ lines.push("");
261
+ }
262
+ textContent = lines.join("\n");
263
+ } else {
264
+ textContent = JSON.stringify(output, null, 2);
265
+ }
266
+
267
+ return {
268
+ content: [{ type: "text", text: textContent }],
269
+ structuredContent: output, // Modern pattern for structured data
270
+ };
271
+ } catch (error) {
272
+ return {
273
+ content: [
274
+ {
275
+ type: "text",
276
+ text: handleApiError(error),
277
+ },
278
+ ],
279
+ };
280
+ }
281
+ },
282
+ );
283
+ ```
284
+
285
+ ## Zod Schemas for Input Validation
286
+
287
+ Zod provides runtime type validation:
288
+
289
+ ```typescript
290
+ import { z } from "zod";
291
+
292
+ // Basic schema with validation
293
+ const CreateUserSchema = z
294
+ .object({
295
+ name: z.string().min(1, "Name is required").max(100, "Name must not exceed 100 characters"),
296
+ email: z.string().email("Invalid email format"),
297
+ age: z
298
+ .number()
299
+ .int("Age must be a whole number")
300
+ .min(0, "Age cannot be negative")
301
+ .max(150, "Age cannot be greater than 150"),
302
+ })
303
+ .strict(); // Use .strict() to forbid extra fields
304
+
305
+ // Enums
306
+ enum ResponseFormat {
307
+ MARKDOWN = "markdown",
308
+ JSON = "json",
309
+ }
310
+
311
+ const SearchSchema = z.object({
312
+ response_format: z
313
+ .nativeEnum(ResponseFormat)
314
+ .default(ResponseFormat.MARKDOWN)
315
+ .describe("Output format"),
316
+ });
317
+
318
+ // Optional fields with defaults
319
+ const PaginationSchema = z.object({
320
+ limit: z.number().int().min(1).max(100).default(20).describe("Maximum results to return"),
321
+ offset: z.number().int().min(0).default(0).describe("Number of results to skip"),
322
+ });
323
+ ```
324
+
325
+ ## Response Format Options
326
+
327
+ Support multiple output formats for flexibility:
328
+
329
+ ```typescript
330
+ enum ResponseFormat {
331
+ MARKDOWN = "markdown",
332
+ JSON = "json",
333
+ }
334
+
335
+ const inputSchema = z.object({
336
+ query: z.string(),
337
+ response_format: z
338
+ .nativeEnum(ResponseFormat)
339
+ .default(ResponseFormat.MARKDOWN)
340
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
341
+ });
342
+ ```
343
+
344
+ **Markdown format**:
345
+
346
+ - Use headers, lists, and formatting for clarity
347
+ - Convert timestamps to human-readable format
348
+ - Show display names with IDs in parentheses
349
+ - Omit verbose metadata
350
+ - Group related information logically
351
+
352
+ **JSON format**:
353
+
354
+ - Return complete, structured data suitable for programmatic processing
355
+ - Include all available fields and metadata
356
+ - Use consistent field names and types
357
+
358
+ ## Pagination Implementation
359
+
360
+ For tools that list resources:
361
+
362
+ ```typescript
363
+ const ListSchema = z.object({
364
+ limit: z.number().int().min(1).max(100).default(20),
365
+ offset: z.number().int().min(0).default(0),
366
+ });
367
+
368
+ async function listItems(params: z.infer<typeof ListSchema>) {
369
+ const data = await apiRequest(params.limit, params.offset);
370
+
371
+ const response = {
372
+ total: data.total,
373
+ count: data.items.length,
374
+ offset: params.offset,
375
+ items: data.items,
376
+ has_more: data.total > params.offset + data.items.length,
377
+ next_offset:
378
+ data.total > params.offset + data.items.length
379
+ ? params.offset + data.items.length
380
+ : undefined,
381
+ };
382
+
383
+ return JSON.stringify(response, null, 2);
384
+ }
385
+ ```
386
+
387
+ ## Character Limits and Truncation
388
+
389
+ Add a CHARACTER_LIMIT constant to prevent overwhelming responses:
390
+
391
+ ```typescript
392
+ // At module level in constants.ts
393
+ export const CHARACTER_LIMIT = 25000; // Maximum response size in characters
394
+
395
+ async function searchTool(params: SearchInput) {
396
+ let result = generateResponse(data);
397
+
398
+ // Check character limit and truncate if needed
399
+ if (result.length > CHARACTER_LIMIT) {
400
+ const truncatedData = data.slice(0, Math.max(1, data.length / 2));
401
+ response.data = truncatedData;
402
+ response.truncated = true;
403
+ response.truncation_message =
404
+ `Response truncated from ${data.length} to ${truncatedData.length} items. ` +
405
+ `Use 'offset' parameter or add filters to see more results.`;
406
+ result = JSON.stringify(response, null, 2);
407
+ }
408
+
409
+ return result;
410
+ }
411
+ ```
412
+
413
+ ## Error Handling
414
+
415
+ Provide clear, actionable error messages:
416
+
417
+ ```typescript
418
+ import axios, { AxiosError } from "axios";
419
+
420
+ function handleApiError(error: unknown): string {
421
+ if (error instanceof AxiosError) {
422
+ if (error.response) {
423
+ switch (error.response.status) {
424
+ case 404:
425
+ return "Error: Resource not found. Please check the ID is correct.";
426
+ case 403:
427
+ return "Error: Permission denied. You don't have access to this resource.";
428
+ case 429:
429
+ return "Error: Rate limit exceeded. Please wait before making more requests.";
430
+ default:
431
+ return `Error: API request failed with status ${error.response.status}`;
432
+ }
433
+ } else if (error.code === "ECONNABORTED") {
434
+ return "Error: Request timed out. Please try again.";
435
+ }
436
+ }
437
+ return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
438
+ }
439
+ ```
440
+
441
+ ## Shared Utilities
442
+
443
+ Extract common functionality into reusable functions:
444
+
445
+ ```typescript
446
+ // Shared API request function
447
+ async function makeApiRequest<T>(
448
+ endpoint: string,
449
+ method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
450
+ data?: any,
451
+ params?: any,
452
+ ): Promise<T> {
453
+ try {
454
+ const response = await axios({
455
+ method,
456
+ url: `${API_BASE_URL}/${endpoint}`,
457
+ data,
458
+ params,
459
+ timeout: 30000,
460
+ headers: {
461
+ "Content-Type": "application/json",
462
+ Accept: "application/json",
463
+ },
464
+ });
465
+ return response.data;
466
+ } catch (error) {
467
+ throw error;
468
+ }
469
+ }
470
+ ```
471
+
472
+ ## Async/Await Best Practices
473
+
474
+ Always use async/await for network requests and I/O operations:
475
+
476
+ ```typescript
477
+ // Good: Async network request
478
+ async function fetchData(resourceId: string): Promise<ResourceData> {
479
+ const response = await axios.get(`${API_URL}/resource/${resourceId}`);
480
+ return response.data;
481
+ }
482
+
483
+ // Bad: Promise chains
484
+ function fetchData(resourceId: string): Promise<ResourceData> {
485
+ return axios.get(`${API_URL}/resource/${resourceId}`).then((response) => response.data); // Harder to read and maintain
486
+ }
487
+ ```
488
+
489
+ ## TypeScript Best Practices
490
+
491
+ 1. **Use Strict TypeScript**: Enable strict mode in tsconfig.json
492
+ 2. **Define Interfaces**: Create clear interface definitions for all data structures
493
+ 3. **Avoid `any`**: Use proper types or `unknown` instead of `any`
494
+ 4. **Zod for Runtime Validation**: Use Zod schemas to validate external data
495
+ 5. **Type Guards**: Create type guard functions for complex type checking
496
+ 6. **Error Handling**: Always use try-catch with proper error type checking
497
+ 7. **Null Safety**: Use optional chaining (`?.`) and nullish coalescing (`??`)
498
+
499
+ ```typescript
500
+ // Good: Type-safe with Zod and interfaces
501
+ interface UserResponse {
502
+ id: string;
503
+ name: string;
504
+ email: string;
505
+ team?: string;
506
+ active: boolean;
507
+ }
508
+
509
+ const UserSchema = z.object({
510
+ id: z.string(),
511
+ name: z.string(),
512
+ email: z.string().email(),
513
+ team: z.string().optional(),
514
+ active: z.boolean(),
515
+ });
516
+
517
+ type User = z.infer<typeof UserSchema>;
518
+
519
+ async function getUser(id: string): Promise<User> {
520
+ const data = await apiCall(`/users/${id}`);
521
+ return UserSchema.parse(data); // Runtime validation
522
+ }
523
+
524
+ // Bad: Using any
525
+ async function getUser(id: string): Promise<any> {
526
+ return await apiCall(`/users/${id}`); // No type safety
527
+ }
528
+ ```
529
+
530
+ ## Package Configuration
531
+
532
+ ### package.json
533
+
534
+ ```json
535
+ {
536
+ "name": "{service}-mcp-server",
537
+ "version": "1.0.0",
538
+ "description": "MCP server for {Service} API integration",
539
+ "type": "module",
540
+ "main": "dist/index.js",
541
+ "scripts": {
542
+ "start": "node dist/index.js",
543
+ "dev": "tsx watch src/index.ts",
544
+ "build": "tsc",
545
+ "clean": "rm -rf dist"
546
+ },
547
+ "engines": {
548
+ "node": ">=18"
549
+ },
550
+ "dependencies": {
551
+ "@modelcontextprotocol/sdk": "^1.6.1",
552
+ "axios": "^1.7.9",
553
+ "zod": "^3.23.8"
554
+ },
555
+ "devDependencies": {
556
+ "@types/node": "^22.10.0",
557
+ "tsx": "^4.19.2",
558
+ "typescript": "^5.7.2"
559
+ }
560
+ }
561
+ ```
562
+
563
+ ### tsconfig.json
564
+
565
+ ```json
566
+ {
567
+ "compilerOptions": {
568
+ "target": "ES2022",
569
+ "module": "Node16",
570
+ "moduleResolution": "Node16",
571
+ "lib": ["ES2022"],
572
+ "outDir": "./dist",
573
+ "rootDir": "./src",
574
+ "strict": true,
575
+ "esModuleInterop": true,
576
+ "skipLibCheck": true,
577
+ "forceConsistentCasingInFileNames": true,
578
+ "declaration": true,
579
+ "declarationMap": true,
580
+ "sourceMap": true,
581
+ "allowSyntheticDefaultImports": true
582
+ },
583
+ "include": ["src/**/*"],
584
+ "exclude": ["node_modules", "dist"]
585
+ }
586
+ ```
587
+
588
+ ## Complete Example
589
+
590
+ ```typescript
591
+ #!/usr/bin/env node
592
+ /**
593
+ * MCP Server for Example Service.
594
+ *
595
+ * This server provides tools to interact with Example API, including user search,
596
+ * project management, and data export capabilities.
597
+ */
598
+
599
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
600
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
601
+ import { z } from "zod";
602
+ import axios, { AxiosError } from "axios";
603
+
604
+ // Constants
605
+ const API_BASE_URL = "https://api.example.com/v1";
606
+ const CHARACTER_LIMIT = 25000;
607
+
608
+ // Enums
609
+ enum ResponseFormat {
610
+ MARKDOWN = "markdown",
611
+ JSON = "json",
612
+ }
613
+
614
+ // Zod schemas
615
+ const UserSearchInputSchema = z
616
+ .object({
617
+ query: z
618
+ .string()
619
+ .min(2, "Query must be at least 2 characters")
620
+ .max(200, "Query must not exceed 200 characters")
621
+ .describe("Search string to match against names/emails"),
622
+ limit: z.number().int().min(1).max(100).default(20).describe("Maximum results to return"),
623
+ offset: z.number().int().min(0).default(0).describe("Number of results to skip for pagination"),
624
+ response_format: z
625
+ .nativeEnum(ResponseFormat)
626
+ .default(ResponseFormat.MARKDOWN)
627
+ .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable"),
628
+ })
629
+ .strict();
630
+
631
+ type UserSearchInput = z.infer<typeof UserSearchInputSchema>;
632
+
633
+ // Shared utility functions
634
+ async function makeApiRequest<T>(
635
+ endpoint: string,
636
+ method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
637
+ data?: any,
638
+ params?: any,
639
+ ): Promise<T> {
640
+ try {
641
+ const response = await axios({
642
+ method,
643
+ url: `${API_BASE_URL}/${endpoint}`,
644
+ data,
645
+ params,
646
+ timeout: 30000,
647
+ headers: {
648
+ "Content-Type": "application/json",
649
+ Accept: "application/json",
650
+ },
651
+ });
652
+ return response.data;
653
+ } catch (error) {
654
+ throw error;
655
+ }
656
+ }
657
+
658
+ function handleApiError(error: unknown): string {
659
+ if (error instanceof AxiosError) {
660
+ if (error.response) {
661
+ switch (error.response.status) {
662
+ case 404:
663
+ return "Error: Resource not found. Please check the ID is correct.";
664
+ case 403:
665
+ return "Error: Permission denied. You don't have access to this resource.";
666
+ case 429:
667
+ return "Error: Rate limit exceeded. Please wait before making more requests.";
668
+ default:
669
+ return `Error: API request failed with status ${error.response.status}`;
670
+ }
671
+ } else if (error.code === "ECONNABORTED") {
672
+ return "Error: Request timed out. Please try again.";
673
+ }
674
+ }
675
+ return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
676
+ }
677
+
678
+ // Create MCP server instance
679
+ const server = new McpServer({
680
+ name: "example-mcp",
681
+ version: "1.0.0",
682
+ });
683
+
684
+ // Register tools
685
+ server.registerTool(
686
+ "example_search_users",
687
+ {
688
+ title: "Search Example Users",
689
+ description: `[Full description as shown above]`,
690
+ inputSchema: UserSearchInputSchema,
691
+ annotations: {
692
+ readOnlyHint: true,
693
+ destructiveHint: false,
694
+ idempotentHint: true,
695
+ openWorldHint: true,
696
+ },
697
+ },
698
+ async (params: UserSearchInput) => {
699
+ // Implementation as shown above
700
+ },
701
+ );
702
+
703
+ // Main function
704
+ // For stdio (local):
705
+ async function runStdio() {
706
+ if (!process.env.EXAMPLE_API_KEY) {
707
+ console.error("ERROR: EXAMPLE_API_KEY environment variable is required");
708
+ process.exit(1);
709
+ }
710
+
711
+ const transport = new StdioServerTransport();
712
+ await server.connect(transport);
713
+ console.error("MCP server running via stdio");
714
+ }
715
+
716
+ // For streamable HTTP (remote):
717
+ async function runHTTP() {
718
+ if (!process.env.EXAMPLE_API_KEY) {
719
+ console.error("ERROR: EXAMPLE_API_KEY environment variable is required");
720
+ process.exit(1);
721
+ }
722
+
723
+ const app = express();
724
+ app.use(express.json());
725
+
726
+ app.post("/mcp", async (req, res) => {
727
+ const transport = new StreamableHTTPServerTransport({
728
+ sessionIdGenerator: undefined,
729
+ enableJsonResponse: true,
730
+ });
731
+ res.on("close", () => transport.close());
732
+ await server.connect(transport);
733
+ await transport.handleRequest(req, res, req.body);
734
+ });
735
+
736
+ const port = parseInt(process.env.PORT || "3000");
737
+ app.listen(port, () => {
738
+ console.error(`MCP server running on http://localhost:${port}/mcp`);
739
+ });
740
+ }
741
+
742
+ // Choose transport based on environment
743
+ const transport = process.env.TRANSPORT || "stdio";
744
+ if (transport === "http") {
745
+ runHTTP().catch((error) => {
746
+ console.error("Server error:", error);
747
+ process.exit(1);
748
+ });
749
+ } else {
750
+ runStdio().catch((error) => {
751
+ console.error("Server error:", error);
752
+ process.exit(1);
753
+ });
754
+ }
755
+ ```
756
+
757
+ ---
758
+
759
+ ## Advanced MCP Features
760
+
761
+ ### Resource Registration
762
+
763
+ Expose data as resources for efficient, URI-based access:
764
+
765
+ ```typescript
766
+ import { ResourceTemplate } from "@modelcontextprotocol/sdk/types.js";
767
+
768
+ // Register a resource with URI template
769
+ server.registerResource(
770
+ {
771
+ uri: "file://documents/{name}",
772
+ name: "Document Resource",
773
+ description: "Access documents by name",
774
+ mimeType: "text/plain",
775
+ },
776
+ async (uri: string) => {
777
+ // Extract parameter from URI
778
+ const match = uri.match(/^file:\/\/documents\/(.+)$/);
779
+ if (!match) {
780
+ throw new Error("Invalid URI format");
781
+ }
782
+
783
+ const documentName = match[1];
784
+ const content = await loadDocument(documentName);
785
+
786
+ return {
787
+ contents: [
788
+ {
789
+ uri,
790
+ mimeType: "text/plain",
791
+ text: content,
792
+ },
793
+ ],
794
+ };
795
+ },
796
+ );
797
+
798
+ // List available resources dynamically
799
+ server.registerResourceList(async () => {
800
+ const documents = await getAvailableDocuments();
801
+ return {
802
+ resources: documents.map((doc) => ({
803
+ uri: `file://documents/${doc.name}`,
804
+ name: doc.name,
805
+ mimeType: "text/plain",
806
+ description: doc.description,
807
+ })),
808
+ };
809
+ });
810
+ ```
811
+
812
+ **When to use Resources vs Tools:**
813
+
814
+ - **Resources**: For data access with simple URI-based parameters
815
+ - **Tools**: For complex operations requiring validation and business logic
816
+ - **Resources**: When data is relatively static or template-based
817
+ - **Tools**: When operations have side effects or complex workflows
818
+
819
+ ### Transport Options
820
+
821
+ The TypeScript SDK supports two main transport mechanisms:
822
+
823
+ #### Streamable HTTP (Recommended for Remote Servers)
824
+
825
+ ```typescript
826
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
827
+ import express from "express";
828
+
829
+ const app = express();
830
+ app.use(express.json());
831
+
832
+ app.post("/mcp", async (req, res) => {
833
+ // Create new transport for each request (stateless, prevents request ID collisions)
834
+ const transport = new StreamableHTTPServerTransport({
835
+ sessionIdGenerator: undefined,
836
+ enableJsonResponse: true,
837
+ });
838
+
839
+ res.on("close", () => transport.close());
840
+
841
+ await server.connect(transport);
842
+ await transport.handleRequest(req, res, req.body);
843
+ });
844
+
845
+ app.listen(3000);
846
+ ```
847
+
848
+ #### stdio (For Local Integrations)
849
+
850
+ ```typescript
851
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
852
+
853
+ const transport = new StdioServerTransport();
854
+ await server.connect(transport);
855
+ ```
856
+
857
+ **Transport selection:**
858
+
859
+ - **Streamable HTTP**: Web services, remote access, multiple clients
860
+ - **stdio**: Command-line tools, local development, subprocess integration
861
+
862
+ ### Notification Support
863
+
864
+ Notify clients when server state changes:
865
+
866
+ ```typescript
867
+ // Notify when tools list changes
868
+ server.notification({
869
+ method: "notifications/tools/list_changed",
870
+ });
871
+
872
+ // Notify when resources change
873
+ server.notification({
874
+ method: "notifications/resources/list_changed",
875
+ });
876
+ ```
877
+
878
+ Use notifications sparingly - only when server capabilities genuinely change.
879
+
880
+ ---
881
+
882
+ ## Code Best Practices
883
+
884
+ ### Code Composability and Reusability
885
+
886
+ Your implementation MUST prioritize composability and code reuse:
887
+
888
+ 1. **Extract Common Functionality**:
889
+ - Create reusable helper functions for operations used across multiple tools
890
+ - Build shared API clients for HTTP requests instead of duplicating code
891
+ - Centralize error handling logic in utility functions
892
+ - Extract business logic into dedicated functions that can be composed
893
+ - Extract shared markdown or JSON field selection & formatting functionality
894
+
895
+ 2. **Avoid Duplication**:
896
+ - NEVER copy-paste similar code between tools
897
+ - If you find yourself writing similar logic twice, extract it into a function
898
+ - Common operations like pagination, filtering, field selection, and formatting should be shared
899
+ - Authentication/authorization logic should be centralized
900
+
901
+ ## Building and Running
902
+
903
+ Always build your TypeScript code before running:
904
+
905
+ ```bash
906
+ # Build the project
907
+ npm run build
908
+
909
+ # Run the server
910
+ npm start
911
+
912
+ # Development with auto-reload
913
+ npm run dev
914
+ ```
915
+
916
+ Always ensure `npm run build` completes successfully before considering the implementation complete.
917
+
918
+ ## Quality Checklist
919
+
920
+ Before finalizing your Node/TypeScript MCP server implementation, ensure:
921
+
922
+ ### Strategic Design
923
+
924
+ - [ ] Tools enable complete workflows, not just API endpoint wrappers
925
+ - [ ] Tool names reflect natural task subdivisions
926
+ - [ ] Response formats optimize for agent context efficiency
927
+ - [ ] Human-readable identifiers used where appropriate
928
+ - [ ] Error messages guide agents toward correct usage
929
+
930
+ ### Implementation Quality
931
+
932
+ - [ ] FOCUSED IMPLEMENTATION: Most important and valuable tools implemented
933
+ - [ ] All tools registered using `registerTool` with complete configuration
934
+ - [ ] All tools include `title`, `description`, `inputSchema`, and `annotations`
935
+ - [ ] Annotations correctly set (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
936
+ - [ ] All tools use Zod schemas for runtime input validation with `.strict()` enforcement
937
+ - [ ] All Zod schemas have proper constraints and descriptive error messages
938
+ - [ ] All tools have comprehensive descriptions with explicit input/output types
939
+ - [ ] Descriptions include return value examples and complete schema documentation
940
+ - [ ] Error messages are clear, actionable, and educational
941
+
942
+ ### TypeScript Quality
943
+
944
+ - [ ] TypeScript interfaces are defined for all data structures
945
+ - [ ] Strict TypeScript is enabled in tsconfig.json
946
+ - [ ] No use of `any` type - use `unknown` or proper types instead
947
+ - [ ] All async functions have explicit Promise<T> return types
948
+ - [ ] Error handling uses proper type guards (e.g., `axios.isAxiosError`, `z.ZodError`)
949
+
950
+ ### Advanced Features (where applicable)
951
+
952
+ - [ ] Resources registered for appropriate data endpoints
953
+ - [ ] Appropriate transport configured (stdio or streamable HTTP)
954
+ - [ ] Notifications implemented for dynamic server capabilities
955
+ - [ ] Type-safe with SDK interfaces
956
+
957
+ ### Project Configuration
958
+
959
+ - [ ] Package.json includes all necessary dependencies
960
+ - [ ] Build script produces working JavaScript in dist/ directory
961
+ - [ ] Main entry point is properly configured as dist/index.js
962
+ - [ ] Server name follows format: `{service}-mcp-server`
963
+ - [ ] tsconfig.json properly configured with strict mode
964
+
965
+ ### Code Quality
966
+
967
+ - [ ] Pagination is properly implemented where applicable
968
+ - [ ] Large responses check CHARACTER_LIMIT constant and truncate with clear messages
969
+ - [ ] Filtering options are provided for potentially large result sets
970
+ - [ ] All network operations handle timeouts and connection errors gracefully
971
+ - [ ] Common functionality is extracted into reusable functions
972
+ - [ ] Return types are consistent across similar operations
973
+
974
+ ### Testing and Build
975
+
976
+ - [ ] `npm run build` completes successfully without errors
977
+ - [ ] dist/index.js created and executable
978
+ - [ ] Server runs: `node dist/index.js --help`
979
+ - [ ] All imports resolve correctly
980
+ - [ ] Sample tool calls work as expected