claude-mpm 4.25.10__py3-none-any.whl → 5.1.8__py3-none-any.whl

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 (507) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
  4. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  5. claude_mpm/agents/WORKFLOW.md +4 -4
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent_loader.py +10 -35
  9. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
  10. claude_mpm/agents/templates/context-management-examples.md +544 -0
  11. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  12. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  13. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  14. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  15. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  16. claude_mpm/cli/__init__.py +28 -3
  17. claude_mpm/cli/commands/__init__.py +2 -0
  18. claude_mpm/cli/commands/agent_source.py +774 -0
  19. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  20. claude_mpm/cli/commands/agents.py +959 -36
  21. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  22. claude_mpm/cli/commands/agents_discover.py +338 -0
  23. claude_mpm/cli/commands/auto_configure.py +537 -239
  24. claude_mpm/cli/commands/config.py +7 -4
  25. claude_mpm/cli/commands/configure.py +924 -45
  26. claude_mpm/cli/commands/configure_navigation.py +63 -46
  27. claude_mpm/cli/commands/doctor.py +10 -2
  28. claude_mpm/cli/commands/local_deploy.py +1 -4
  29. claude_mpm/cli/commands/postmortem.py +401 -0
  30. claude_mpm/cli/commands/run.py +1 -39
  31. claude_mpm/cli/commands/skill_source.py +694 -0
  32. claude_mpm/cli/commands/skills.py +322 -19
  33. claude_mpm/cli/executor.py +22 -3
  34. claude_mpm/cli/interactive/agent_wizard.py +1028 -43
  35. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  36. claude_mpm/cli/parsers/agents_parser.py +256 -4
  37. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  38. claude_mpm/cli/parsers/base_parser.py +25 -0
  39. claude_mpm/cli/parsers/config_parser.py +96 -43
  40. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  41. claude_mpm/cli/parsers/skills_parser.py +7 -0
  42. claude_mpm/cli/parsers/source_parser.py +138 -0
  43. claude_mpm/cli/startup.py +456 -103
  44. claude_mpm/cli/startup_display.py +4 -4
  45. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  46. claude_mpm/commands/mpm-agents-detect.md +9 -0
  47. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  48. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  49. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  50. claude_mpm/commands/mpm-doctor.md +9 -0
  51. claude_mpm/commands/mpm-help.md +14 -2
  52. claude_mpm/commands/mpm-init.md +9 -0
  53. claude_mpm/commands/mpm-monitor.md +9 -0
  54. claude_mpm/commands/mpm-postmortem.md +123 -0
  55. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  56. claude_mpm/commands/mpm-status.md +9 -0
  57. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  58. claude_mpm/commands/mpm-ticket-view.md +552 -0
  59. claude_mpm/commands/mpm-version.md +9 -0
  60. claude_mpm/commands/mpm.md +10 -0
  61. claude_mpm/config/agent_presets.py +488 -0
  62. claude_mpm/config/agent_sources.py +325 -0
  63. claude_mpm/config/skill_presets.py +392 -0
  64. claude_mpm/config/skill_sources.py +590 -0
  65. claude_mpm/constants.py +1 -0
  66. claude_mpm/core/claude_runner.py +5 -34
  67. claude_mpm/core/config.py +16 -0
  68. claude_mpm/core/framework/__init__.py +3 -16
  69. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  70. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  71. claude_mpm/core/interactive_session.py +83 -7
  72. claude_mpm/core/oneshot_session.py +71 -8
  73. claude_mpm/core/protocols/__init__.py +23 -0
  74. claude_mpm/core/protocols/runner_protocol.py +103 -0
  75. claude_mpm/core/protocols/session_protocol.py +131 -0
  76. claude_mpm/core/shared/singleton_manager.py +11 -4
  77. claude_mpm/core/system_context.py +38 -0
  78. claude_mpm/core/unified_config.py +22 -0
  79. claude_mpm/experimental/cli_enhancements.py +1 -5
  80. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  85. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  86. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  87. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  88. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  89. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  90. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  91. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  92. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  93. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  94. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  95. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  96. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  97. claude_mpm/models/git_repository.py +198 -0
  98. claude_mpm/services/agents/agent_builder.py +45 -9
  99. claude_mpm/services/agents/agent_preset_service.py +238 -0
  100. claude_mpm/services/agents/agent_selection_service.py +484 -0
  101. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  102. claude_mpm/services/agents/cache_git_manager.py +621 -0
  103. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  104. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  105. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  106. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  107. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  108. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  109. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  110. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  111. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  112. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  113. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  114. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  115. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  116. claude_mpm/services/agents/git_source_manager.py +629 -0
  117. claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
  118. claude_mpm/services/agents/local_template_manager.py +47 -9
  119. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  120. claude_mpm/services/agents/sources/__init__.py +13 -0
  121. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  122. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  123. claude_mpm/services/agents/startup_sync.py +239 -0
  124. claude_mpm/services/agents/toolchain_detector.py +474 -0
  125. claude_mpm/services/analysis/__init__.py +25 -0
  126. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  127. claude_mpm/services/analysis/postmortem_service.py +765 -0
  128. claude_mpm/services/command_deployment_service.py +200 -6
  129. claude_mpm/services/core/base.py +7 -2
  130. claude_mpm/services/core/interfaces/__init__.py +1 -3
  131. claude_mpm/services/core/interfaces/health.py +1 -4
  132. claude_mpm/services/core/models/__init__.py +2 -11
  133. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  134. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  135. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  136. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  137. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  138. claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
  139. claude_mpm/services/git/__init__.py +21 -0
  140. claude_mpm/services/git/git_operations_service.py +494 -0
  141. claude_mpm/services/github/__init__.py +21 -0
  142. claude_mpm/services/github/github_cli_service.py +397 -0
  143. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  144. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  145. claude_mpm/services/instructions/__init__.py +9 -0
  146. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  147. claude_mpm/services/local_ops/__init__.py +3 -13
  148. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  149. claude_mpm/services/local_ops/health_manager.py +1 -4
  150. claude_mpm/services/mcp_config_manager.py +75 -145
  151. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  152. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  153. claude_mpm/services/mcp_service_verifier.py +6 -3
  154. claude_mpm/services/monitor/daemon.py +28 -8
  155. claude_mpm/services/monitor/daemon_manager.py +96 -19
  156. claude_mpm/services/pr/__init__.py +14 -0
  157. claude_mpm/services/pr/pr_template_service.py +329 -0
  158. claude_mpm/services/project/project_organizer.py +4 -0
  159. claude_mpm/services/runner_configuration_service.py +16 -3
  160. claude_mpm/services/session_management_service.py +16 -4
  161. claude_mpm/services/skills/__init__.py +18 -0
  162. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  163. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  164. claude_mpm/services/socketio/server/core.py +1 -4
  165. claude_mpm/services/socketio/server/main.py +1 -3
  166. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  167. claude_mpm/services/unified/unified_deployment.py +1 -5
  168. claude_mpm/services/visualization/__init__.py +1 -5
  169. claude_mpm/templates/questions/__init__.py +2 -7
  170. claude_mpm/templates/questions/pr_strategy.py +1 -4
  171. claude_mpm/templates/questions/project_init.py +1 -4
  172. claude_mpm/templates/questions/ticket_mgmt.py +1 -4
  173. claude_mpm/utils/agent_dependency_loader.py +77 -10
  174. claude_mpm/utils/agent_filters.py +288 -0
  175. claude_mpm/utils/gitignore.py +3 -0
  176. claude_mpm/utils/migration.py +372 -0
  177. claude_mpm/utils/progress.py +387 -0
  178. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
  179. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
  180. claude_mpm/agents/templates/agent-manager.json +0 -273
  181. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  182. claude_mpm/agents/templates/api_qa.json +0 -183
  183. claude_mpm/agents/templates/clerk-ops.json +0 -235
  184. claude_mpm/agents/templates/code_analyzer.json +0 -101
  185. claude_mpm/agents/templates/content-agent.json +0 -358
  186. claude_mpm/agents/templates/dart_engineer.json +0 -307
  187. claude_mpm/agents/templates/data_engineer.json +0 -225
  188. claude_mpm/agents/templates/documentation.json +0 -238
  189. claude_mpm/agents/templates/engineer.json +0 -210
  190. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  191. claude_mpm/agents/templates/golang_engineer.json +0 -270
  192. claude_mpm/agents/templates/imagemagick.json +0 -264
  193. claude_mpm/agents/templates/java_engineer.json +0 -346
  194. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  195. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  196. claude_mpm/agents/templates/memory_manager.json +0 -158
  197. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  198. claude_mpm/agents/templates/ops.json +0 -185
  199. claude_mpm/agents/templates/php-engineer.json +0 -287
  200. claude_mpm/agents/templates/product_owner.json +0 -338
  201. claude_mpm/agents/templates/project_organizer.json +0 -144
  202. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  203. claude_mpm/agents/templates/python_engineer.json +0 -387
  204. claude_mpm/agents/templates/qa.json +0 -243
  205. claude_mpm/agents/templates/react_engineer.json +0 -239
  206. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  207. claude_mpm/agents/templates/research.json +0 -258
  208. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  209. claude_mpm/agents/templates/rust_engineer.json +0 -275
  210. claude_mpm/agents/templates/security.json +0 -202
  211. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  212. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  213. claude_mpm/agents/templates/ticketing.json +0 -181
  214. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  215. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  216. claude_mpm/agents/templates/version_control.json +0 -159
  217. claude_mpm/agents/templates/web_qa.json +0 -400
  218. claude_mpm/agents/templates/web_ui.json +0 -189
  219. claude_mpm/cli/README.md +0 -253
  220. claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
  221. claude_mpm/cli/commands/mpm_init/README.md +0 -365
  222. claude_mpm/cli_module/refactoring_guide.md +0 -253
  223. claude_mpm/commands/mpm-tickets.md +0 -151
  224. claude_mpm/config/agent_capabilities.yaml +0 -658
  225. claude_mpm/config/async_logging_config.yaml +0 -145
  226. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
  227. claude_mpm/d2/.gitignore +0 -22
  228. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
  229. claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
  230. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
  231. claude_mpm/d2/QUICKSTART.md +0 -186
  232. claude_mpm/d2/README.md +0 -232
  233. claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
  234. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
  235. claude_mpm/d2/TESTING.md +0 -288
  236. claude_mpm/d2/index.html +0 -118
  237. claude_mpm/d2/package.json +0 -19
  238. claude_mpm/d2/src/App.svelte +0 -110
  239. claude_mpm/d2/src/components/Header.svelte +0 -153
  240. claude_mpm/d2/src/components/MainContent.svelte +0 -74
  241. claude_mpm/d2/src/components/Sidebar.svelte +0 -85
  242. claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
  243. claude_mpm/d2/src/lib/socketio.js +0 -144
  244. claude_mpm/d2/src/main.js +0 -7
  245. claude_mpm/d2/src/stores/events.js +0 -114
  246. claude_mpm/d2/src/stores/socket.js +0 -108
  247. claude_mpm/d2/src/stores/theme.js +0 -65
  248. claude_mpm/d2/svelte.config.js +0 -12
  249. claude_mpm/d2/vite.config.js +0 -15
  250. claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
  251. claude_mpm/dashboard/BUILD_NUMBER +0 -1
  252. claude_mpm/dashboard/README.md +0 -121
  253. claude_mpm/dashboard/VERSION +0 -1
  254. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  255. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
  256. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
  257. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  258. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
  259. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  260. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
  261. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  262. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
  263. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
  264. claude_mpm/dashboard/react/entries/events.tsx +0 -165
  265. claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
  266. claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
  267. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  268. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
  269. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  270. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  271. claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
  272. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  273. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  274. claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
  275. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  276. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  277. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  278. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  279. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  280. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  281. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  282. claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
  283. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  284. claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
  285. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  286. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  287. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  288. claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
  289. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  290. claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
  291. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  292. claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
  293. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  294. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  295. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  296. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
  297. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  298. claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
  299. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  300. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
  301. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  302. claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
  303. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  304. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
  305. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  306. claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
  307. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  308. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  309. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  310. claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
  311. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  312. claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
  313. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  314. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
  315. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  316. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
  317. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  318. claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
  319. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  320. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  321. claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
  322. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  323. claude_mpm/dashboard/static/built/react/events.js +0 -30
  324. claude_mpm/dashboard/static/built/react/events.js.map +0 -1
  325. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  326. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  327. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  328. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  329. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  330. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  331. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  332. claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
  333. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  334. claude_mpm/dashboard/static/events.html +0 -607
  335. claude_mpm/dashboard/static/index.html +0 -635
  336. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
  337. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  338. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  339. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  340. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  341. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  342. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  343. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  344. claude_mpm/dashboard/static/legacy/files.html +0 -747
  345. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  346. claude_mpm/dashboard/static/monitors.html +0 -431
  347. claude_mpm/dashboard/static/navigation-test-results.md +0 -118
  348. claude_mpm/dashboard/static/production/events.html +0 -659
  349. claude_mpm/dashboard/static/production/main.html +0 -698
  350. claude_mpm/dashboard/static/production/monitors.html +0 -483
  351. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  352. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  353. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  354. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  355. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
  356. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
  357. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
  358. claude_mpm/hooks/README.md +0 -143
  359. claude_mpm/hooks/templates/README.md +0 -180
  360. claude_mpm/hooks/templates/settings.json.example +0 -147
  361. claude_mpm/schemas/agent_schema.json +0 -596
  362. claude_mpm/schemas/frontmatter_schema.json +0 -165
  363. claude_mpm/services/event_bus/README.md +0 -244
  364. claude_mpm/services/events/README.md +0 -303
  365. claude_mpm/services/framework_claude_md_generator/README.md +0 -119
  366. claude_mpm/services/mcp_gateway/README.md +0 -185
  367. claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
  368. claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
  369. claude_mpm/services/static/.gitkeep +0 -2
  370. claude_mpm/services/version_control/VERSION +0 -1
  371. claude_mpm/skills/bundled/.gitkeep +0 -2
  372. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  373. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  374. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  375. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  376. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  377. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  378. claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
  379. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  380. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  381. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  382. claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
  383. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  384. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  385. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  386. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  387. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
  388. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  389. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  390. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  391. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  392. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  393. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  394. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  395. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  396. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  397. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  398. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  399. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  400. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  401. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  402. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  403. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  404. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  405. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  406. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  407. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
  408. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
  409. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
  410. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
  411. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
  412. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
  413. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
  414. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
  415. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
  416. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
  417. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  418. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
  419. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
  420. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  421. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
  422. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  423. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  424. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  425. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  426. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  427. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
  428. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  429. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  430. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  431. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  432. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  433. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  434. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  435. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
  436. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
  437. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
  438. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  439. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  440. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  441. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  442. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  443. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  444. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  445. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  446. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  447. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  448. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  449. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  450. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  451. claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
  452. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  458. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  459. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
  460. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
  461. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
  462. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
  463. claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
  464. claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
  465. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
  466. claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
  467. claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
  468. claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
  469. claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
  472. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  473. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  478. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  479. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
  480. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
  481. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
  482. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
  483. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
  490. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  491. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  492. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  493. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  494. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  495. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  496. claude_mpm/templates/questions/EXAMPLES.md +0 -501
  497. claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
  498. claude_mpm/tools/code_tree_analyzer/README.md +0 -64
  499. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  500. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  501. /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
  502. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  503. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  504. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
  505. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
  506. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
  507. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
