memory-journal-mcp 7.7.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/README.md +126 -56
  2. package/dist/chunk-6OHRCNYW.js +3231 -0
  3. package/dist/chunk-JFMITANR.js +5168 -0
  4. package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
  5. package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
  6. package/dist/cli.js +21 -3
  7. package/dist/index.d.ts +16 -13
  8. package/dist/index.js +4 -2
  9. package/dist/resources-IJVKDFGS.js +2 -0
  10. package/dist/tools-44DGXE3V.js +2 -0
  11. package/dist/worker-script.js +201 -20
  12. package/package.json +7 -4
  13. package/skills/README.md +62 -25
  14. package/skills/adversarial-performance/SKILL.md +139 -0
  15. package/skills/adversarial-performance/references/audit-categories.md +462 -0
  16. package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
  17. package/skills/adversarial-performance/references/copilot-usage.md +16 -0
  18. package/skills/adversarial-performance/references/feedback-loop.md +177 -0
  19. package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
  20. package/skills/adversarial-planner/SKILL.md +23 -54
  21. package/skills/adversarial-planner/references/copilot-integration.md +25 -40
  22. package/skills/adversarial-planner/references/copilot-usage.md +16 -0
  23. package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
  24. package/skills/adversarial-security/SKILL.md +149 -0
  25. package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
  26. package/skills/adversarial-security/references/audit-categories.md +723 -0
  27. package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
  28. package/skills/adversarial-security/references/copilot-usage.md +16 -0
  29. package/skills/adversarial-security/references/feedback-loop.md +206 -0
  30. package/skills/adversarial-security/references/journal-opt-out.md +7 -0
  31. package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
  32. package/skills/adversarial-skill-audit/SKILL.md +118 -0
  33. package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
  34. package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
  35. package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
  36. package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
  37. package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
  38. package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
  39. package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
  40. package/skills/adversarial-workflow-audit/SKILL.md +82 -0
  41. package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
  42. package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
  43. package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
  44. package/skills/agents-sdk/SKILL.md +220 -0
  45. package/skills/agents-sdk/references/callable.md +92 -0
  46. package/skills/agents-sdk/references/codemode.md +209 -0
  47. package/skills/agents-sdk/references/email.md +144 -0
  48. package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
  49. package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
  50. package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
  51. package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
  52. package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
  53. package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
  54. package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
  55. package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
  56. package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
  57. package/skills/agents-sdk/references/mcp.md +157 -0
  58. package/skills/agents-sdk/references/state-scheduling.md +164 -0
  59. package/skills/agents-sdk/references/streaming-chat.md +168 -0
  60. package/skills/agents-sdk/references/workflows.md +136 -0
  61. package/skills/auth-identity/SKILL.md +48 -0
  62. package/skills/autonomous-dev/SKILL.md +46 -23
  63. package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
  64. package/skills/aws/SKILL.md +39 -0
  65. package/skills/azure/SKILL.md +38 -0
  66. package/skills/bin/sync.js +7 -1
  67. package/skills/biome/SKILL.md +59 -0
  68. package/skills/bun/SKILL.md +8 -2
  69. package/skills/cloudflare/SKILL.md +37 -0
  70. package/skills/cloudflare/references/agents-sdk/README.md +95 -0
  71. package/skills/cloudflare/references/agents-sdk/api.md +195 -0
  72. package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
  73. package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
  74. package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
  75. package/skills/cloudflare/references/ai-gateway/README.md +176 -0
  76. package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
  77. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
  78. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  79. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
  80. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
  81. package/skills/cloudflare/references/ai-search/README.md +145 -0
  82. package/skills/cloudflare/references/ai-search/api.md +87 -0
  83. package/skills/cloudflare/references/ai-search/configuration.md +91 -0
  84. package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
  85. package/skills/cloudflare/references/ai-search/patterns.md +87 -0
  86. package/skills/cloudflare/references/analytics-engine/README.md +96 -0
  87. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  88. package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
  89. package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
  90. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  91. package/skills/cloudflare/references/api/README.md +66 -0
  92. package/skills/cloudflare/references/api/api.md +205 -0
  93. package/skills/cloudflare/references/api/configuration.md +158 -0
  94. package/skills/cloudflare/references/api/gotchas.md +231 -0
  95. package/skills/cloudflare/references/api/patterns.md +208 -0
  96. package/skills/cloudflare/references/api-shield/README.md +44 -0
  97. package/skills/cloudflare/references/api-shield/api.md +153 -0
  98. package/skills/cloudflare/references/api-shield/configuration.md +210 -0
  99. package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
  100. package/skills/cloudflare/references/api-shield/patterns.md +185 -0
  101. package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
  102. package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
  103. package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
  104. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
  105. package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
  106. package/skills/cloudflare/references/bindings/README.md +127 -0
  107. package/skills/cloudflare/references/bindings/api.md +214 -0
  108. package/skills/cloudflare/references/bindings/configuration.md +200 -0
  109. package/skills/cloudflare/references/bindings/gotchas.md +210 -0
  110. package/skills/cloudflare/references/bindings/patterns.md +205 -0
  111. package/skills/cloudflare/references/bot-management/README.md +95 -0
  112. package/skills/cloudflare/references/bot-management/api.md +175 -0
  113. package/skills/cloudflare/references/bot-management/configuration.md +175 -0
  114. package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
  115. package/skills/cloudflare/references/bot-management/patterns.md +181 -0
  116. package/skills/cloudflare/references/browser-rendering/README.md +84 -0
  117. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  118. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  119. package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
  120. package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
  121. package/skills/cloudflare/references/c3/README.md +111 -0
  122. package/skills/cloudflare/references/c3/api.md +71 -0
  123. package/skills/cloudflare/references/c3/configuration.md +85 -0
  124. package/skills/cloudflare/references/c3/gotchas.md +97 -0
  125. package/skills/cloudflare/references/c3/patterns.md +84 -0
  126. package/skills/cloudflare/references/cache-reserve/README.md +150 -0
  127. package/skills/cloudflare/references/cache-reserve/api.md +184 -0
  128. package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
  129. package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
  130. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  131. package/skills/cloudflare/references/containers/README.md +87 -0
  132. package/skills/cloudflare/references/containers/api.md +197 -0
  133. package/skills/cloudflare/references/containers/configuration.md +191 -0
  134. package/skills/cloudflare/references/containers/gotchas.md +182 -0
  135. package/skills/cloudflare/references/containers/patterns.md +204 -0
  136. package/skills/cloudflare/references/cron-triggers/README.md +101 -0
  137. package/skills/cloudflare/references/cron-triggers/api.md +224 -0
  138. package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
  139. package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
  140. package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
  141. package/skills/cloudflare/references/d1/README.md +137 -0
  142. package/skills/cloudflare/references/d1/api.md +213 -0
  143. package/skills/cloudflare/references/d1/configuration.md +198 -0
  144. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  145. package/skills/cloudflare/references/d1/patterns.md +240 -0
  146. package/skills/cloudflare/references/ddos/README.md +42 -0
  147. package/skills/cloudflare/references/ddos/api.md +158 -0
  148. package/skills/cloudflare/references/ddos/configuration.md +94 -0
  149. package/skills/cloudflare/references/ddos/gotchas.md +114 -0
  150. package/skills/cloudflare/references/ddos/patterns.md +220 -0
  151. package/skills/cloudflare/references/decision-trees.md +95 -0
  152. package/skills/cloudflare/references/do-storage/README.md +79 -0
  153. package/skills/cloudflare/references/do-storage/api.md +107 -0
  154. package/skills/cloudflare/references/do-storage/configuration.md +114 -0
  155. package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
  156. package/skills/cloudflare/references/do-storage/patterns.md +210 -0
  157. package/skills/cloudflare/references/do-storage/testing.md +186 -0
  158. package/skills/cloudflare/references/durable-objects/README.md +194 -0
  159. package/skills/cloudflare/references/durable-objects/api.md +205 -0
  160. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  161. package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
  162. package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
  163. package/skills/cloudflare/references/email-routing/README.md +89 -0
  164. package/skills/cloudflare/references/email-routing/api.md +192 -0
  165. package/skills/cloudflare/references/email-routing/configuration.md +187 -0
  166. package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
  167. package/skills/cloudflare/references/email-routing/patterns.md +241 -0
  168. package/skills/cloudflare/references/email-workers/README.md +153 -0
  169. package/skills/cloudflare/references/email-workers/api.md +227 -0
  170. package/skills/cloudflare/references/email-workers/configuration.md +115 -0
  171. package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
  172. package/skills/cloudflare/references/email-workers/patterns.md +108 -0
  173. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  174. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  175. package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
  176. package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
  177. package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
  178. package/skills/cloudflare/references/hyperdrive/README.md +84 -0
  179. package/skills/cloudflare/references/hyperdrive/api.md +149 -0
  180. package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
  181. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  182. package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
  183. package/skills/cloudflare/references/images/README.md +65 -0
  184. package/skills/cloudflare/references/images/api.md +101 -0
  185. package/skills/cloudflare/references/images/configuration.md +206 -0
  186. package/skills/cloudflare/references/images/gotchas.md +106 -0
  187. package/skills/cloudflare/references/images/patterns.md +126 -0
  188. package/skills/cloudflare/references/kv/README.md +90 -0
  189. package/skills/cloudflare/references/kv/api.md +163 -0
  190. package/skills/cloudflare/references/kv/configuration.md +148 -0
  191. package/skills/cloudflare/references/kv/gotchas.md +133 -0
  192. package/skills/cloudflare/references/kv/patterns.md +195 -0
  193. package/skills/cloudflare/references/miniflare/README.md +113 -0
  194. package/skills/cloudflare/references/miniflare/api.md +204 -0
  195. package/skills/cloudflare/references/miniflare/configuration.md +174 -0
  196. package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
  197. package/skills/cloudflare/references/miniflare/patterns.md +187 -0
  198. package/skills/cloudflare/references/network-interconnect/README.md +104 -0
  199. package/skills/cloudflare/references/network-interconnect/api.md +220 -0
  200. package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
  201. package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
  202. package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
  203. package/skills/cloudflare/references/observability/README.md +93 -0
  204. package/skills/cloudflare/references/observability/api.md +168 -0
  205. package/skills/cloudflare/references/observability/configuration.md +178 -0
  206. package/skills/cloudflare/references/observability/gotchas.md +125 -0
  207. package/skills/cloudflare/references/observability/patterns.md +105 -0
  208. package/skills/cloudflare/references/pages/README.md +92 -0
  209. package/skills/cloudflare/references/pages/api.md +205 -0
  210. package/skills/cloudflare/references/pages/configuration.md +216 -0
  211. package/skills/cloudflare/references/pages/gotchas.md +218 -0
  212. package/skills/cloudflare/references/pages/patterns.md +215 -0
  213. package/skills/cloudflare/references/pages-functions/README.md +104 -0
  214. package/skills/cloudflare/references/pages-functions/api.md +159 -0
  215. package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
  216. package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
  217. package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
  218. package/skills/cloudflare/references/pipelines/README.md +109 -0
  219. package/skills/cloudflare/references/pipelines/api.md +214 -0
  220. package/skills/cloudflare/references/pipelines/configuration.md +98 -0
  221. package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
  222. package/skills/cloudflare/references/pipelines/patterns.md +87 -0
  223. package/skills/cloudflare/references/product-index.md +112 -0
  224. package/skills/cloudflare/references/pulumi/README.md +113 -0
  225. package/skills/cloudflare/references/pulumi/api.md +230 -0
  226. package/skills/cloudflare/references/pulumi/configuration.md +213 -0
  227. package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
  228. package/skills/cloudflare/references/pulumi/patterns.md +260 -0
  229. package/skills/cloudflare/references/queues/README.md +99 -0
  230. package/skills/cloudflare/references/queues/api.md +211 -0
  231. package/skills/cloudflare/references/queues/configuration.md +151 -0
  232. package/skills/cloudflare/references/queues/gotchas.md +210 -0
  233. package/skills/cloudflare/references/queues/patterns.md +220 -0
  234. package/skills/cloudflare/references/r2/README.md +97 -0
  235. package/skills/cloudflare/references/r2/api.md +235 -0
  236. package/skills/cloudflare/references/r2/configuration.md +176 -0
  237. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  238. package/skills/cloudflare/references/r2/patterns.md +203 -0
  239. package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
  240. package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
  241. package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
  242. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
  243. package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
  244. package/skills/cloudflare/references/r2-sql/README.md +138 -0
  245. package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
  246. package/skills/cloudflare/references/r2-sql/api.md +159 -0
  247. package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
  248. package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
  249. package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
  250. package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
  251. package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
  252. package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
  253. package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
  254. package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
  255. package/skills/cloudflare/references/realtimekit/README.md +118 -0
  256. package/skills/cloudflare/references/realtimekit/api.md +234 -0
  257. package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
  258. package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
  259. package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
  260. package/skills/cloudflare/references/sandbox/README.md +104 -0
  261. package/skills/cloudflare/references/sandbox/api.md +200 -0
  262. package/skills/cloudflare/references/sandbox/configuration.md +154 -0
  263. package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
  264. package/skills/cloudflare/references/sandbox/patterns.md +195 -0
  265. package/skills/cloudflare/references/secrets-store/README.md +77 -0
  266. package/skills/cloudflare/references/secrets-store/api.md +199 -0
  267. package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
  268. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  269. package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
  270. package/skills/cloudflare/references/smart-placement/README.md +143 -0
  271. package/skills/cloudflare/references/smart-placement/api.md +192 -0
  272. package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
  273. package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
  274. package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
  275. package/skills/cloudflare/references/snippets/README.md +74 -0
  276. package/skills/cloudflare/references/snippets/api.md +214 -0
  277. package/skills/cloudflare/references/snippets/configuration.md +239 -0
  278. package/skills/cloudflare/references/snippets/gotchas.md +104 -0
  279. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  280. package/skills/cloudflare/references/spectrum/README.md +52 -0
  281. package/skills/cloudflare/references/spectrum/api.md +184 -0
  282. package/skills/cloudflare/references/spectrum/configuration.md +203 -0
  283. package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
  284. package/skills/cloudflare/references/spectrum/patterns.md +206 -0
  285. package/skills/cloudflare/references/static-assets/README.md +65 -0
  286. package/skills/cloudflare/references/static-assets/api.md +201 -0
  287. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  288. package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
  289. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  290. package/skills/cloudflare/references/stream/README.md +123 -0
  291. package/skills/cloudflare/references/stream/api-live.md +202 -0
  292. package/skills/cloudflare/references/stream/api.md +206 -0
  293. package/skills/cloudflare/references/stream/configuration.md +151 -0
  294. package/skills/cloudflare/references/stream/gotchas.md +139 -0
  295. package/skills/cloudflare/references/stream/patterns.md +217 -0
  296. package/skills/cloudflare/references/tail-workers/README.md +92 -0
  297. package/skills/cloudflare/references/tail-workers/api.md +203 -0
  298. package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
  299. package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
  300. package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
  301. package/skills/cloudflare/references/terraform/README.md +100 -0
  302. package/skills/cloudflare/references/terraform/api.md +178 -0
  303. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  304. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  305. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  306. package/skills/cloudflare/references/tunnel/README.md +137 -0
  307. package/skills/cloudflare/references/tunnel/api.md +205 -0
  308. package/skills/cloudflare/references/tunnel/configuration.md +163 -0
  309. package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
  310. package/skills/cloudflare/references/tunnel/networking.md +174 -0
  311. package/skills/cloudflare/references/tunnel/patterns.md +199 -0
  312. package/skills/cloudflare/references/turn/README.md +86 -0
  313. package/skills/cloudflare/references/turn/api.md +236 -0
  314. package/skills/cloudflare/references/turn/configuration.md +181 -0
  315. package/skills/cloudflare/references/turn/gotchas.md +236 -0
  316. package/skills/cloudflare/references/turn/patterns.md +228 -0
  317. package/skills/cloudflare/references/turnstile/README.md +102 -0
  318. package/skills/cloudflare/references/turnstile/api.md +253 -0
  319. package/skills/cloudflare/references/turnstile/configuration.md +242 -0
  320. package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
  321. package/skills/cloudflare/references/turnstile/patterns.md +195 -0
  322. package/skills/cloudflare/references/vectorize/README.md +133 -0
  323. package/skills/cloudflare/references/vectorize/api.md +89 -0
  324. package/skills/cloudflare/references/vectorize/configuration.md +91 -0
  325. package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
  326. package/skills/cloudflare/references/vectorize/patterns.md +92 -0
  327. package/skills/cloudflare/references/waf/README.md +125 -0
  328. package/skills/cloudflare/references/waf/api.md +203 -0
  329. package/skills/cloudflare/references/waf/configuration.md +215 -0
  330. package/skills/cloudflare/references/waf/gotchas.md +208 -0
  331. package/skills/cloudflare/references/waf/patterns.md +236 -0
  332. package/skills/cloudflare/references/web-analytics/README.md +149 -0
  333. package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
  334. package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
  335. package/skills/cloudflare/references/web-analytics/integration.md +63 -0
  336. package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
  337. package/skills/cloudflare/references/workerd/README.md +85 -0
  338. package/skills/cloudflare/references/workerd/api.md +219 -0
  339. package/skills/cloudflare/references/workerd/configuration.md +200 -0
  340. package/skills/cloudflare/references/workerd/gotchas.md +151 -0
  341. package/skills/cloudflare/references/workerd/patterns.md +205 -0
  342. package/skills/cloudflare/references/workers/README.md +110 -0
  343. package/skills/cloudflare/references/workers/api.md +197 -0
  344. package/skills/cloudflare/references/workers/configuration.md +184 -0
  345. package/skills/cloudflare/references/workers/frameworks.md +200 -0
  346. package/skills/cloudflare/references/workers/gotchas.md +145 -0
  347. package/skills/cloudflare/references/workers/patterns.md +220 -0
  348. package/skills/cloudflare/references/workers-ai/README.md +206 -0
  349. package/skills/cloudflare/references/workers-ai/api.md +115 -0
  350. package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
  351. package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
  352. package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
  353. package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
  354. package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
  355. package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
  356. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  357. package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
  358. package/skills/cloudflare/references/workers-playground/README.md +131 -0
  359. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  360. package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
  361. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  362. package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
  363. package/skills/cloudflare/references/workers-vpc/README.md +130 -0
  364. package/skills/cloudflare/references/workers-vpc/api.md +196 -0
  365. package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
  366. package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
  367. package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
  368. package/skills/cloudflare/references/workflows/README.md +72 -0
  369. package/skills/cloudflare/references/workflows/api.md +237 -0
  370. package/skills/cloudflare/references/workflows/configuration.md +158 -0
  371. package/skills/cloudflare/references/workflows/gotchas.md +97 -0
  372. package/skills/cloudflare/references/workflows/patterns.md +245 -0
  373. package/skills/cloudflare/references/wrangler/README.md +143 -0
  374. package/skills/cloudflare/references/wrangler/api.md +188 -0
  375. package/skills/cloudflare/references/wrangler/configuration.md +198 -0
  376. package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
  377. package/skills/cloudflare/references/wrangler/patterns.md +211 -0
  378. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
  379. package/skills/cloudflare/references/zaraz/README.md +114 -0
  380. package/skills/cloudflare/references/zaraz/api.md +118 -0
  381. package/skills/cloudflare/references/zaraz/configuration.md +94 -0
  382. package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
  383. package/skills/cloudflare/references/zaraz/patterns.md +77 -0
  384. package/skills/docker/SKILL.md +7 -101
  385. package/skills/docker/references/advanced-examples.md +71 -0
  386. package/skills/docker/references/templates.md +34 -0
  387. package/skills/docs-marketer/SKILL.md +178 -0
  388. package/skills/docs-marketer/references/audit-categories.md +328 -0
  389. package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
  390. package/skills/docs-marketer/references/copilot-usage.md +16 -0
  391. package/skills/docs-marketer/references/feedback-loop.md +155 -0
  392. package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
  393. package/skills/drizzle-orm/SKILL.md +82 -0
  394. package/skills/durable-objects/SKILL.md +167 -0
  395. package/skills/durable-objects/references/advanced_features.md +29 -0
  396. package/skills/durable-objects/references/rules.md +300 -0
  397. package/skills/durable-objects/references/testing.md +261 -0
  398. package/skills/durable-objects/references/workers.md +336 -0
  399. package/skills/gcp/SKILL.md +37 -0
  400. package/skills/github-actions/SKILL.md +5 -58
  401. package/skills/github-actions/references/templates.md +65 -0
  402. package/skills/github-commander/SKILL.md +13 -21
  403. package/skills/github-commander/workflows/copilot-audit.md +12 -12
  404. package/skills/github-copilot-cli/SKILL.md +21 -26
  405. package/skills/github-repo-setup/SKILL.md +136 -0
  406. package/skills/github-repo-setup/references/community-standards.md +136 -0
  407. package/skills/github-repo-setup/references/github-automation.md +490 -0
  408. package/skills/github-repo-setup/references/inline-templates.md +205 -0
  409. package/skills/github-repo-setup/references/project-config.md +320 -0
  410. package/skills/gitlab/SKILL.md +7 -2
  411. package/skills/gitlab/package-lock.json +389 -389
  412. package/skills/golang/SKILL.md +8 -1
  413. package/skills/graphql/SKILL.md +30 -0
  414. package/skills/hono/SKILL.md +82 -0
  415. package/skills/journal-optimizer/SKILL.md +206 -0
  416. package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
  417. package/skills/llm-app-engineering/SKILL.md +18 -0
  418. package/skills/monorepo/SKILL.md +56 -0
  419. package/skills/multi-agent-orchestration/SKILL.md +14 -0
  420. package/skills/mysql/SKILL.md +6 -2
  421. package/skills/next-best-practices/SKILL.md +86 -0
  422. package/skills/next-best-practices/references/cache-components-examples.md +234 -0
  423. package/skills/next-best-practices/references/cache-components.md +210 -0
  424. package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
  425. package/skills/next-best-practices/references/upgrade.md +43 -0
  426. package/skills/next-cache-components/SKILL.md +441 -0
  427. package/skills/next-upgrade/SKILL.md +43 -0
  428. package/skills/next-upgrade/references/decision-tree.md +33 -0
  429. package/skills/nodejs/SKILL.md +46 -0
  430. package/skills/opentelemetry/SKILL.md +62 -0
  431. package/skills/package.json +39 -4
  432. package/skills/playwright-standard/SKILL.md +6 -11
  433. package/skills/playwright-standard/references/locators.md +7 -0
  434. package/skills/postgres/SKILL.md +6 -1
  435. package/skills/python/SKILL.md +8 -70
  436. package/skills/python/references/advanced-patterns.md +37 -0
  437. package/skills/python/references/config-templates.md +48 -0
  438. package/skills/rag-pipelines/SKILL.md +14 -0
  439. package/skills/redis/SKILL.md +31 -0
  440. package/skills/render/SKILL.md +35 -0
  441. package/skills/rust/SKILL.md +15 -25
  442. package/skills/rust/references/borrow-checker.md +13 -0
  443. package/skills/rust/references/ecosystem.md +11 -0
  444. package/skills/sandbox-sdk/SKILL.md +186 -0
  445. package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
  446. package/skills/sandbox-sdk/references/examples.md +52 -0
  447. package/skills/shadcn-ui/SKILL.md +22 -57
  448. package/skills/skill-builder/SKILL.md +23 -424
  449. package/skills/skill-builder/references/tutorial.md +457 -0
  450. package/skills/sqlite/SKILL.md +16 -5
  451. package/skills/table.md +59 -0
  452. package/skills/tailwind-css/SKILL.md +11 -60
  453. package/skills/tailwind-css/references/component-patterns.md +52 -0
  454. package/skills/trpc/SKILL.md +56 -0
  455. package/skills/typescript/SKILL.md +30 -433
  456. package/skills/typescript/references/tutorial.md +453 -0
  457. package/skills/vercel-ai-sdk/SKILL.md +48 -0
  458. package/skills/vitest-standard/SKILL.md +5 -11
  459. package/skills/vitest-standard/references/assertions.md +11 -0
  460. package/skills/web-perf/SKILL.md +207 -0
  461. package/skills/workers-best-practices/SKILL.md +120 -0
  462. package/skills/workers-best-practices/references/anti-patterns.md +18 -0
  463. package/skills/workers-best-practices/references/review.md +174 -0
  464. package/skills/workers-best-practices/references/rules.md +485 -0
  465. package/skills/wrangler/SKILL.md +43 -0
  466. package/skills/wrangler/references/cli-commands.md +861 -0
  467. package/skills/zod/SKILL.md +48 -0
  468. package/dist/tools-P4VGG4FH.js +0 -1
  469. package/skills/react-best-practices/AGENTS.md +0 -2883
  470. package/skills/react-best-practices/SKILL.md +0 -138
  471. /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
  472. /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
  473. /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
  474. /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
  475. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
  476. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
  477. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
  478. /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
  479. /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
  480. /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
  481. /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
  482. /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
  483. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
  484. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
  485. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
  486. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
  487. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
  488. /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
  489. /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
  490. /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
  491. /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
  492. /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
  493. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
  494. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
  495. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
  496. /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
  497. /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
  498. /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
  499. /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
  500. /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
  501. /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
  502. /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
  503. /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
  504. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
  505. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
  506. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
  507. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
  508. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
  509. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
  510. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
  511. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
  512. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
  513. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
  514. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
  515. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
  516. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
  517. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
  518. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
  519. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
  520. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
  521. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
  522. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
  523. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
  524. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
  525. /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
  526. /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
  527. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
  528. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
  529. /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
  530. /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
  531. /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