@@ -1,916 +0,0 @@
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
- ```typescript
13
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
15
- import { z } from "zod";
16
- import axios, { AxiosError } from "axios";
17
- ```
18
-
19
- ### Server Initialization
20
- ```typescript
21
- const server = new McpServer({
22
- name: "service-mcp-server",
23
- version: "1.0.0"
24
- });
25
- ```
26
-
27
- ### Tool Registration Pattern
28
- ```typescript
29
- server.registerTool("tool_name", {...config}, async (params) => {
30
- // Implementation
31
- });
32
- ```
33
-
34
- ---
35
-
36
- ## MCP TypeScript SDK
37
-
38
- The official MCP TypeScript SDK provides:
39
- - `McpServer` class for server initialization
40
- - `registerTool` method for tool registration
41
- - Zod schema integration for runtime input validation
42
- - Type-safe tool handler implementations
43
-
44
- See the MCP SDK documentation in the references for complete details.
45
-
46
- ## Server Naming Convention
47
-
48
- Node/TypeScript MCP servers must follow this naming pattern:
49
- - **Format**: `{service}-mcp-server` (lowercase with hyphens)
50
- - **Examples**: `github-mcp-server`, `jira-mcp-server`, `stripe-mcp-server`
51
-
52
- The name should be:
53
- - General (not tied to specific features)
54
- - Descriptive of the service/API being integrated
55
- - Easy to infer from the task description
56
- - Without version numbers or dates
57
-
58
- ## Project Structure
59
-
60
- Create the following structure for Node/TypeScript MCP servers:
61
-
62
- ```
63
- {service}-mcp-server/
64
- ├── package.json
65
- ├── tsconfig.json
66
- ├── README.md
67
- ├── src/
68
- │ ├── index.ts # Main entry point with McpServer initialization
69
- │ ├── types.ts # TypeScript type definitions and interfaces
70
- │ ├── tools/ # Tool implementations (one file per domain)
71
- │ ├── services/ # API clients and shared utilities
72
- │ ├── schemas/ # Zod validation schemas
73
- │ └── constants.ts # Shared constants (API_URL, CHARACTER_LIMIT, etc.)
74
- └── dist/ # Built JavaScript files (entry point: dist/index.js)
75
- ```
76
-
77
- ## Tool Implementation
78
-
79
- ### Tool Naming
80
-
81
- Use snake_case for tool names (e.g., "search_users", "create_project", "get_channel_info") with clear, action-oriented names.
82
-
83
- **Avoid Naming Conflicts**: Include the service context to prevent overlaps:
84
- - Use "slack_send_message" instead of just "send_message"
85
- - Use "github_create_issue" instead of just "create_issue"
86
- - Use "asana_list_tasks" instead of just "list_tasks"
87
-
88
- ### Tool Structure
89
-
90
- Tools are registered using the `registerTool` method with the following requirements:
91
- - Use Zod schemas for runtime input validation and type safety
92
- - The `description` field must be explicitly provided - JSDoc comments are NOT automatically extracted
93
- - Explicitly provide `title`, `description`, `inputSchema`, and `annotations`
94
- - The `inputSchema` must be a Zod schema object (not a JSON schema)
95
- - Type all parameters and return values explicitly
96
-
97
- ```typescript
98
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
99
- import { z } from "zod";
100
-
101
- const server = new McpServer({
102
- name: "example-mcp",
103
- version: "1.0.0"
104
- });
105
-
106
- // Zod schema for input validation
107
- const UserSearchInputSchema = z.object({
108
- query: z.string()
109
- .min(2, "Query must be at least 2 characters")
110
- .max(200, "Query must not exceed 200 characters")
111
- .describe("Search string to match against names/emails"),
112
- limit: z.number()
113
- .int()
114
- .min(1)
115
- .max(100)
116
- .default(20)
117
- .describe("Maximum results to return"),
118
- offset: z.number()
119
- .int()
120
- .min(0)
121
- .default(0)
122
- .describe("Number of results to skip for pagination"),
123
- response_format: z.nativeEnum(ResponseFormat)
124
- .default(ResponseFormat.MARKDOWN)
125
- .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable")
126
- }).strict();
127
-
128
- // Type definition from Zod schema
129
- type UserSearchInput = z.infer<typeof UserSearchInputSchema>;
130
-
131
- server.registerTool(
132
- "example_search_users",
133
- {
134
- title: "Search Example Users",
135
- description: `Search for users in the Example system by name, email, or team.
136
-
137
- 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.
138
-
139
- Args:
140
- - query (string): Search string to match against names/emails
141
- - limit (number): Maximum results to return, between 1-100 (default: 20)
142
- - offset (number): Number of results to skip for pagination (default: 0)
143
- - response_format ('markdown' | 'json'): Output format (default: 'markdown')
144
-
145
- Returns:
146
- For JSON format: Structured data with schema:
147
- {
148
- "total": number, // Total number of matches found
149
- "count": number, // Number of results in this response
150
- "offset": number, // Current pagination offset
151
- "users": [
152
- {
153
- "id": string, // User ID (e.g., "U123456789")
154
- "name": string, // Full name (e.g., "John Doe")
155
- "email": string, // Email address
156
- "team": string, // Team name (optional)
157
- "active": boolean // Whether user is active
158
- }
159
- ],
160
- "has_more": boolean, // Whether more results are available
161
- "next_offset": number // Offset for next page (if has_more is true)
162
- }
163
-
164
- Examples:
165
- - Use when: "Find all marketing team members" -> params with query="team:marketing"
166
- - Use when: "Search for John's account" -> params with query="john"
167
- - Don't use when: You need to create a user (use example_create_user instead)
168
-
169
- Error Handling:
170
- - Returns "Error: Rate limit exceeded" if too many requests (429 status)
171
- - Returns "No users found matching '<query>'" if search returns empty`,
172
- inputSchema: UserSearchInputSchema,
173
- annotations: {
174
- readOnlyHint: true,
175
- destructiveHint: false,
176
- idempotentHint: true,
177
- openWorldHint: true
178
- }
179
- },
180
- async (params: UserSearchInput) => {
181
- try {
182
- // Input validation is handled by Zod schema
183
- // Make API request using validated parameters
184
- const data = await makeApiRequest<any>(
185
- "users/search",
186
- "GET",
187
- undefined,
188
- {
189
- q: params.query,
190
- limit: params.limit,
191
- offset: params.offset
192
- }
193
- );
194
-
195
- const users = data.users || [];
196
- const total = data.total || 0;
197
-
198
- if (!users.length) {
199
- return {
200
- content: [{
201
- type: "text",
202
- text: `No users found matching '${params.query}'`
203
- }]
204
- };
205
- }
206
-
207
- // Format response based on requested format
208
- let result: string;
209
-
210
- if (params.response_format === ResponseFormat.MARKDOWN) {
211
- // Human-readable markdown format
212
- const lines: string[] = [`# User Search Results: '${params.query}'`, ""];
213
- lines.push(`Found ${total} users (showing ${users.length})`);
214
- lines.push("");
215
-
216
- for (const user of users) {
217
- lines.push(`## ${user.name} (${user.id})`);
218
- lines.push(`- **Email**: ${user.email}`);
219
- if (user.team) {
220
- lines.push(`- **Team**: ${user.team}`);
221
- }
222
- lines.push("");
223
- }
224
-
225
- result = lines.join("\n");
226
-
227
- } else {
228
- // Machine-readable JSON format
229
- const response: any = {
230
- total,
231
- count: users.length,
232
- offset: params.offset,
233
- users: users.map((user: any) => ({
234
- id: user.id,
235
- name: user.name,
236
- email: user.email,
237
- ...(user.team ? { team: user.team } : {}),
238
- active: user.active ?? true
239
- }))
240
- };
241
-
242
- // Add pagination info if there are more results
243
- if (total > params.offset + users.length) {
244
- response.has_more = true;
245
- response.next_offset = params.offset + users.length;
246
- }
247
-
248
- result = JSON.stringify(response, null, 2);
249
- }
250
-
251
- return {
252
- content: [{
253
- type: "text",
254
- text: result
255
- }]
256
- };
257
- } catch (error) {
258
- return {
259
- content: [{
260
- type: "text",
261
- text: handleApiError(error)
262
- }]
263
- };
264
- }
265
- }
266
- );
267
- ```
268
-
269
- ## Zod Schemas for Input Validation
270
-
271
- Zod provides runtime type validation:
272
-
273
- ```typescript
274
- import { z } from "zod";
275
-
276
- // Basic schema with validation
277
- const CreateUserSchema = z.object({
278
- name: z.string()
279
- .min(1, "Name is required")
280
- .max(100, "Name must not exceed 100 characters"),
281
- email: z.string()
282
- .email("Invalid email format"),
283
- age: z.number()
284
- .int("Age must be a whole number")
285
- .min(0, "Age cannot be negative")
286
- .max(150, "Age cannot be greater than 150")
287
- }).strict(); // Use .strict() to forbid extra fields
288
-
289
- // Enums
290
- enum ResponseFormat {
291
- MARKDOWN = "markdown",
292
- JSON = "json"
293
- }
294
-
295
- const SearchSchema = z.object({
296
- response_format: z.nativeEnum(ResponseFormat)
297
- .default(ResponseFormat.MARKDOWN)
298
- .describe("Output format")
299
- });
300
-
301
- // Optional fields with defaults
302
- const PaginationSchema = z.object({
303
- limit: z.number()
304
- .int()
305
- .min(1)
306
- .max(100)
307
- .default(20)
308
- .describe("Maximum results to return"),
309
- offset: z.number()
310
- .int()
311
- .min(0)
312
- .default(0)
313
- .describe("Number of results to skip")
314
- });
315
- ```
316
-
317
- ## Response Format Options
318
-
319
- Support multiple output formats for flexibility:
320
-
321
- ```typescript
322
- enum ResponseFormat {
323
- MARKDOWN = "markdown",
324
- JSON = "json"
325
- }
326
-
327
- const inputSchema = z.object({
328
- query: z.string(),
329
- response_format: z.nativeEnum(ResponseFormat)
330
- .default(ResponseFormat.MARKDOWN)
331
- .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable")
332
- });
333
- ```
334
-
335
- **Markdown format**:
336
- - Use headers, lists, and formatting for clarity
337
- - Convert timestamps to human-readable format
338
- - Show display names with IDs in parentheses
339
- - Omit verbose metadata
340
- - Group related information logically
341
-
342
- **JSON format**:
343
- - Return complete, structured data suitable for programmatic processing
344
- - Include all available fields and metadata
345
- - Use consistent field names and types
346
-
347
- ## Pagination Implementation
348
-
349
- For tools that list resources:
350
-
351
- ```typescript
352
- const ListSchema = z.object({
353
- limit: z.number().int().min(1).max(100).default(20),
354
- offset: z.number().int().min(0).default(0)
355
- });
356
-
357
- async function listItems(params: z.infer<typeof ListSchema>) {
358
- const data = await apiRequest(params.limit, params.offset);
359
-
360
- const response = {
361
- total: data.total,
362
- count: data.items.length,
363
- offset: params.offset,
364
- items: data.items,
365
- has_more: data.total > params.offset + data.items.length,
366
- next_offset: data.total > params.offset + data.items.length
367
- ? params.offset + data.items.length
368
- : undefined
369
- };
370
-
371
- return JSON.stringify(response, null, 2);
372
- }
373
- ```
374
-
375
- ## Character Limits and Truncation
376
-
377
- Add a CHARACTER_LIMIT constant to prevent overwhelming responses:
378
-
379
- ```typescript
380
- // At module level in constants.ts
381
- export const CHARACTER_LIMIT = 25000; // Maximum response size in characters
382
-
383
- async function searchTool(params: SearchInput) {
384
- let result = generateResponse(data);
385
-
386
- // Check character limit and truncate if needed
387
- if (result.length > CHARACTER_LIMIT) {
388
- const truncatedData = data.slice(0, Math.max(1, data.length / 2));
389
- response.data = truncatedData;
390
- response.truncated = true;
391
- response.truncation_message =
392
- `Response truncated from ${data.length} to ${truncatedData.length} items. ` +
393
- `Use 'offset' parameter or add filters to see more results.`;
394
- result = JSON.stringify(response, null, 2);
395
- }
396
-
397
- return result;
398
- }
399
- ```
400
-
401
- ## Error Handling
402
-
403
- Provide clear, actionable error messages:
404
-
405
- ```typescript
406
- import axios, { AxiosError } from "axios";
407
-
408
- function handleApiError(error: unknown): string {
409
- if (error instanceof AxiosError) {
410
- if (error.response) {
411
- switch (error.response.status) {
412
- case 404:
413
- return "Error: Resource not found. Please check the ID is correct.";
414
- case 403:
415
- return "Error: Permission denied. You don't have access to this resource.";
416
- case 429:
417
- return "Error: Rate limit exceeded. Please wait before making more requests.";
418
- default:
419
- return `Error: API request failed with status ${error.response.status}`;
420
- }
421
- } else if (error.code === "ECONNABORTED") {
422
- return "Error: Request timed out. Please try again.";
423
- }
424
- }
425
- return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
426
- }
427
- ```
428
-
429
- ## Shared Utilities
430
-
431
- Extract common functionality into reusable functions:
432
-
433
- ```typescript
434
- // Shared API request function
435
- async function makeApiRequest<T>(
436
- endpoint: string,
437
- method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
438
- data?: any,
439
- params?: any
440
- ): Promise<T> {
441
- try {
442
- const response = await axios({
443
- method,
444
- url: `${API_BASE_URL}/${endpoint}`,
445
- data,
446
- params,
447
- timeout: 30000,
448
- headers: {
449
- "Content-Type": "application/json",
450
- "Accept": "application/json"
451
- }
452
- });
453
- return response.data;
454
- } catch (error) {
455
- throw error;
456
- }
457
- }
458
- ```
459
-
460
- ## Async/Await Best Practices
461
-
462
- Always use async/await for network requests and I/O operations:
463
-
464
- ```typescript
465
- // Good: Async network request
466
- async function fetchData(resourceId: string): Promise<ResourceData> {
467
- const response = await axios.get(`${API_URL}/resource/${resourceId}`);
468
- return response.data;
469
- }
470
-
471
- // Bad: Promise chains
472
- function fetchData(resourceId: string): Promise<ResourceData> {
473
- return axios.get(`${API_URL}/resource/${resourceId}`)
474
- .then(response => response.data); // Harder to read and maintain
475
- }
476
- ```
477
-
478
- ## TypeScript Best Practices
479
-
480
- 1. **Use Strict TypeScript**: Enable strict mode in tsconfig.json
481
- 2. **Define Interfaces**: Create clear interface definitions for all data structures
482
- 3. **Avoid `any`**: Use proper types or `unknown` instead of `any`
483
- 4. **Zod for Runtime Validation**: Use Zod schemas to validate external data
484
- 5. **Type Guards**: Create type guard functions for complex type checking
485
- 6. **Error Handling**: Always use try-catch with proper error type checking
486
- 7. **Null Safety**: Use optional chaining (`?.`) and nullish coalescing (`??`)
487
-
488
- ```typescript
489
- // Good: Type-safe with Zod and interfaces
490
- interface UserResponse {
491
- id: string;
492
- name: string;
493
- email: string;
494
- team?: string;
495
- active: boolean;
496
- }
497
-
498
- const UserSchema = z.object({
499
- id: z.string(),
500
- name: z.string(),
501
- email: z.string().email(),
502
- team: z.string().optional(),
503
- active: z.boolean()
504
- });
505
-
506
- type User = z.infer<typeof UserSchema>;
507
-
508
- async function getUser(id: string): Promise<User> {
509
- const data = await apiCall(`/users/${id}`);
510
- return UserSchema.parse(data); // Runtime validation
511
- }
512
-
513
- // Bad: Using any
514
- async function getUser(id: string): Promise<any> {
515
- return await apiCall(`/users/${id}`); // No type safety
516
- }
517
- ```
518
-
519
- ## Package Configuration
520
-
521
- ### package.json
522
-
523
- ```json
524
- {
525
- "name": "{service}-mcp-server",
526
- "version": "1.0.0",
527
- "description": "MCP server for {Service} API integration",
528
- "type": "module",
529
- "main": "dist/index.js",
530
- "scripts": {
531
- "start": "node dist/index.js",
532
- "dev": "tsx watch src/index.ts",
533
- "build": "tsc",
534
- "clean": "rm -rf dist"
535
- },
536
- "engines": {
537
- "node": ">=18"
538
- },
539
- "dependencies": {
540
- "@modelcontextprotocol/sdk": "^1.6.1",
541
- "axios": "^1.7.9",
542
- "zod": "^3.23.8"
543
- },
544
- "devDependencies": {
545
- "@types/node": "^22.10.0",
546
- "tsx": "^4.19.2",
547
- "typescript": "^5.7.2"
548
- }
549
- }
550
- ```
551
-
552
- ### tsconfig.json
553
-
554
- ```json
555
- {
556
- "compilerOptions": {
557
- "target": "ES2022",
558
- "module": "Node16",
559
- "moduleResolution": "Node16",
560
- "lib": ["ES2022"],
561
- "outDir": "./dist",
562
- "rootDir": "./src",
563
- "strict": true,
564
- "esModuleInterop": true,
565
- "skipLibCheck": true,
566
- "forceConsistentCasingInFileNames": true,
567
- "declaration": true,
568
- "declarationMap": true,
569
- "sourceMap": true,
570
- "allowSyntheticDefaultImports": true
571
- },
572
- "include": ["src/**/*"],
573
- "exclude": ["node_modules", "dist"]
574
- }
575
- ```
576
-
577
- ## Complete Example
578
-
579
- ```typescript
580
- #!/usr/bin/env node
581
- /**
582
- * MCP Server for Example Service.
583
- *
584
- * This server provides tools to interact with Example API, including user search,
585
- * project management, and data export capabilities.
586
- */
587
-
588
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
589
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
590
- import { z } from "zod";
591
- import axios, { AxiosError } from "axios";
592
-
593
- // Constants
594
- const API_BASE_URL = "https://api.example.com/v1";
595
- const CHARACTER_LIMIT = 25000;
596
-
597
- // Enums
598
- enum ResponseFormat {
599
- MARKDOWN = "markdown",
600
- JSON = "json"
601
- }
602
-
603
- // Zod schemas
604
- const UserSearchInputSchema = z.object({
605
- query: z.string()
606
- .min(2, "Query must be at least 2 characters")
607
- .max(200, "Query must not exceed 200 characters")
608
- .describe("Search string to match against names/emails"),
609
- limit: z.number()
610
- .int()
611
- .min(1)
612
- .max(100)
613
- .default(20)
614
- .describe("Maximum results to return"),
615
- offset: z.number()
616
- .int()
617
- .min(0)
618
- .default(0)
619
- .describe("Number of results to skip for pagination"),
620
- response_format: z.nativeEnum(ResponseFormat)
621
- .default(ResponseFormat.MARKDOWN)
622
- .describe("Output format: 'markdown' for human-readable or 'json' for machine-readable")
623
- }).strict();
624
-
625
- type UserSearchInput = z.infer<typeof UserSearchInputSchema>;
626
-
627
- // Shared utility functions
628
- async function makeApiRequest<T>(
629
- endpoint: string,
630
- method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
631
- data?: any,
632
- params?: any
633
- ): Promise<T> {
634
- try {
635
- const response = await axios({
636
- method,
637
- url: `${API_BASE_URL}/${endpoint}`,
638
- data,
639
- params,
640
- timeout: 30000,
641
- headers: {
642
- "Content-Type": "application/json",
643
- "Accept": "application/json"
644
- }
645
- });
646
- return response.data;
647
- } catch (error) {
648
- throw error;
649
- }
650
- }
651
-
652
- function handleApiError(error: unknown): string {
653
- if (error instanceof AxiosError) {
654
- if (error.response) {
655
- switch (error.response.status) {
656
- case 404:
657
- return "Error: Resource not found. Please check the ID is correct.";
658
- case 403:
659
- return "Error: Permission denied. You don't have access to this resource.";
660
- case 429:
661
- return "Error: Rate limit exceeded. Please wait before making more requests.";
662
- default:
663
- return `Error: API request failed with status ${error.response.status}`;
664
- }
665
- } else if (error.code === "ECONNABORTED") {
666
- return "Error: Request timed out. Please try again.";
667
- }
668
- }
669
- return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
670
- }
671
-
672
- // Create MCP server instance
673
- const server = new McpServer({
674
- name: "example-mcp",
675
- version: "1.0.0"
676
- });
677
-
678
- // Register tools
679
- server.registerTool(
680
- "example_search_users",
681
- {
682
- title: "Search Example Users",
683
- description: `[Full description as shown above]`,
684
- inputSchema: UserSearchInputSchema,
685
- annotations: {
686
- readOnlyHint: true,
687
- destructiveHint: false,
688
- idempotentHint: true,
689
- openWorldHint: true
690
- }
691
- },
692
- async (params: UserSearchInput) => {
693
- // Implementation as shown above
694
- }
695
- );
696
-
697
- // Main function
698
- async function main() {
699
- // Verify environment variables if needed
700
- if (!process.env.EXAMPLE_API_KEY) {
701
- console.error("ERROR: EXAMPLE_API_KEY environment variable is required");
702
- process.exit(1);
703
- }
704
-
705
- // Create transport
706
- const transport = new StdioServerTransport();
707
-
708
- // Connect server to transport
709
- await server.connect(transport);
710
-
711
- console.error("Example MCP server running via stdio");
712
- }
713
-
714
- // Run the server
715
- main().catch((error) => {
716
- console.error("Server error:", error);
717
- process.exit(1);
718
- });
719
- ```
720
-
721
- ---
722
-
723
- ## Advanced MCP Features
724
-
725
- ### Resource Registration
726
-
727
- Expose data as resources for efficient, URI-based access:
728
-
729
- ```typescript
730
- import { ResourceTemplate } from "@modelcontextprotocol/sdk/types.js";
731
-
732
- // Register a resource with URI template
733
- server.registerResource(
734
- {
735
- uri: "file://documents/{name}",
736
- name: "Document Resource",
737
- description: "Access documents by name",
738
- mimeType: "text/plain"
739
- },
740
- async (uri: string) => {
741
- // Extract parameter from URI
742
- const match = uri.match(/^file:\/\/documents\/(.+)$/);
743
- if (!match) {
744
- throw new Error("Invalid URI format");
745
- }
746
-
747
- const documentName = match[1];
748
- const content = await loadDocument(documentName);
749
-
750
- return {
751
- contents: [{
752
- uri,
753
- mimeType: "text/plain",
754
- text: content
755
- }]
756
- };
757
- }
758
- );
759
-
760
- // List available resources dynamically
761
- server.registerResourceList(async () => {
762
- const documents = await getAvailableDocuments();
763
- return {
764
- resources: documents.map(doc => ({
765
- uri: `file://documents/${doc.name}`,
766
- name: doc.name,
767
- mimeType: "text/plain",
768
- description: doc.description
769
- }))
770
- };
771
- });
772
- ```
773
-
774
- **When to use Resources vs Tools:**
775
- - **Resources**: For data access with simple URI-based parameters
776
- - **Tools**: For complex operations requiring validation and business logic
777
- - **Resources**: When data is relatively static or template-based
778
- - **Tools**: When operations have side effects or complex workflows
779
-
780
- ### Multiple Transport Options
781
-
782
- The TypeScript SDK supports different transport mechanisms:
783
-
784
- ```typescript
785
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
786
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
787
-
788
- // Stdio transport (default - for CLI tools)
789
- const stdioTransport = new StdioServerTransport();
790
- await server.connect(stdioTransport);
791
-
792
- // SSE transport (for real-time web updates)
793
- const sseTransport = new SSEServerTransport("/message", response);
794
- await server.connect(sseTransport);
795
-
796
- // HTTP transport (for web services)
797
- // Configure based on your HTTP framework integration
798
- ```
799
-
800
- **Transport selection guide:**
801
- - **Stdio**: Command-line tools, subprocess integration, local development
802
- - **HTTP**: Web services, remote access, multiple simultaneous clients
803
- - **SSE**: Real-time updates, server-push notifications, web dashboards
804
-
805
- ### Notification Support
806
-
807
- Notify clients when server state changes:
808
-
809
- ```typescript
810
- // Notify when tools list changes
811
- server.notification({
812
- method: "notifications/tools/list_changed"
813
- });
814
-
815
- // Notify when resources change
816
- server.notification({
817
- method: "notifications/resources/list_changed"
818
- });
819
- ```
820
-
821
- Use notifications sparingly - only when server capabilities genuinely change.
822
-
823
- ---
824
-
825
- ## Code Best Practices
826
-
827
- ### Code Composability and Reusability
828
-
829
- Your implementation MUST prioritize composability and code reuse:
830
-
831
- 1. **Extract Common Functionality**:
832
- - Create reusable helper functions for operations used across multiple tools
833
- - Build shared API clients for HTTP requests instead of duplicating code
834
- - Centralize error handling logic in utility functions
835
- - Extract business logic into dedicated functions that can be composed
836
- - Extract shared markdown or JSON field selection & formatting functionality
837
-
838
- 2. **Avoid Duplication**:
839
- - NEVER copy-paste similar code between tools
840
- - If you find yourself writing similar logic twice, extract it into a function
841
- - Common operations like pagination, filtering, field selection, and formatting should be shared
842
- - Authentication/authorization logic should be centralized
843
-
844
- ## Building and Running
845
-
846
- Always build your TypeScript code before running:
847
-
848
- ```bash
849
- # Build the project
850
- npm run build
851
-
852
- # Run the server
853
- npm start
854
-
855
- # Development with auto-reload
856
- npm run dev
857
- ```
858
-
859
- Always ensure `npm run build` completes successfully before considering the implementation complete.
860
-
861
- ## Quality Checklist
862
-
863
- Before finalizing your Node/TypeScript MCP server implementation, ensure:
864
-
865
- ### Strategic Design
866
- - [ ] Tools enable complete workflows, not just API endpoint wrappers
867
- - [ ] Tool names reflect natural task subdivisions
868
- - [ ] Response formats optimize for agent context efficiency
869
- - [ ] Human-readable identifiers used where appropriate
870
- - [ ] Error messages guide agents toward correct usage
871
-
872
- ### Implementation Quality
873
- - [ ] FOCUSED IMPLEMENTATION: Most important and valuable tools implemented
874
- - [ ] All tools registered using `registerTool` with complete configuration
875
- - [ ] All tools include `title`, `description`, `inputSchema`, and `annotations`
876
- - [ ] Annotations correctly set (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
877
- - [ ] All tools use Zod schemas for runtime input validation with `.strict()` enforcement
878
- - [ ] All Zod schemas have proper constraints and descriptive error messages
879
- - [ ] All tools have comprehensive descriptions with explicit input/output types
880
- - [ ] Descriptions include return value examples and complete schema documentation
881
- - [ ] Error messages are clear, actionable, and educational
882
-
883
- ### TypeScript Quality
884
- - [ ] TypeScript interfaces are defined for all data structures
885
- - [ ] Strict TypeScript is enabled in tsconfig.json
886
- - [ ] No use of `any` type - use `unknown` or proper types instead
887
- - [ ] All async functions have explicit Promise<T> return types
888
- - [ ] Error handling uses proper type guards (e.g., `axios.isAxiosError`, `z.ZodError`)
889
-
890
- ### Advanced Features (where applicable)
891
- - [ ] Resources registered for appropriate data endpoints
892
- - [ ] Appropriate transport configured (stdio, HTTP, SSE)
893
- - [ ] Notifications implemented for dynamic server capabilities
894
- - [ ] Type-safe with SDK interfaces
895
-
896
- ### Project Configuration
897
- - [ ] Package.json includes all necessary dependencies
898
- - [ ] Build script produces working JavaScript in dist/ directory
899
- - [ ] Main entry point is properly configured as dist/index.js
900
- - [ ] Server name follows format: `{service}-mcp-server`
901
- - [ ] tsconfig.json properly configured with strict mode
902
-
903
- ### Code Quality
904
- - [ ] Pagination is properly implemented where applicable
905
- - [ ] Large responses check CHARACTER_LIMIT constant and truncate with clear messages
906
- - [ ] Filtering options are provided for potentially large result sets
907
- - [ ] All network operations handle timeouts and connection errors gracefully
908
- - [ ] Common functionality is extracted into reusable functions
909
- - [ ] Return types are consistent across similar operations
910
-
911
- ### Testing and Build
912
- - [ ] `npm run build` completes successfully without errors
913
- - [ ] dist/index.js created and executable
914
- - [ ] Server runs: `node dist/index.js --help`
915
- - [ ] All imports resolve correctly
916
- - [ ] Sample tool calls work as expected