@@ -0,0 +1,359 @@
1
+ # OAuth 2.1 Reference — MCP Builder Skill
2
+
3
+ > Production-tested OAuth 2.1 implementation pattern for MCP servers. Standardized across db-mcp, mysql-mcp, postgres-mcp, and memory-journal-mcp (March 2026).
4
+
5
+ ## When to Implement
6
+
7
+ Add OAuth when the MCP server:
8
+
9
+ - Exposes an **HTTP transport** accessible over a network
10
+ - Needs **multi-tenant access control** (different clients get different permissions)
11
+ - Requires **production-grade security** beyond simple shared token auth
12
+
13
+ OAuth is **opt-in** — servers always support a fallback chain: OAuth → simple token (`MCP_AUTH_TOKEN`) → no auth.
14
+
15
+ ## Architecture Overview
16
+
17
+ ```
18
+ ┌──────────────────────────────────────────────────────────────┐
19
+ │ HTTP Request Pipeline │
20
+ │ │
21
+ │ Request ──► Security Headers ──► Rate Limiter │
22
+ │ │ │
23
+ │ ▼ │
24
+ │ Public Path? ──(yes)──► /.well-known/* ──► RFC 9728 metadata│
25
+ │ │ /health ──► Health check │
26
+ │ │(no) │
27
+ │ ▼ │
28
+ │ Extract Bearer Token (Authorization header) │
29
+ │ │ │
30
+ │ ┌────┴────┐ │
31
+ │ │ OAuth? │──(yes)──► JWT Validation (JWKS/jose) │
32
+ │ └────┬────┘ ├─ Signature verification │
33
+ │ │(no) ├─ Issuer/audience/expiry checks │
34
+ │ │ └─ Scope extraction → req.auth │
35
+ │ ▼ │
36
+ │ Token Auth? ──(MCP_AUTH_TOKEN set)──► Simple comparison │
37
+ │ │(no) │
38
+ │ ▼ │
39
+ │ No Auth ──► Allow all requests │
40
+ │ │
41
+ │ Route Handler ──► Scope Enforcement (tool group → scope) │
42
+ └──────────────────────────────────────────────────────────────┘
43
+ ```
44
+
45
+ ## Module Structure (`src/auth/` — 11 files)
46
+
47
+ | File | Purpose | Lines |
48
+ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ----- |
49
+ | `types.ts` | RFC 9728/8414/7591 type definitions, config interfaces | ~250 |
50
+ | `errors.ts` | OAuth error hierarchy (`OAuthError` extends server base class + `httpStatus`, `wwwAuthenticate`, `AUTH_` prefixed codes) | ~200 |
51
+ | `scopes.ts` | Scope definitions, hierarchy, tool group → scope mapping, utilities | ~200 |
52
+ | `token-validator.ts` | JWT validation via `jose`, JWKS caching, claim extraction | ~275 |
53
+ | `oauth-resource-server.ts` | RFC 9728 Protected Resource Metadata endpoint | ~170 |
54
+ | `authorization-server-discovery.ts` | RFC 8414 metadata discovery with TTL caching | ~260 |
55
+ | `scope-map.ts` | O(1) reverse lookup: tool name → required scope | ~50 |
56
+ | `auth-context.ts` | `AsyncLocalStorage` per-request auth context | ~50 |
57
+ | `middleware.ts` | Express middleware for token extraction & scope enforcement | ~520 |
58
+ | `transport-agnostic.ts` | Transport-agnostic auth utilities (`createAuthenticatedContext`, `validateAuth`, `formatOAuthError`) | ~100 |
59
+ | `index.ts` | Barrel re-exports | ~40 |
60
+
61
+ > [!TIP]
62
+ > **Auth module submodule variant:** For complex servers (db-mcp), `middleware.ts` → `middleware/index.ts` and `scopes.ts` → `scopes/index.ts` when these files exceed ~500 lines. All other files remain flat.
63
+
64
+ ## RFC Compliance
65
+
66
+ | RFC | Component | What It Does |
67
+ | ------------ | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
68
+ | **RFC 9728** | `oauth-resource-server.ts` | Serves `GET /.well-known/oauth-protected-resource` — tells clients which auth servers to use and what scopes are supported |
69
+ | **RFC 8414** | `authorization-server-discovery.ts` | Fetches `GET {issuer}/.well-known/oauth-authorization-server` — discovers token/JWKS endpoints |
70
+ | **RFC 7591** | `types.ts` | Type definitions for dynamic client registration (optional) |
71
+ | **RFC 8707** | Token validation | Resource Indicators — binds tokens to specific MCP server URIs |
72
+
73
+ ### Client ID Metadata Documents (CIMDs) — MCP 2025-11-25
74
+
75
+ The **preferred** client registration mechanism. Clients use HTTPS URLs as `client_id`, pointing to a JSON metadata document. This addresses the common MCP scenario where servers and clients have no pre-existing relationship.
76
+
77
+ **Client requirements:**
78
+
79
+ - Host metadata at an HTTPS URL with a path component (e.g., `https://app.example.com/client.json`)
80
+ - Document MUST include: `client_id`, `client_name`, `redirect_uris`
81
+ - `client_id` value must match the document URL exactly
82
+
83
+ **Server requirements:**
84
+
85
+ - Fetch metadata when encountering URL-formatted `client_id`
86
+ - Validate `client_id` matches URL exactly
87
+ - Cache metadata respecting HTTP cache headers
88
+ - Validate redirect URIs against the metadata document
89
+
90
+ ```json
91
+ {
92
+ "client_id": "https://app.example.com/oauth/client-metadata.json",
93
+ "client_name": "Example MCP Client",
94
+ "redirect_uris": ["http://127.0.0.1:3000/callback"],
95
+ "grant_types": ["authorization_code"],
96
+ "response_types": ["code"],
97
+ "token_endpoint_auth_method": "none"
98
+ }
99
+ ```
100
+
101
+ ### Resource Indicators (RFC 8707) — MCP 2025-11-25
102
+
103
+ MCP clients MUST include the `resource` parameter in both authorization and token requests to bind tokens to a specific MCP server:
104
+
105
+ - Use the canonical URI of the target MCP server
106
+ - Prevents token replay across different servers
107
+ - Authorization servers validate the `resource` parameter matches expected values
108
+
109
+ ### Incremental Scope Consent — MCP 2025-11-25
110
+
111
+ Support step-up authorization for runtime scope escalation:
112
+
113
+ **Server-side (403 response):**
114
+
115
+ ```http
116
+ HTTP/1.1 403 Forbidden
117
+ WWW-Authenticate: Bearer error="insufficient_scope",
118
+ scope="files:read files:write",
119
+ resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource"
120
+ ```
121
+
122
+ **Scope inclusion strategies:**
123
+ | Strategy | What to include |
124
+ |----------|----------------|
125
+ | Minimum | Only newly-required scopes + existing required scopes |
126
+ | Recommended | Existing + newly required scopes (prevents losing permissions) |
127
+ | Extended | Existing + new + commonly related scopes |
128
+
129
+ **Client-side (step-up flow):**
130
+
131
+ 1. Parse error info from `WWW-Authenticate` header
132
+ 2. Determine required scopes from `scope` parameter or fallback to `scopes_supported`
133
+ 3. Re-authorize with expanded scope set
134
+ 4. Retry original request (with retry limit to avoid loops)
135
+
136
+ ## Scope Model
137
+
138
+ ### Three-Tier Hierarchy
139
+
140
+ ```
141
+ full (superscope — grants everything)
142
+ └── admin
143
+ └── write
144
+ └── read
145
+ ```
146
+
147
+ Each scope **inherits** all scopes below it: `admin` grants `write` + `read`.
148
+
149
+ ### Tool Group → Scope Mapping
150
+
151
+ Map each tool group to a single scope. The mapping is server-specific but follows this pattern:
152
+
153
+ | Scope | Typical Tool Groups | Rationale |
154
+ | ------- | ------------------------------------------------------------- | --------------------------------------------------- |
155
+ | `read` | core, search, analytics, relationships, export, introspection | Read-only operations |
156
+ | `write` | github, team, migration | Mutations to external systems |
157
+ | `admin` | admin, backup, codemode | Destructive, administrative, or elevated operations |
158
+
159
+ **Implementation pattern** (`scopes.ts`):
160
+
161
+ ```typescript
162
+ export const TOOL_GROUP_SCOPES: Record<string, string> = {
163
+ core: 'read',
164
+ search: 'read',
165
+ analytics: 'read',
166
+ admin: 'admin',
167
+ backup: 'admin',
168
+ codemode: 'admin',
169
+ // ... server-specific groups
170
+ }
171
+ ```
172
+
173
+ ### Reverse Lookup (`scope-map.ts`)
174
+
175
+ Build an O(1) map from individual tool names → required scope at startup:
176
+
177
+ ```typescript
178
+ const toolScopeMap = new Map<string, string>()
179
+ for (const [group, tools] of Object.entries(TOOL_GROUPS)) {
180
+ const scope = TOOL_GROUP_SCOPES[group] ?? 'admin'
181
+ for (const toolName of tools) {
182
+ toolScopeMap.set(toolName, scope)
183
+ }
184
+ }
185
+
186
+ export function getRequiredScope(toolName: string): string {
187
+ return toolScopeMap.get(toolName) ?? 'admin' // Fail-closed: unknown tools require admin
188
+ }
189
+ ```
190
+
191
+ ## Error Hierarchy
192
+
193
+ All OAuth errors extend the server's base error class (e.g., `OAuthError extends DbMcpError`) with `httpStatus` and `wwwAuthenticate`:
194
+
195
+ ```typescript
196
+ {Server}McpError (base — code, category, suggestion, recoverable, toResponse())
197
+ └── OAuthError (adds httpStatus, wwwAuthenticate; category auto-inferred from status)
198
+ ├── TokenMissingError → 401, AUTH_TOKEN_MISSING, category: authentication
199
+ ├── InvalidTokenError → 401, AUTH_TOKEN_INVALID, category: authentication
200
+ ├── TokenExpiredError → 401, AUTH_TOKEN_EXPIRED, category: authentication
201
+ ├── InvalidSignatureError → 401, AUTH_SIGNATURE_INVALID, category: authentication
202
+ ├── InsufficientScopeError → 403, AUTH_SCOPE_DENIED, category: authorization
203
+ ├── AuthServerDiscoveryError → 503, AUTH_DISCOVERY_FAILED, category: internal
204
+ ├── JwksFetchError → 503, AUTH_JWKS_FETCH_FAILED, category: internal
205
+ └── ClientRegistrationError → 500, AUTH_REGISTRATION_FAILED, category: internal
206
+ ```
207
+
208
+ **Key changes from March 2026 harmonization:**
209
+
210
+ - All error codes prefixed with `AUTH_` (e.g., `TOKEN_MISSING` → `AUTH_TOKEN_MISSING`)
211
+ - Category auto-inferred: 401 → `AUTHENTICATION`, 403 → `AUTHORIZATION`, 5xx → `INTERNAL`
212
+ - `toResponse()` inherited from base class returns full `ErrorResponse` with code, category, suggestion, recoverable
213
+ - Deprecated standalone `getWWWAuthenticateHeader()` utility — removed from barrel export
214
+
215
+ > [!TIP]
216
+ > OAuthError extends the server's typed base class. The only server-specific customization is the `extends` declaration (e.g., `extends DbMcpError` vs `extends PostgresMcpError`). All other OAuth error logic is portable.
217
+
218
+ ## Token Validation (`token-validator.ts`)
219
+
220
+ Uses `jose` (transitive dependency via `@modelcontextprotocol/sdk`) — no extra install needed.
221
+
222
+ Key behaviors:
223
+
224
+ - Creates `createRemoteJWKSet()` once with TTL-based caching
225
+ - Validates with `jwtVerify(token, jwks, { issuer, audience, clockTolerance })`
226
+ - Extracts scopes from `scope` claim (space-delimited string) or `scopes` claim (array)
227
+ - Maps `jose` error classes → typed OAuth errors:
228
+ - `JWTExpired` → `TokenExpiredError`
229
+ - `JWSSignatureVerificationFailed` → `InvalidTokenError`
230
+ - `JWTClaimValidationFailed` → `InvalidTokenError`
231
+
232
+ ## Middleware Pattern (`middleware.ts`)
233
+
234
+ The middleware file exports both **Express-specific** and **transport-agnostic** utilities:
235
+
236
+ ### Express Middleware
237
+
238
+ ```typescript
239
+ // Main auth middleware — extracts + validates Bearer token
240
+ createAuthMiddleware(config) → RequestHandler
241
+
242
+ // Scope enforcement
243
+ requireScope(scope) → RequestHandler // Single scope check
244
+ requireAnyScope(scopes) → RequestHandler // Any of multiple scopes
245
+ requireToolScope(tool) → RequestHandler // Tool-specific scope via scope-map
246
+
247
+ // Error handler (add after routes)
248
+ oauthErrorHandler → ErrorRequestHandler
249
+ ```
250
+
251
+ ### Transport-Agnostic Utilities
252
+
253
+ ```typescript
254
+ // For any transport (stdio, HTTP, WebSocket, etc.)
255
+ extractBearerToken(authHeader) → string | null
256
+ createAuthenticatedContext(authHeader, validator) → AuthenticatedContext
257
+ validateAuth(authHeader, validator, options) → AuthenticatedContext // throws
258
+ formatOAuthError(error) → { status, body }
259
+ ```
260
+
261
+ ### Public Path Exemption
262
+
263
+ ```typescript
264
+ // Well-known paths are ALWAYS public (RFC requirement)
265
+ if (path.startsWith('/.well-known/')) return true
266
+ // Health endpoint is always public
267
+ if (path === '/health') return true
268
+ ```
269
+
270
+ ## CLI Flags & Environment Variables
271
+
272
+ | CLI Flag | Env Variable | Default | Description |
273
+ | ----------------------------- | ----------------------- | ------- | -------------------- |
274
+ | `--oauth-enabled` | `OAUTH_ENABLED` | `false` | Enable OAuth 2.1 |
275
+ | `--oauth-issuer <url>` | `OAUTH_ISSUER` | — | Issuer URL |
276
+ | `--oauth-audience <aud>` | `OAUTH_AUDIENCE` | — | Expected audience |
277
+ | `--oauth-jwks-uri <url>` | `OAUTH_JWKS_URI` | — | JWKS endpoint |
278
+ | `--oauth-clock-tolerance <s>` | `OAUTH_CLOCK_TOLERANCE` | `30` | Clock skew tolerance |
279
+
280
+ **Wiring in `cli.ts`:**
281
+
282
+ ```typescript
283
+ .option('--oauth-enabled', 'Enable OAuth 2.1', false)
284
+ .option('--oauth-issuer <url>', 'OAuth issuer URL', process.env.OAUTH_ISSUER)
285
+ .option('--oauth-audience <aud>', 'JWT audience', process.env.OAUTH_AUDIENCE)
286
+ // ... pass these through ServerOptions → HttpTransportConfig
287
+ ```
288
+
289
+ ## Server Integration Pattern
290
+
291
+ In `server.ts` (the HTTP transport), conditionally wire OAuth:
292
+
293
+ ```typescript
294
+ // 1. Always register the RFC 9728 metadata endpoint
295
+ app.get('/.well-known/oauth-protected-resource', resourceServer.getMetadataHandler())
296
+
297
+ // 2. Conditionally apply OAuth middleware
298
+ if (config.oauthEnabled) {
299
+ const tokenValidator = new TokenValidator({ issuer, audience, jwksUri, clockTolerance })
300
+ const authMiddleware = createAuthMiddleware({ tokenValidator, resourceServer })
301
+ app.use(authMiddleware)
302
+ } else if (config.authToken) {
303
+ // Simple token auth fallback — uses crypto.timingSafeEqual, NOT raw ===
304
+ app.use(basicTokenMiddleware(config.authToken))
305
+ }
306
+ ```
307
+
308
+ ## Testing Patterns (`src/auth/__tests__/` — 8 files)
309
+
310
+ | Test File | What It Covers |
311
+ | ---------------------------------------- | ---------------------------------------------------------------------------- |
312
+ | `errors.test.ts` | Error hierarchy, HTTP status codes, WWW-Authenticate headers, type guards |
313
+ | `scopes.test.ts` | Scope hierarchy, parsing, validation, tool group mapping, accessible tools |
314
+ | `scope-map.test.ts` | O(1) reverse lookup, full coverage of all tool groups |
315
+ | `token-validator.test.ts` | JWT validation (mocked `jose`), scope parsing, error mapping, JWKS cache |
316
+ | `auth-context.test.ts` | AsyncLocalStorage context, isolation between requests |
317
+ | `oauth-resource-server.test.ts` | RFC 9728 metadata, caching, scope support, accessors |
318
+ | `authorization-server-discovery.test.ts` | RFC 8414 discovery (mocked `fetch`), caching, validation |
319
+ | `middleware.test.ts` | Token extraction, scope enforcement, error handler, transport-agnostic utils |
320
+
321
+ **Mocking strategy:**
322
+
323
+ - Mock `jose` module for token validation tests (avoid real JWKS)
324
+ - Mock `globalThis.fetch` for discovery tests (avoid real network)
325
+ - Use `as never` casts for Express req/res in middleware tests
326
+
327
+ **Token Validation Hardening:**
328
+
329
+ - **JWT claims sanitization:** In `token-validator.ts`, filter prototype-polluting keys (`__proto__`, `constructor`, `prototype`) from JWT payload before spreading into `TokenClaims`. This prevents prototype pollution attacks via crafted JWT tokens.
330
+ - **Constant-time token comparison:** In `basicTokenMiddleware`, use `crypto.timingSafeEqual(Buffer.from(provided), Buffer.from(expected))` with a length pre-check. Short-circuiting on different lengths is acceptable since length is not the secret.
331
+ - **Bearer auth scope limitation:** Emit a startup warning when simple bearer auth (`--auth-token`) is configured: `"Simple token auth does not enforce per-tool scopes. Use OAuth 2.1 for granular access control."` This prevents operators from assuming bearer tokens provide scope-level access control.
332
+
333
+ ## Integration Checklist
334
+
335
+ When adding OAuth to a new MCP server:
336
+
337
+ - [ ] Create `src/auth/` directory with all 11 files
338
+ - [ ] Add `jose` to dependencies (or verify it's a transitive dep of `@modelcontextprotocol/sdk`)
339
+ - [ ] Define server-specific `TOOL_GROUP_SCOPES` in `scopes.ts`
340
+ - [ ] Build `scope-map.ts` from your server's `TOOL_GROUPS`
341
+ - [ ] Add 5 OAuth CLI flags to `cli.ts` with env var fallbacks
342
+ - [ ] Add OAuth fields to `HttpTransportConfig` and `ServerOptions`
343
+ - [ ] Wire OAuth middleware into `server.ts` with conditional enablement
344
+ - [ ] Register `/.well-known/oauth-protected-resource` endpoint
345
+ - [ ] Write 8 test files in `src/auth/__tests__/`
346
+ - [ ] Update README, DOCKER_README, wiki (Security + HTTP-Transport)
347
+ - [ ] Add CHANGELOG entry
348
+
349
+ ## Documentation Updates
350
+
351
+ When adding OAuth, update these documentation sections:
352
+
353
+ | Doc | Updates Needed |
354
+ | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
355
+ | **README.md** | Add OAuth well-known to endpoint table, OAuth to security features, OAuth env vars, dedicated OAuth 2.1 section (compliance table + scopes + quick start) |
356
+ | **DOCKER_README.md** | Same endpoint table, security features, env vars, Docker run example with `-e OAUTH_*` |
357
+ | **Wiki/Security.md** | Full OAuth section (enabling, how it works, fallback), update access control levels, add to self-audit checklist |
358
+ | **Wiki/HTTP-Transport.md** | OAuth endpoint in table, 5 OAuth CLI flags in configuration reference |
359
+ | **CHANGELOG.md** | OAuth 2.1 module entry under `[Unreleased]` |
@@ -0,0 +1,208 @@
1
+ # Reference Architecture
2
+
3
+ Canonical directory layout for MCP servers in the fleet. All new servers should converge toward this structure.
4
+
5
+ > Read this reference when scaffolding a new MCP server or reviewing project structure.
6
+
7
+ ---
8
+
9
+ ## Directory Layout
10
+
11
+ ```
12
+ src/
13
+ ├── cli.ts # CLI entry point (delegates to cli/ submodules)
14
+ ├── index.ts # Barrel re-export for library consumers
15
+
16
+ ├── cli/ # CLI submodules (split when cli.ts >300 lines)
17
+ │ ├── args.ts # Argument parsing, transport selection
18
+ │ ├── config.ts # DB/OAuth config builders
19
+ │ ├── server.ts # stdio/HTTP server starters
20
+ │ └── index.ts # Barrel
21
+
22
+ ├── server/
23
+ │ ├── mcp-server.ts # McpServer setup, adapter registration
24
+ │ ├── built-in-tools.ts # Built-in tool registration (server_info, server_health, list_adapters)
25
+ │ ├── help-resources.ts # Help resource registration (filtered by --tool-filter)
26
+ │ └── audit-tools.ts # Audit resource + snapshot resource registration (when audit enabled)
27
+
28
+ ├── types/ # Core TS types (barrel: types/index.ts)
29
+ │ ├── adapters.ts # ToolDefinition, ResourceDefinition, PromptDefinition
30
+ │ ├── auth.ts # OAuthConfig, OAuthScope, TokenClaims
31
+ │ ├── database.ts # DatabaseConfig, QueryResult, ColumnInfo, TableInfo
32
+ │ ├── errors.ts # {Server}McpError base + subclasses (adapter-style flat)
33
+ │ ├── filtering.ts # ToolGroup, MetaGroup, ToolFilterRule
34
+ │ ├── server.ts # TransportType, McpServerConfig
35
+ │ └── index.ts # Barrel (also re-exports error classes)
36
+
37
+ ├── constants/
38
+ │ ├── server-instructions.ts # Generated or runtime: slim INSTRUCTIONS + HELP_CONTENT/GOTCHAS_CONTENT
39
+ │ ├── server-instructions.md # (Hybrid approach) Single source markdown for instruction levels
40
+ │ └── server-instructions/ # (Build-time approach) Per-group .md source files
41
+
42
+ ├── filtering/
43
+ │ ├── tool-constants.ts # (Optional) TOOL_GROUPS arrays, META_GROUPS shortcuts — split when imported by 3+ modules
44
+ │ └── tool-filter.ts # ToolFilter class (may include group constants for simpler servers)
45
+
46
+ ├── utils/
47
+ │ ├── annotations.ts # MCP tool annotation helpers
48
+ │ ├── icons.ts # MCP icon definitions per tool group
49
+ │ ├── identifiers.ts # SQL identifier validation/sanitization
50
+ │ ├── where-clause.ts # WHERE clause builder/validator
51
+ │ ├── fts-config.ts # FTS configuration name validation (SQL injection prevention)
52
+ │ ├── query-helpers.ts # coerceNumber(), coerceLimit(), buildLimitClause(), DEFAULT_QUERY_LIMIT, toStr()
53
+ │ ├── validate-path.ts # Path traversal validation (backup, dump, restore, attach tools)
54
+ │ ├── insights-manager.ts # In-memory insights memo (memo://insights resource)
55
+ │ ├── progress-utils.ts # MCP progress notification helpers (sendProgress, buildProgressContext)
56
+ │ ├── resource-annotations.ts # Resource annotation presets (HIGH/MEDIUM/LOW_PRIORITY, ASSISTANT_FOCUSED)
57
+ │ ├── error-suggestions.ts # Pattern-based error suggestions + findSuggestion() (auto-refinement)
58
+ │ ├── version.ts # SSoT version (reads package.json via createRequire)
59
+ │ ├── index.ts # Barrel
60
+ │ ├── errors/ # Error class hierarchy (non-adapter servers — full decomposition)
61
+ │ │ ├── base.ts # Abstract base — auto-refines generic codes
62
+ │ │ ├── categories.ts # ErrorCategory enum + ErrorResponse interface
63
+ │ │ ├── classes.ts # Concrete error subclasses
64
+ │ │ ├── error-response-fields.ts # ErrorFieldsMixin (SSoT)
65
+ │ │ ├── format.ts # formatHandlerError()
66
+ │ │ ├── suggestions.ts # Fuzzy typo hints
67
+ │ │ └── index.ts
68
+ │ └── logger/ # Logger (subdirectory for complex servers)
69
+ │ ├── logger.ts # Structured JSON logger
70
+ │ ├── module-logger.ts # createModuleLogger() factory
71
+ │ ├── error-codes.ts # Module-prefixed codes
72
+ │ ├── types.ts
73
+ │ └── index.ts
74
+
75
+ ├── pool/ # DB connection pool (separate from adapter)
76
+ │ └── connection-pool.ts # Pool manager with health checks
77
+
78
+ ├── auth/ # OAuth 2.1 implementation (11 files)
79
+ │ ├── auth-context.ts # AsyncLocalStorage per-request auth context
80
+ │ ├── authorization-server-discovery.ts # RFC 8414 metadata discovery with TTL caching
81
+ │ ├── errors.ts # OAuthError extends server base class (httpStatus, wwwAuthenticate)
82
+ │ ├── middleware.ts # Express middleware — token extraction, scope enforcement, error handler
83
+ │ ├── oauth-resource-server.ts # RFC 9728 /.well-known/oauth-protected-resource
84
+ │ ├── scope-map.ts # O(1) reverse lookup: tool name → required scope
85
+ │ ├── scopes.ts # Scope definitions, hierarchy, tool group → scope mapping
86
+ │ ├── token-validator.ts # JWT validation via jose, JWKS caching, claim extraction
87
+ │ ├── transport-agnostic.ts # Transport-agnostic auth utilities (createAuthenticatedContext, validateAuth)
88
+ │ ├── types.ts # RFC 9728/8414/7591 type definitions, config interfaces
89
+ │ └── index.ts # Barrel
90
+ │ # Variant for complex auth (db-mcp): middleware.ts → middleware/index.ts, scopes.ts → scopes/index.ts
91
+
92
+ ├── audit/ # Audit logging subsystem (servers with --audit-log)
93
+ │ ├── types.ts # AuditEntry, AuditConfig, AuditStats interfaces
94
+ │ ├── logger.ts # Async-buffered JSONL writer with log rotation
95
+ │ ├── interceptor.ts # AuditInterceptor — scope-based tool invocation filtering
96
+ │ ├── backup-manager.ts # Pre-mutation DDL snapshot generator (.tar.gz compressed)
97
+ │ └── index.ts # Barrel
98
+
99
+ ├── transports/
100
+ │ ├── index.ts # Barrel
101
+ │ └── http/
102
+ │ ├── server.ts # HTTP/SSE transport orchestrator (route registration, server lifecycle)
103
+ │ ├── streamable.ts # Streamable HTTP transport handler (POST/GET/DELETE /mcp)
104
+ │ ├── stateless.ts # Stateless HTTP transport handler (serverless mode)
105
+ │ ├── legacy-sse.ts # Legacy SSE transport handler (GET /sse, POST /messages)
106
+ │ ├── handlers.ts # Route handlers (health, 404, shared utilities)
107
+ │ ├── security.ts # Security headers, rate limiting, CORS, DNS rebinding, body parsing
108
+ │ ├── types.ts # Config interfaces, constants, timeout constants
109
+ │ └── index.ts # Barrel
110
+
111
+ ├── codemode/ # Code Mode sandbox (10 files for non-adapter, 5+api/ for adapter)
112
+ │ ├── sandbox.ts # SandboxPool lifecycle (LRU script cache, vm.createContext)
113
+ │ ├── sandbox-factory.ts # Runtime mode selection (CodeModeSandbox or WorkerSandbox)
114
+ │ ├── auto-return.ts # Last-expression auto-return transform (IIFE helper)
115
+ │ ├── worker-sandbox.ts # Worker thread (MessagePort RPC, resource limits, hard timeout)
116
+ │ ├── worker-script.ts # Worker entry point (async Proxy API, vm isolation)
117
+ │ ├── api.ts # Tool API bridge — non-adapter servers (single file + api-constants.ts)
118
+ │ ├── api-constants.ts # JSON-RPC codes, method names, aliases, examples, positional maps
119
+ │ ├── security.ts # Code validation, blocked patterns, rate limiting, result size
120
+ │ ├── types.ts # SandboxOptions, PoolOptions, SecurityConfig, RPC types
121
+ │ └── index.ts # Barrel
122
+ │ # Adapter servers with large tool sets (50+ tools) use api/ subdirectory instead:
123
+ │ # api/
124
+ │ # index.ts # Main API bridge — exposes tools to sandbox
125
+ │ # maps.ts # Tool name → handler function mapping
126
+ │ # group-api.ts # Per-group API surface generation
127
+ │ # aliases.ts # Tool alias resolution
128
+ │ # normalize.ts # Parameter normalization utilities
129
+
130
+ ├── adapters/ # Adapter-based servers (db-mcp, postgres-mcp, mysql-mcp)
131
+ │ ├── database-adapter.ts # Abstract base class
132
+ │ ├── query-validation.ts # SELECT vs write detection
133
+ │ └── {engine}/
134
+ │ ├── {engine}-adapter.ts # Concrete adapter
135
+ │ ├── transaction-operations.ts # Transaction helper operations (extracted from adapter)
136
+ │ ├── index.ts # Barrel
137
+ │ ├── schema-operations/ # Schema introspection queries
138
+ │ │ ├── describe.ts # Table/column metadata queries
139
+ │ │ ├── list.ts # List tables/schemas/indexes
140
+ │ │ └── index.ts # Barrel
141
+ │ ├── schemas/ # Zod schemas (per group, never inline)
142
+ │ │ ├── error-response-fields.ts # ErrorFieldsMixin (SSoT — adapter servers store here)
143
+ │ │ └── {group}/ # One subdirectory per tool group
144
+ │ ├── prompts/ # MCP prompts
145
+ │ ├── resources/ # MCP resources
146
+ │ └── tools/ # Tool handler files (per group subdirectories)
147
+ │ ├── column-validation.ts # Shared existence validators
148
+ │ ├── core/error-parser.ts # Engine-specific error code mapping
149
+ │ ├── core/error-helpers.ts # formatHandlerError() orchestrator
150
+ │ └── {group}/ # One subdirectory per tool group
151
+
152
+ ├── handlers/ # Non-adapter servers (e.g., memory-journal-mcp)
153
+ │ ├── tools/ # Tool handlers (per-group files or subdirectories)
154
+ │ │ ├── index.ts # getTools() / callTool() dispatch, tool map cache
155
+ │ │ ├── schemas.ts # Shared Zod schemas (cross-group)
156
+ │ │ ├── error-fields-mixin.ts # Re-export stub → utils/errors/error-response-fields.ts
157
+ │ │ ├── {group}.ts # Single-file tool groups
158
+ │ │ ├── {group}/ # Multi-file tool groups (e.g., github/, team/)
159
+ │ │ └── team/ # Team DB mirrored tools (if multi-DB)
160
+ │ ├── resources/ # MCP Resource handlers
161
+ │ │ ├── index.ts # Resource registration barrel
162
+ │ │ ├── shared.ts # Shared helpers (formatters, renderers)
163
+ │ │ ├── help.ts # Dynamic help resources ({prefix}://help)
164
+ │ │ ├── templates.ts # URI template resources
165
+ │ │ ├── {domain}.ts # Domain resources (github.ts, graph.ts, team.ts)
166
+ │ │ └── core/ # Core static resources
167
+ │ │ ├── briefing/ # Briefing system (modular sections)
168
+ │ │ ├── health.ts # Health resource
169
+ │ │ └── utilities.ts # Utility resources
170
+ │ └── prompts/ # MCP Prompt handlers
171
+ │ ├── index.ts
172
+ │ ├── workflow.ts
173
+ │ └── {domain}.ts
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Structural Rules
179
+
180
+ - Every directory has `index.ts` barrel
181
+ - Imports use `.js` extension (ESM)
182
+ - After splitting `foo.ts` → `foo/` directory: update imports from `./foo.js` → `./foo/index.js`
183
+ - Output schemas: one file per tool group, never inline
184
+ - **Error hierarchy (two valid patterns):**
185
+ - _Non-adapter servers_ (db-mcp, memory-journal-mcp): Full `utils/errors/` decomposition (7 files) with `ErrorFieldsMixin` in `error-response-fields.ts`
186
+ - _Adapter servers_ (postgres-mcp, mysql-mcp): Flat `types/errors.ts` with `ErrorFieldsMixin` in `schemas/error-response-fields.ts`
187
+ - Both patterns use the same auto-refinement mechanism and `formatHandlerError()` — the difference is organizational
188
+ - **Logger (two valid patterns):**
189
+ - _Complex servers_: `utils/logger/` subdirectory (5 files: logger, module-logger, error-codes, types, index)
190
+ - _Simpler servers_: Flat `utils/logger.ts` + `utils/module-logger.ts` (2 files)
191
+ - Error classes: importable from both direct path and `types/` barrel (re-exported subset)
192
+ - Shared helpers: `column-validation.ts`, `helpers.ts`, `schemas.ts` per group — no tools registered in these files
193
+ - Connection pool: separate `pool/` directory when pool management has its own lifecycle (health checks, size tuning)
194
+ - Engine error parser: `tools/core/error-parser.ts` maps DB-native error codes to structured errors
195
+ - **Codemode API bridge (two valid patterns):**
196
+ - _Non-adapter servers_: Single `api.ts` + `api-constants.ts` (aliases, examples, positional maps co-located)
197
+ - _Adapter servers_ (50+ tools): `api/` subdirectory with dedicated `maps.ts`, `group-api.ts`, `aliases.ts`, `normalize.ts`
198
+ - **Server file extraction (progressive decomposition):**
199
+ - When `mcp-server.ts` exceeds ~400 lines, extract into `server/` with dedicated files:
200
+ - `built-in-tools.ts` — server_info, server_health, list_adapters registration
201
+ - `help-resources.ts` — help resource registration filtered by `--tool-filter`
202
+ - `audit-tools.ts` — audit resource + snapshot resource (when audit enabled)
203
+ - **Auth module (two valid patterns):**
204
+ - _Standard_: Flat 11-file `src/auth/` directory
205
+ - _Complex servers_ (db-mcp): `middleware.ts` → `middleware/index.ts` and `scopes.ts` → `scopes/index.ts` when these files exceed ~500 lines
206
+ - **Audit subsystem:** `src/audit/` directory (4 files + barrel) for servers with `--audit-log`. Separate from `utils/` because it has its own lifecycle (buffered writes, log rotation, graceful close)
207
+ - **Path validation:** `utils/validate-path.ts` for tools that accept file paths. Resolves canonical path, rejects `..` traversal, enforces `ALLOWED_IO_ROOTS` boundary
208
+ - **Insights manager:** `utils/insights-manager.ts` for servers with analysis/memo capabilities. In-memory bounded list exposed via `memo://insights` resource