@softtechai/quickmcp 1.0.14 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/dist/auth/auth-utils.d.ts +130 -0
  2. package/dist/auth/auth-utils.d.ts.map +1 -0
  3. package/dist/auth/auth-utils.js +600 -0
  4. package/dist/auth/auth-utils.js.map +1 -0
  5. package/dist/auth/jwks-provider.d.ts +9 -0
  6. package/dist/auth/jwks-provider.d.ts.map +1 -0
  7. package/dist/auth/jwks-provider.js +56 -0
  8. package/dist/auth/jwks-provider.js.map +1 -0
  9. package/dist/auth/token-utils.d.ts +40 -0
  10. package/dist/auth/token-utils.d.ts.map +1 -0
  11. package/dist/auth/token-utils.js +162 -0
  12. package/dist/auth/token-utils.js.map +1 -0
  13. package/dist/client/MCPClient.js +5 -4
  14. package/dist/client/MCPClient.js.map +1 -1
  15. package/dist/config/auth-config.d.ts +16 -0
  16. package/dist/config/auth-config.d.ts.map +1 -0
  17. package/dist/config/auth-config.js +107 -0
  18. package/dist/config/auth-config.js.map +1 -0
  19. package/dist/constant/constant.d.ts +20 -0
  20. package/dist/constant/constant.d.ts.map +1 -0
  21. package/dist/constant/constant.js +24 -0
  22. package/dist/constant/constant.js.map +1 -0
  23. package/dist/database/async-datastore.d.ts +6 -0
  24. package/dist/database/async-datastore.d.ts.map +1 -0
  25. package/dist/database/async-datastore.js +15 -0
  26. package/dist/database/async-datastore.js.map +1 -0
  27. package/dist/database/database-utils.d.ts +6 -0
  28. package/dist/database/database-utils.d.ts.map +1 -0
  29. package/dist/database/database-utils.js +29 -0
  30. package/dist/database/database-utils.js.map +1 -0
  31. package/dist/database/datastore.d.ts +164 -0
  32. package/dist/database/datastore.d.ts.map +1 -0
  33. package/dist/{parsers/types/index.js → database/datastore.js} +1 -0
  34. package/dist/database/datastore.js.map +1 -0
  35. package/dist/database/factory.d.ts +4 -0
  36. package/dist/database/factory.d.ts.map +1 -0
  37. package/dist/database/factory.js +32 -0
  38. package/dist/database/factory.js.map +1 -0
  39. package/dist/database/jdbc-manager.d.ts +49 -0
  40. package/dist/database/jdbc-manager.d.ts.map +1 -0
  41. package/dist/database/jdbc-manager.js +50 -0
  42. package/dist/database/jdbc-manager.js.map +1 -0
  43. package/dist/database/sqlite-manager.d.ts +46 -44
  44. package/dist/database/sqlite-manager.d.ts.map +1 -1
  45. package/dist/database/sqlite-manager.js +492 -42
  46. package/dist/database/sqlite-manager.js.map +1 -1
  47. package/dist/database/supabase-manager.d.ts +58 -0
  48. package/dist/database/supabase-manager.d.ts.map +1 -0
  49. package/dist/database/supabase-manager.js +432 -0
  50. package/dist/database/supabase-manager.js.map +1 -0
  51. package/dist/generators/MCPServerGenerator.d.ts +103 -20
  52. package/dist/generators/MCPServerGenerator.d.ts.map +1 -1
  53. package/dist/generators/MCPServerGenerator.js +6930 -128
  54. package/dist/generators/MCPServerGenerator.js.map +1 -1
  55. package/dist/index.d.ts +0 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +8 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/integrated-mcp-server-new.d.ts +14 -2
  60. package/dist/integrated-mcp-server-new.d.ts.map +1 -1
  61. package/dist/integrated-mcp-server-new.js +270 -180
  62. package/dist/integrated-mcp-server-new.js.map +1 -1
  63. package/dist/mcp-core/McpCoreService.d.ts +63 -0
  64. package/dist/mcp-core/McpCoreService.d.ts.map +1 -0
  65. package/dist/mcp-core/McpCoreService.js +492 -0
  66. package/dist/mcp-core/McpCoreService.js.map +1 -0
  67. package/dist/parsers/CsvParser.d.ts +1 -1
  68. package/dist/parsers/CsvParser.d.ts.map +1 -1
  69. package/dist/parsers/CsvParser.js +3 -2
  70. package/dist/parsers/CsvParser.js.map +1 -1
  71. package/dist/parsers/DatabaseParser.d.ts.map +1 -1
  72. package/dist/parsers/DatabaseParser.js +9 -8
  73. package/dist/parsers/DatabaseParser.js.map +1 -1
  74. package/dist/parsers/ExcelParser.d.ts +15 -0
  75. package/dist/parsers/ExcelParser.d.ts.map +1 -1
  76. package/dist/parsers/ExcelParser.js +287 -21
  77. package/dist/parsers/ExcelParser.js.map +1 -1
  78. package/dist/parsers/WebPageParser.d.ts +5 -0
  79. package/dist/parsers/WebPageParser.d.ts.map +1 -0
  80. package/dist/parsers/WebPageParser.js +35 -0
  81. package/dist/parsers/WebPageParser.js.map +1 -0
  82. package/dist/parsers/index.d.ts +3 -2
  83. package/dist/parsers/index.d.ts.map +1 -1
  84. package/dist/parsers/index.js +19 -16
  85. package/dist/parsers/index.js.map +1 -1
  86. package/dist/server/api/askApi.d.ts +41 -0
  87. package/dist/server/api/askApi.d.ts.map +1 -0
  88. package/dist/server/api/askApi.js +479 -0
  89. package/dist/server/api/askApi.js.map +1 -0
  90. package/dist/server/api/authApi.d.ts +101 -0
  91. package/dist/server/api/authApi.d.ts.map +1 -0
  92. package/dist/server/api/authApi.js +1472 -0
  93. package/dist/server/api/authApi.js.map +1 -0
  94. package/dist/server/api/authProperty.d.ts +18 -0
  95. package/dist/server/api/authProperty.d.ts.map +1 -0
  96. package/dist/server/api/authProperty.js +41 -0
  97. package/dist/server/api/authProperty.js.map +1 -0
  98. package/dist/server/api/configApi.d.ts +15 -0
  99. package/dist/server/api/configApi.d.ts.map +1 -0
  100. package/dist/server/api/configApi.js +42 -0
  101. package/dist/server/api/configApi.js.map +1 -0
  102. package/dist/server/api/databaseApi.d.ts +14 -0
  103. package/dist/server/api/databaseApi.d.ts.map +1 -0
  104. package/dist/server/api/databaseApi.js +111 -0
  105. package/dist/server/api/databaseApi.js.map +1 -0
  106. package/dist/server/api/directoryApi.d.ts +9 -0
  107. package/dist/server/api/directoryApi.d.ts.map +1 -0
  108. package/dist/server/api/directoryApi.js +103 -0
  109. package/dist/server/api/directoryApi.js.map +1 -0
  110. package/dist/server/api/generateApi.d.ts +24 -0
  111. package/dist/server/api/generateApi.d.ts.map +1 -0
  112. package/dist/server/api/generateApi.js +457 -0
  113. package/dist/server/api/generateApi.js.map +1 -0
  114. package/dist/server/api/healthApi.d.ts +9 -0
  115. package/dist/server/api/healthApi.d.ts.map +1 -0
  116. package/dist/server/api/healthApi.js +15 -0
  117. package/dist/server/api/healthApi.js.map +1 -0
  118. package/dist/server/api/indexApi.d.ts +21 -0
  119. package/dist/server/api/indexApi.d.ts.map +1 -0
  120. package/dist/server/api/indexApi.js +61 -0
  121. package/dist/server/api/indexApi.js.map +1 -0
  122. package/dist/server/api/logsApi.d.ts +12 -0
  123. package/dist/server/api/logsApi.d.ts.map +1 -0
  124. package/dist/server/api/logsApi.js +37 -0
  125. package/dist/server/api/logsApi.js.map +1 -0
  126. package/dist/server/api/mcpApi.d.ts +20 -0
  127. package/dist/server/api/mcpApi.d.ts.map +1 -0
  128. package/dist/server/api/mcpApi.js +120 -0
  129. package/dist/server/api/mcpApi.js.map +1 -0
  130. package/dist/server/api/nameApi.d.ts +21 -0
  131. package/dist/server/api/nameApi.d.ts.map +1 -0
  132. package/dist/server/api/nameApi.js +42 -0
  133. package/dist/server/api/nameApi.js.map +1 -0
  134. package/dist/server/api/parseApi.d.ts +9 -0
  135. package/dist/server/api/parseApi.d.ts.map +1 -0
  136. package/dist/server/api/parseApi.js +3245 -0
  137. package/dist/server/api/parseApi.js.map +1 -0
  138. package/dist/server/api/serverApi.d.ts +44 -0
  139. package/dist/server/api/serverApi.d.ts.map +1 -0
  140. package/dist/server/api/serverApi.js +417 -0
  141. package/dist/server/api/serverApi.js.map +1 -0
  142. package/dist/{dynamic-mcp-executor.d.ts → server/dynamic-mcp-executor.d.ts} +4 -5
  143. package/dist/server/dynamic-mcp-executor.d.ts.map +1 -0
  144. package/dist/server/dynamic-mcp-executor.js +62 -0
  145. package/dist/server/dynamic-mcp-executor.js.map +1 -0
  146. package/dist/server/port-utils.d.ts +14 -0
  147. package/dist/server/port-utils.d.ts.map +1 -0
  148. package/dist/server/port-utils.js +31 -0
  149. package/dist/server/port-utils.js.map +1 -0
  150. package/dist/server/server-utils.d.ts +13 -0
  151. package/dist/server/server-utils.d.ts.map +1 -0
  152. package/dist/server/server-utils.js +72 -0
  153. package/dist/server/server-utils.js.map +1 -0
  154. package/dist/{web → server}/server.d.ts +1 -0
  155. package/dist/server/server.d.ts.map +1 -0
  156. package/dist/server/server.js +535 -0
  157. package/dist/server/server.js.map +1 -0
  158. package/dist/server/tool-executer.d.ts +101 -0
  159. package/dist/server/tool-executer.d.ts.map +1 -0
  160. package/dist/server/tool-executer.js +6198 -0
  161. package/dist/server/tool-executer.js.map +1 -0
  162. package/dist/types/index.d.ts +1197 -4
  163. package/dist/types/index.d.ts.map +1 -1
  164. package/dist/types/index.js +1028 -0
  165. package/dist/types/index.js.map +1 -1
  166. package/dist/upload/upload-utils.d.ts +4 -0
  167. package/dist/upload/upload-utils.d.ts.map +1 -0
  168. package/dist/upload/upload-utils.js +29 -0
  169. package/dist/upload/upload-utils.js.map +1 -0
  170. package/dist/utils/deployment-util.d.ts +14 -0
  171. package/dist/utils/deployment-util.d.ts.map +1 -0
  172. package/dist/utils/deployment-util.js +46 -0
  173. package/dist/utils/deployment-util.js.map +1 -0
  174. package/dist/utils/logger.d.ts +15 -0
  175. package/dist/utils/logger.d.ts.map +1 -0
  176. package/dist/utils/logger.js +56 -0
  177. package/dist/utils/logger.js.map +1 -0
  178. package/package.json +18 -6
  179. package/quickmcp-direct-stdio.js +245 -163
  180. package/src/web/public/app.js +15370 -1471
  181. package/src/web/public/authorization.html +868 -0
  182. package/src/web/public/database-tables.html +283 -547
  183. package/src/web/public/how-to-use.html +446 -462
  184. package/src/web/public/how-to-use.js +4 -4
  185. package/src/web/public/images/app/activepieces.png +0 -0
  186. package/src/web/public/images/app/airtable.png +0 -0
  187. package/src/web/public/images/app/androidstudio.png +0 -0
  188. package/src/web/public/images/app/antigravity.png +0 -0
  189. package/src/web/public/images/app/applenotes.png +0 -0
  190. package/src/web/public/images/app/applereminders.png +0 -0
  191. package/src/web/public/images/app/asana.png +0 -0
  192. package/src/web/public/images/app/azureai.png +0 -0
  193. package/src/web/public/images/app/bash.png +0 -0
  194. package/src/web/public/images/app/bearnotes.png +0 -0
  195. package/src/web/public/images/app/bitbucket.png +0 -0
  196. package/src/web/public/images/app/claude.png +0 -0
  197. package/src/web/public/images/app/cli.png +0 -0
  198. package/src/web/public/images/app/clickup.png +0 -0
  199. package/src/web/public/images/app/cohere.png +0 -0
  200. package/src/web/public/images/app/confluence.png +0 -0
  201. package/src/web/public/images/app/confluence2.png +0 -0
  202. package/src/web/public/images/app/curl.png +0 -0
  203. package/src/web/public/images/app/curl_mini.png +0 -0
  204. package/src/web/public/images/app/cursor.png +0 -0
  205. package/src/web/public/images/app/db2.png +0 -0
  206. package/src/web/public/images/app/deepseek.png +0 -0
  207. package/src/web/public/images/app/discord.png +0 -0
  208. package/src/web/public/images/app/docker.png +0 -0
  209. package/src/web/public/images/app/dockerhub.png +0 -0
  210. package/src/web/public/images/app/dropbox.png +0 -0
  211. package/src/web/public/images/app/elasticsearch.png +0 -0
  212. package/src/web/public/images/app/facebook.png +0 -0
  213. package/src/web/public/images/app/falai.png +0 -0
  214. package/src/web/public/images/app/fireworks.png +0 -0
  215. package/src/web/public/images/app/gdrive.png +0 -0
  216. package/src/web/public/images/app/gemini.png +0 -0
  217. package/src/web/public/images/app/github.png +0 -0
  218. package/src/web/public/images/app/githubcopilot.png +0 -0
  219. package/src/web/public/images/app/gitlab.png +0 -0
  220. package/src/web/public/images/app/gmail.png +0 -0
  221. package/src/web/public/images/app/googlecalender.png +0 -0
  222. package/src/web/public/images/app/googledocs.png +0 -0
  223. package/src/web/public/images/app/googlesheets.png +0 -0
  224. package/src/web/public/images/app/gradle.png +0 -0
  225. package/src/web/public/images/app/grafana.png +0 -0
  226. package/src/web/public/images/app/graphql.png +0 -0
  227. package/src/web/public/images/app/grok.png +0 -0
  228. package/src/web/public/images/app/groq.png +0 -0
  229. package/src/web/public/images/app/hazelcast.png +0 -0
  230. package/src/web/public/images/app/huggingface.png +0 -0
  231. package/src/web/public/images/app/imessage.png +0 -0
  232. package/src/web/public/images/app/instagram.png +0 -0
  233. package/src/web/public/images/app/intellij.png +0 -0
  234. package/src/web/public/images/app/jenkins.png +0 -0
  235. package/src/web/public/images/app/jira.png +0 -0
  236. package/src/web/public/images/app/kafka.png +0 -0
  237. package/src/web/public/images/app/kubernetes.png +0 -0
  238. package/src/web/public/images/app/linear.png +0 -0
  239. package/src/web/public/images/app/linkedin.png +0 -0
  240. package/src/web/public/images/app/llama.png +0 -0
  241. package/src/web/public/images/app/make.png +0 -0
  242. package/src/web/public/images/app/maven.png +0 -0
  243. package/src/web/public/images/app/mcp.png +0 -0
  244. package/src/web/public/images/app/microsoftteams.png +0 -0
  245. package/src/web/public/images/app/mistral.png +0 -0
  246. package/src/web/public/images/app/monday.png +0 -0
  247. package/src/web/public/images/app/mongodb.png +0 -0
  248. package/src/web/public/images/app/mssql.png +0 -0
  249. package/src/web/public/images/app/mysql.png +0 -0
  250. package/src/web/public/images/app/n8n.png +0 -0
  251. package/src/web/public/images/app/notion.png +0 -0
  252. package/src/web/public/images/app/npm.png +0 -0
  253. package/src/web/public/images/app/nuget.png +0 -0
  254. package/src/web/public/images/app/obsidian.png +0 -0
  255. package/src/web/public/images/app/openai.png +0 -0
  256. package/src/web/public/images/app/openrouter.png +0 -0
  257. package/src/web/public/images/app/opensearch.png +0 -0
  258. package/src/web/public/images/app/openshift.png +0 -0
  259. package/src/web/public/images/app/oracle.png +0 -0
  260. package/src/web/public/images/app/perplexity.png +0 -0
  261. package/src/web/public/images/app/pipedream.png +0 -0
  262. package/src/web/public/images/app/postgresql.png +0 -0
  263. package/src/web/public/images/app/powershell.png +0 -0
  264. package/src/web/public/images/app/prometheus.png +0 -0
  265. package/src/web/public/images/app/reddit.png +0 -0
  266. package/src/web/public/images/app/redis.png +0 -0
  267. package/src/web/public/images/app/rss.png +0 -0
  268. package/src/web/public/images/app/signal.png +0 -0
  269. package/src/web/public/images/app/slack.png +0 -0
  270. package/src/web/public/images/app/soap.png +0 -0
  271. package/src/web/public/images/app/sqlite.png +0 -0
  272. package/src/web/public/images/app/supabase.png +0 -0
  273. package/src/web/public/images/app/telegram.png +0 -0
  274. package/src/web/public/images/app/things3.png +0 -0
  275. package/src/web/public/images/app/threads.png +0 -0
  276. package/src/web/public/images/app/tiktok.png +0 -0
  277. package/src/web/public/images/app/together.png +0 -0
  278. package/src/web/public/images/app/trello.png +0 -0
  279. package/src/web/public/images/app/vscode.png +0 -0
  280. package/src/web/public/images/app/webhook.png +0 -0
  281. package/src/web/public/images/app/webpage.png +0 -0
  282. package/src/web/public/images/app/whatsappbusiness.png +0 -0
  283. package/src/web/public/images/app/windsorf.png +0 -0
  284. package/src/web/public/images/app/x.png +0 -0
  285. package/src/web/public/images/app/youtube.png +0 -0
  286. package/src/web/public/images/app/zapier.png +0 -0
  287. package/src/web/public/images/app/zededitor.png +0 -0
  288. package/src/web/public/images/app/zoom.png +0 -0
  289. package/src/web/public/images/avatar-anon.svg +4 -0
  290. package/src/web/public/images/favicon.png +0 -0
  291. package/src/web/public/images/install/chatgpt-web/step0.png +0 -0
  292. package/src/web/public/images/install/chatgpt-web/step1.png +0 -0
  293. package/src/web/public/images/install/chatgpt-web/step2.png +0 -0
  294. package/src/web/public/images/install/chatgpt-web/step3.png +0 -0
  295. package/src/web/public/images/install/chatgpt-web/step4.png +0 -0
  296. package/src/web/public/images/install/chatgpt-web/step5.png +0 -0
  297. package/src/web/public/images/readme/1-generate-servers.png +0 -0
  298. package/src/web/public/images/readme/2-database-connection.png +0 -0
  299. package/src/web/public/images/readme/2-file-upload.png +0 -0
  300. package/src/web/public/images/readme/3-data-preview.png +0 -0
  301. package/src/web/public/images/readme/4-data-preview2.png +0 -0
  302. package/src/web/public/images/readme/5-server-configuration.png +0 -0
  303. package/src/web/public/images/readme/6-server-generated-modal.png +0 -0
  304. package/src/web/public/images/readme/7-generated-servers.png +0 -0
  305. package/src/web/public/images/readme/8-generated-servers-view-details.png +0 -0
  306. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.23.51.png +0 -0
  307. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.24.59.png +0 -0
  308. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.05.png +0 -0
  309. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.14.png +0 -0
  310. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.21.png +0 -0
  311. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.36.png +0 -0
  312. package/src/web/public/index.html +4685 -488
  313. package/src/web/public/landing.html +1638 -0
  314. package/src/web/public/logger.js +31 -0
  315. package/src/web/public/login.html +372 -0
  316. package/src/web/public/manage-servers.html +121 -188
  317. package/src/web/public/pricing.html +537 -0
  318. package/src/web/public/quick-ask.html +133 -0
  319. package/src/web/public/quickmcp-styles.css +708 -0
  320. package/src/web/public/roles.html +177 -0
  321. package/src/web/public/shared.js +736 -3
  322. package/src/web/public/sidebar.js +414 -0
  323. package/src/web/public/test-servers.html +605 -221
  324. package/src/web/public/users.html +191 -0
  325. package/dist/client/MCPClientUnified.d.ts +0 -31
  326. package/dist/client/MCPClientUnified.d.ts.map +0 -1
  327. package/dist/client/MCPClientUnified.js +0 -275
  328. package/dist/client/MCPClientUnified.js.map +0 -1
  329. package/dist/client/MCPTestRunnerUnified.d.ts +0 -48
  330. package/dist/client/MCPTestRunnerUnified.d.ts.map +0 -1
  331. package/dist/client/MCPTestRunnerUnified.js +0 -183
  332. package/dist/client/MCPTestRunnerUnified.js.map +0 -1
  333. package/dist/database/json-manager.d.ts +0 -55
  334. package/dist/database/json-manager.d.ts.map +0 -1
  335. package/dist/database/json-manager.js +0 -128
  336. package/dist/database/json-manager.js.map +0 -1
  337. package/dist/dynamic-mcp-executor.d.ts.map +0 -1
  338. package/dist/dynamic-mcp-executor.js +0 -274
  339. package/dist/dynamic-mcp-executor.js.map +0 -1
  340. package/dist/generators/MCPServerGenerator-new.d.ts +0 -37
  341. package/dist/generators/MCPServerGenerator-new.d.ts.map +0 -1
  342. package/dist/generators/MCPServerGenerator-new.js +0 -287
  343. package/dist/generators/MCPServerGenerator-new.js.map +0 -1
  344. package/dist/generators/database/sqlite-manager.d.ts +0 -52
  345. package/dist/generators/database/sqlite-manager.js +0 -143
  346. package/dist/generators/generators/MCPServerGenerator.d.ts +0 -37
  347. package/dist/generators/generators/MCPServerGenerator.js +0 -396
  348. package/dist/integrated-mcp-server.d.ts +0 -25
  349. package/dist/integrated-mcp-server.d.ts.map +0 -1
  350. package/dist/integrated-mcp-server.js +0 -541
  351. package/dist/integrated-mcp-server.js.map +0 -1
  352. package/dist/mcp-inspector-server.d.ts +0 -3
  353. package/dist/mcp-inspector-server.d.ts.map +0 -1
  354. package/dist/mcp-inspector-server.js +0 -119
  355. package/dist/mcp-inspector-server.js.map +0 -1
  356. package/dist/mcp-sdk-server.d.ts +0 -3
  357. package/dist/mcp-sdk-server.d.ts.map +0 -1
  358. package/dist/mcp-sdk-server.js +0 -90
  359. package/dist/mcp-sdk-server.js.map +0 -1
  360. package/dist/mcp-server.d.ts +0 -3
  361. package/dist/mcp-server.d.ts.map +0 -1
  362. package/dist/mcp-server.js +0 -300
  363. package/dist/mcp-server.js.map +0 -1
  364. package/dist/parsers/parsers/ExcelParser.js +0 -118
  365. package/dist/quickmcp-unified-bridge.d.ts +0 -13
  366. package/dist/quickmcp-unified-bridge.d.ts.map +0 -1
  367. package/dist/quickmcp-unified-bridge.js +0 -176
  368. package/dist/quickmcp-unified-bridge.js.map +0 -1
  369. package/dist/sqlite-manager.js +0 -145
  370. package/dist/test-app.d.ts +0 -2
  371. package/dist/test-app.d.ts.map +0 -1
  372. package/dist/test-app.js +0 -119
  373. package/dist/test-app.js.map +0 -1
  374. package/dist/transport/base-transport.d.ts +0 -21
  375. package/dist/transport/base-transport.d.ts.map +0 -1
  376. package/dist/transport/base-transport.js +0 -16
  377. package/dist/transport/base-transport.js.map +0 -1
  378. package/dist/transport/index.d.ts +0 -10
  379. package/dist/transport/index.d.ts.map +0 -1
  380. package/dist/transport/index.js +0 -12
  381. package/dist/transport/index.js.map +0 -1
  382. package/dist/transport/sse-transport.d.ts +0 -13
  383. package/dist/transport/sse-transport.d.ts.map +0 -1
  384. package/dist/transport/sse-transport.js +0 -106
  385. package/dist/transport/sse-transport.js.map +0 -1
  386. package/dist/transport/stdio-transport.d.ts +0 -8
  387. package/dist/transport/stdio-transport.d.ts.map +0 -1
  388. package/dist/transport/stdio-transport.js +0 -53
  389. package/dist/transport/stdio-transport.js.map +0 -1
  390. package/dist/transport/streamable-http-transport.d.ts +0 -15
  391. package/dist/transport/streamable-http-transport.d.ts.map +0 -1
  392. package/dist/transport/streamable-http-transport.js +0 -151
  393. package/dist/transport/streamable-http-transport.js.map +0 -1
  394. package/dist/web/client/MCPClient.js +0 -348
  395. package/dist/web/client/MCPTestRunner.js +0 -317
  396. package/dist/web/database/json-manager.js +0 -124
  397. package/dist/web/database/sqlite-manager.js +0 -146
  398. package/dist/web/dynamic-mcp-executor.js +0 -443
  399. package/dist/web/generators/MCPServerGenerator-new.js +0 -284
  400. package/dist/web/generators/MCPServerGenerator.js +0 -566
  401. package/dist/web/integrated-mcp-server-new.js +0 -394
  402. package/dist/web/parsers/CsvParser.js +0 -144
  403. package/dist/web/parsers/DatabaseParser.js +0 -637
  404. package/dist/web/parsers/ExcelParser.js +0 -180
  405. package/dist/web/parsers/index.js +0 -152
  406. package/dist/web/server.d.ts.map +0 -1
  407. package/dist/web/server.js +0 -790
  408. package/dist/web/server.js.map +0 -1
  409. package/dist/web/types/index.js +0 -2
  410. package/dist/web/web/server.js +0 -860
  411. package/src/web/public/modern-styles.css +0 -946
  412. package/src/web/public/shared-styles.css +0 -2091
  413. /package/src/web/public/images/{1-claude-quickmcp-stdio.png → readme/1-claude-quickmcp-stdio.png} +0 -0
  414. /package/src/web/public/images/{2-claude-tools.png → readme/2-claude-tools.png} +0 -0
  415. /package/src/web/public/images/{3-claude-developer-settings.png → readme/3-claude-developer-settings.png} +0 -0
  416. /package/src/web/public/images/{4-claude-config.png → readme/4-claude-config.png} +0 -0
  417. /package/src/web/public/images/{5-claude-config-edit.png → readme/5-claude-config-edit.png} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import './web/server';
2
1
  export * from './types';
3
2
  export * from './parsers';
4
3
  export * from './generators/MCPServerGenerator';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -13,8 +13,15 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
13
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
16
19
  Object.defineProperty(exports, "__esModule", { value: true });
17
- require("./web/server");
20
+ const dotenv_1 = __importDefault(require("dotenv"));
21
+ dotenv_1.default.config({ path: process.env.DOTENV_CONFIG_PATH || '.env' });
22
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
23
+ const { startServer } = require('./server/server');
24
+ startServer();
18
25
  __exportStar(require("./types"), exports);
19
26
  __exportStar(require("./parsers"), exports);
20
27
  __exportStar(require("./generators/MCPServerGenerator"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAAsB;AAEtB,0CAAwB;AACxB,4CAA0B;AAC1B,kEAAgD;AAChD,qDAAmC;AACnC,yDAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,EAAE,CAAC,CAAC;AAElE,8DAA8D;AAC9D,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAqC,CAAC;AAEvF,WAAW,EAAE,CAAC;AAEd,0CAAwB;AACxB,4CAA0B;AAC1B,kEAAgD;AAChD,qDAAmC;AACnC,yDAAuC"}
@@ -1,11 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  export declare class IntegratedMCPServer {
3
- private server;
4
3
  private app;
5
4
  private executor;
5
+ private authStore;
6
+ private mcpAuthMode;
7
+ private deployMode;
8
+ private mcpCore;
9
+ private sseSessions;
10
+ private wsServer;
6
11
  constructor();
7
- private setupHandlers;
12
+ private resolveHttpAuthContext;
13
+ private resolveWsAuthContext;
14
+ private executeJsonRpc;
15
+ private isMcpAuthError;
16
+ private buildMcpWwwAuthenticate;
17
+ private sendMcpAuthRequired;
18
+ private writeSseEvent;
8
19
  private setupWebRoutes;
20
+ private setupWebSocketTransport;
9
21
  start(port?: number): Promise<void>;
10
22
  private cleanup;
11
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"integrated-mcp-server-new.d.ts","sourceRoot":"","sources":["../src/integrated-mcp-server-new.ts"],"names":[],"mappings":";AAgBA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,QAAQ,CAAqB;;IAiBrC,OAAO,CAAC,aAAa;IAkFrB,OAAO,CAAC,cAAc;IA8IhB,KAAK,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA6BjC,OAAO;CAStB"}
1
+ {"version":3,"file":"integrated-mcp-server-new.d.ts","sourceRoot":"","sources":["../src/integrated-mcp-server-new.ts"],"names":[],"mappings":";AAmBA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,QAAQ,CAAgC;;IAwBhD,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,oBAAoB;YAed,cAAc;IAK5B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,cAAc;IA+KtB,OAAO,CAAC,uBAAuB;IA8CzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAmB3B,OAAO;CAsBtB"}
@@ -5,201 +5,246 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.IntegratedMCPServer = void 0;
8
- const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
9
- const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
10
8
  const express_1 = __importDefault(require("express"));
11
- const dynamic_mcp_executor_1 = require("./dynamic-mcp-executor");
9
+ const cors_1 = __importDefault(require("cors"));
10
+ const node_crypto_1 = require("node:crypto");
11
+ const ws_1 = require("ws");
12
+ const dynamic_mcp_executor_1 = require("./server/dynamic-mcp-executor");
13
+ const port_utils_1 = require("./server/port-utils");
14
+ const factory_1 = require("./database/factory");
15
+ const auth_config_1 = require("./config/auth-config");
16
+ const McpCoreService_1 = require("./mcp-core/McpCoreService");
17
+ const logger_1 = require("./utils/logger");
12
18
  class IntegratedMCPServer {
13
19
  constructor() {
20
+ this.sseSessions = new Map();
21
+ this.wsServer = null;
14
22
  this.executor = new dynamic_mcp_executor_1.DynamicMCPExecutor();
15
- this.server = new index_js_1.Server({
16
- name: 'quickmcp-integrated-server',
17
- version: '1.0.0'
23
+ this.authStore = (0, factory_1.createDataStore)();
24
+ this.mcpAuthMode = (0, auth_config_1.resolveAuthMode)();
25
+ this.deployMode = String(process.env.DEPLOY_MODE || '').trim().toUpperCase();
26
+ const tokenSecret = process.env.QUICKMCP_TOKEN_SECRET || process.env.AUTH_COOKIE_SECRET || 'change-me';
27
+ const defaultToken = (process.env.QUICKMCP_TOKEN || '').trim();
28
+ this.mcpCore = new McpCoreService_1.McpCoreService({
29
+ executor: this.executor,
30
+ authStore: this.authStore,
31
+ authMode: this.mcpAuthMode,
32
+ deployMode: this.deployMode,
33
+ tokenSecret,
34
+ defaultToken
18
35
  });
19
36
  this.app = (0, express_1.default)();
20
- this.setupHandlers();
21
37
  this.setupWebRoutes();
22
38
  }
23
- setupHandlers() {
24
- // List tools - dynamically from SQLite
25
- this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
26
- try {
27
- const tools = await this.executor.getAllTools();
28
- console.error(`šŸ“‹ Listed ${tools.length} dynamic tools`);
29
- return { tools };
30
- }
31
- catch (error) {
32
- console.error('āŒ Error listing tools:', error);
33
- return { tools: [] };
34
- }
35
- });
36
- // List resources - dynamically from SQLite
37
- this.server.setRequestHandler(types_js_1.ListResourcesRequestSchema, async () => {
38
- try {
39
- const resources = await this.executor.getAllResources();
40
- //console.log(`šŸ“‚ Listed ${resources.length} dynamic resources`);
41
- return { resources };
42
- }
43
- catch (error) {
44
- console.error('āŒ Error listing resources:', error);
45
- return { resources: [] };
46
- }
39
+ resolveHttpAuthContext(req) {
40
+ return this.mcpCore.resolveAuthContextFromSources({
41
+ authorization: String(req.headers.authorization || ''),
42
+ xMcpToken: String(req.headers['x-mcp-token'] || ''),
43
+ queryToken: String(req.query.token || ''),
44
+ bodyToken: String(req.body?.token || '')
47
45
  });
48
- // Execute tool - dynamically via database
49
- this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
50
- try {
51
- const { name, arguments: args } = request.params;
52
- //console.log(`šŸ”§ Executing dynamic tool: ${name}`);
53
- const result = await this.executor.executeTool(name, args || {});
54
- return {
55
- content: [
56
- {
57
- type: 'text',
58
- text: JSON.stringify(result, null, 2)
59
- }
60
- ]
61
- };
62
- }
63
- catch (error) {
64
- console.error(`āŒ Error executing tool ${request.params.name}:`, error);
65
- throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Failed to execute tool: ${error instanceof Error ? error.message : 'Unknown error'}`);
66
- }
46
+ }
47
+ resolveWsAuthContext(req) {
48
+ let queryToken = '';
49
+ try {
50
+ const host = req.headers.host || 'localhost';
51
+ const parsed = new URL(req.url || '/', `http://${host}`);
52
+ queryToken = String(parsed.searchParams.get('token') || '').trim();
53
+ }
54
+ catch { }
55
+ return this.mcpCore.resolveAuthContextFromSources({
56
+ authorization: String(req.headers.authorization || ''),
57
+ xMcpToken: String(req.headers['x-mcp-token'] || ''),
58
+ queryToken
67
59
  });
68
- // Read resource - dynamically via database
69
- this.server.setRequestHandler(types_js_1.ReadResourceRequestSchema, async (request) => {
70
- try {
71
- const { uri } = request.params;
72
- //console.log(`šŸ“– Reading dynamic resource: ${uri}`);
73
- // Extract resource name from URI (e.g., "serverId__resourceName://list" -> "serverId__resourceName")
74
- const resourceName = uri.split('://')[0];
75
- const result = await this.executor.readResource(resourceName);
76
- return result;
77
- }
78
- catch (error) {
79
- console.error(`āŒ Error reading resource ${request.params.uri}:`, error);
80
- throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Failed to read resource: ${error instanceof Error ? error.message : 'Unknown error'}`);
60
+ }
61
+ async executeJsonRpc(rawBody, authContext) {
62
+ const message = this.mcpCore.parseIncomingMessage(rawBody);
63
+ return await this.mcpCore.processJsonRpcMessage(message, authContext);
64
+ }
65
+ isMcpAuthError(error) {
66
+ const msg = String(error instanceof Error
67
+ ? error.message
68
+ : (error && typeof error === 'object' && 'message' in error)
69
+ ? error.message
70
+ : error).toLowerCase();
71
+ if (!msg)
72
+ return false;
73
+ return msg.includes('unauthorized')
74
+ || msg.includes('invalid mcp token')
75
+ || msg.includes('bearer token required')
76
+ || msg.includes('insufficient_scope');
77
+ }
78
+ buildMcpWwwAuthenticate(req) {
79
+ const host = String(req.headers.host || '').trim();
80
+ const proto = String(req.headers['x-forwarded-proto'] || req.protocol || 'https').split(',')[0].trim();
81
+ const base = host ? `${proto}://${host}` : '';
82
+ const normalizedBase = base.replace(/\/+$/, '');
83
+ const metadataUrl = `${normalizedBase}/mcp/.well-known/oauth-protected-resource`;
84
+ const resource = `${normalizedBase}/mcp`;
85
+ return `Bearer resource_metadata="${metadataUrl}", resource="${resource}", scope="mcp", error="insufficient_scope", error_description="You need to login to continue"`;
86
+ }
87
+ sendMcpAuthRequired(req, res, id, text) {
88
+ const challenge = this.buildMcpWwwAuthenticate(req);
89
+ logger_1.logger.info(`[MCP] auth challenge jsonrpc_id=${String(id)} authHeader=${req.headers.authorization ? '1' : '0'} x-mcp-token=${req.headers['x-mcp-token'] ? '1' : '0'}`);
90
+ res.setHeader('WWW-Authenticate', challenge);
91
+ res.status(401).json({
92
+ jsonrpc: '2.0',
93
+ id,
94
+ result: {
95
+ content: [{ type: 'text', text }],
96
+ _meta: { 'mcp/www_authenticate': [challenge] },
97
+ isError: true
81
98
  }
82
99
  });
83
- // Prompts - return empty for now
84
- this.server.setRequestHandler(types_js_1.ListPromptsRequestSchema, async () => {
85
- return { prompts: [] };
86
- });
87
- this.server.setRequestHandler(types_js_1.GetPromptRequestSchema, async (request) => {
88
- throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Prompt not found: ${request.params.name}`);
89
- });
100
+ }
101
+ writeSseEvent(res, event, data) {
102
+ res.write(`event: ${event}\n`);
103
+ res.write(`data: ${typeof data === 'string' ? data : JSON.stringify(data)}\n\n`);
90
104
  }
91
105
  setupWebRoutes() {
106
+ this.app.use((0, cors_1.default)());
92
107
  this.app.use(express_1.default.json({ limit: '50mb' }));
93
108
  this.app.use(express_1.default.raw({ type: '*/*', limit: '50mb' }));
94
- // Health check
95
- this.app.get('/health', (req, res) => {
96
- const stats = this.executor.getStats();
109
+ this.app.get('/health', (_req, res) => {
97
110
  res.json({
98
111
  status: 'healthy',
99
- ...stats,
112
+ authMode: this.mcpAuthMode,
113
+ ...this.executor.getStats(),
100
114
  timestamp: new Date().toISOString()
101
115
  });
102
116
  });
103
- // MCP STDIO endpoint for bridge
117
+ this.app.get('/api/transports', (_req, res) => {
118
+ res.json({
119
+ success: true,
120
+ data: {
121
+ stdio: '/api/mcp-stdio',
122
+ sse: { stream: '/sse', messages: '/messages?sessionId={sessionId}' },
123
+ streamableHttp: '/mcp',
124
+ websocket: '/ws'
125
+ }
126
+ });
127
+ });
128
+ // 1) STDIO bridge
104
129
  this.app.post('/api/mcp-stdio', express_1.default.raw({ type: '*/*' }), async (req, res) => {
105
130
  try {
106
- let messageData;
107
- if (Buffer.isBuffer(req.body)) {
108
- messageData = JSON.parse(req.body.toString());
109
- }
110
- else if (typeof req.body === 'string') {
111
- messageData = JSON.parse(req.body);
131
+ const authContext = await this.resolveHttpAuthContext(req);
132
+ const response = await this.executeJsonRpc(req.body, authContext);
133
+ if (response) {
134
+ res.json(response);
112
135
  }
113
136
  else {
114
- messageData = req.body;
115
- }
116
- //console.log('šŸ”„ Processing MCP message:', messageData.method || 'unknown');
117
- let response = null;
118
- switch (messageData.method) {
119
- case 'initialize':
120
- response = {
121
- jsonrpc: '2.0',
122
- id: messageData.id,
123
- result: {
124
- protocolVersion: '2024-11-05',
125
- serverInfo: {
126
- name: 'quickmcp-integrated',
127
- version: '1.0.0'
128
- },
129
- capabilities: {
130
- tools: {},
131
- resources: {},
132
- prompts: {}
133
- }
134
- }
135
- };
136
- break;
137
- case 'tools/list':
138
- const tools = await this.executor.getAllTools();
139
- response = {
140
- jsonrpc: '2.0',
141
- id: messageData.id,
142
- result: { tools }
143
- };
144
- break;
145
- case 'resources/list':
146
- const resources = await this.executor.getAllResources();
147
- response = {
148
- jsonrpc: '2.0',
149
- id: messageData.id,
150
- result: { resources }
151
- };
152
- break;
153
- case 'tools/call':
154
- const toolResult = await this.executor.executeTool(messageData.params.name, messageData.params.arguments || {});
155
- response = {
156
- jsonrpc: '2.0',
157
- id: messageData.id,
158
- result: {
159
- content: [
160
- {
161
- type: 'text',
162
- text: JSON.stringify(toolResult, null, 2)
163
- }
164
- ]
165
- }
166
- };
167
- break;
168
- case 'resources/read':
169
- const uri = messageData.params.uri;
170
- const resourceName = uri.split('://')[0];
171
- const resourceResult = await this.executor.readResource(resourceName);
172
- response = {
173
- jsonrpc: '2.0',
174
- id: messageData.id,
175
- result: resourceResult
176
- };
177
- break;
178
- case 'notifications/initialized':
179
- // No response for notifications
180
- //console.log('šŸ”” MCP client initialized');
181
- break;
182
- default:
183
- if (messageData.id) {
184
- response = {
185
- jsonrpc: '2.0',
186
- id: messageData.id,
187
- error: {
188
- code: -32601,
189
- message: `Method not found: ${messageData.method}`
190
- }
191
- };
192
- }
137
+ res.status(204).end();
138
+ }
139
+ }
140
+ catch (error) {
141
+ if (this.mcpAuthMode !== 'NONE' && this.isMcpAuthError(error)) {
142
+ this.sendMcpAuthRequired(req, res, req.body?.id ?? null, 'Authentication required: no access token provided.');
143
+ return;
193
144
  }
145
+ res.status(500).json({
146
+ jsonrpc: '2.0',
147
+ id: req.body?.id,
148
+ error: {
149
+ code: -32603,
150
+ message: `Internal error: ${error instanceof Error ? error.message : 'Unknown error'}`
151
+ }
152
+ });
153
+ }
154
+ });
155
+ // 2) Legacy SSE transport
156
+ this.app.get('/sse', async (req, res) => {
157
+ const sessionId = (0, node_crypto_1.randomUUID)();
158
+ const authContext = await this.resolveHttpAuthContext(req);
159
+ res.setHeader('Content-Type', 'text/event-stream');
160
+ res.setHeader('Cache-Control', 'no-cache, no-transform');
161
+ res.setHeader('Connection', 'keep-alive');
162
+ res.flushHeaders?.();
163
+ this.writeSseEvent(res, 'endpoint', `/messages?sessionId=${encodeURIComponent(sessionId)}`);
164
+ const keepAlive = setInterval(() => {
165
+ res.write(': keep-alive\n\n');
166
+ }, 25000);
167
+ this.sseSessions.set(sessionId, { res, authContext, keepAlive });
168
+ req.on('close', () => {
169
+ const session = this.sseSessions.get(sessionId);
170
+ if (session) {
171
+ clearInterval(session.keepAlive);
172
+ this.sseSessions.delete(sessionId);
173
+ }
174
+ });
175
+ });
176
+ this.app.post('/messages', async (req, res) => {
177
+ try {
178
+ const sessionId = String(req.query.sessionId || '');
179
+ if (!sessionId) {
180
+ res.status(400).send('Missing sessionId');
181
+ return;
182
+ }
183
+ const session = this.sseSessions.get(sessionId);
184
+ if (!session) {
185
+ res.status(404).send('Session not found');
186
+ return;
187
+ }
188
+ const requestAuth = await this.resolveHttpAuthContext(req);
189
+ const effectiveAuth = requestAuth.identity || requestAuth.tokenRecord ? requestAuth : session.authContext;
190
+ const response = await this.executeJsonRpc(req.body, effectiveAuth);
194
191
  if (response) {
192
+ this.writeSseEvent(session.res, 'message', response);
195
193
  res.json(response);
194
+ return;
196
195
  }
197
- else {
196
+ res.status(204).end();
197
+ }
198
+ catch (error) {
199
+ if (this.mcpAuthMode !== 'NONE' && this.isMcpAuthError(error)) {
200
+ this.sendMcpAuthRequired(req, res, req.body?.id ?? null, 'Authentication required: no access token provided.');
201
+ return;
202
+ }
203
+ res.status(500).json({
204
+ jsonrpc: '2.0',
205
+ id: req.body?.id,
206
+ error: {
207
+ code: -32603,
208
+ message: `Internal error: ${error instanceof Error ? error.message : 'Unknown error'}`
209
+ }
210
+ });
211
+ }
212
+ });
213
+ // 3) Streamable HTTP (single endpoint)
214
+ this.app.all('/mcp', async (req, res) => {
215
+ logger_1.logger.info(`[MCP/HTTP] ${req.method} /mcp accept=${String(req.headers.accept || '')} content-type=${String(req.headers['content-type'] || '')}`);
216
+ if (req.method === 'DELETE') {
217
+ res.status(204).end();
218
+ return;
219
+ }
220
+ if (req.method !== 'POST') {
221
+ res.status(405).json({ error: 'Method not allowed' });
222
+ return;
223
+ }
224
+ try {
225
+ const authContext = await this.resolveHttpAuthContext(req);
226
+ const response = await this.executeJsonRpc(req.body, authContext);
227
+ if (!response) {
198
228
  res.status(204).end();
229
+ return;
230
+ }
231
+ const acceptsSse = String(req.headers.accept || '').includes('text/event-stream') || String(req.query.stream || '') === 'true';
232
+ if (acceptsSse) {
233
+ res.setHeader('Content-Type', 'text/event-stream');
234
+ res.setHeader('Cache-Control', 'no-cache, no-transform');
235
+ res.setHeader('Connection', 'keep-alive');
236
+ this.writeSseEvent(res, 'message', response);
237
+ res.end();
238
+ return;
199
239
  }
240
+ res.json(response);
200
241
  }
201
242
  catch (error) {
202
- console.error('āŒ Error processing MCP message:', error);
243
+ if (this.mcpAuthMode !== 'NONE' && this.isMcpAuthError(error)) {
244
+ this.sendMcpAuthRequired(req, res, req.body?.id ?? null, 'Authentication required: no access token provided.');
245
+ return;
246
+ }
247
+ logger_1.logger.error(`[MCP/HTTP] request failed method=${req.method}`, error);
203
248
  res.status(500).json({
204
249
  jsonrpc: '2.0',
205
250
  id: req.body?.id,
@@ -210,42 +255,87 @@ class IntegratedMCPServer {
210
255
  });
211
256
  }
212
257
  });
213
- // Stats endpoint
214
- this.app.get('/api/stats', (req, res) => {
258
+ this.app.get('/api/stats', (_req, res) => {
215
259
  res.json(this.executor.getStats());
216
260
  });
217
261
  }
218
- async start(port = 3001) {
219
- // Start HTTP server
220
- const httpServer = this.app.listen(port, () => {
221
- //console.log(`šŸš€ QuickMCP Integrated Server running on http://localhost:${port}`);
222
- const stats = this.executor.getStats();
223
- //console.log(`šŸ“Š Managing ${stats.servers} virtual servers with ${stats.tools} tools and ${stats.resources} resources`);
262
+ setupWebSocketTransport(httpServer) {
263
+ this.wsServer = new ws_1.WebSocketServer({ server: httpServer, path: '/ws' });
264
+ this.wsServer.on('connection', (socket, req) => {
265
+ let sessionAuth = null;
266
+ this.resolveWsAuthContext(req).then((auth) => {
267
+ sessionAuth = auth;
268
+ }).catch((error) => {
269
+ socket.send(JSON.stringify({
270
+ jsonrpc: '2.0',
271
+ id: null,
272
+ error: {
273
+ code: -32603,
274
+ message: `Auth error: ${error instanceof Error ? error.message : 'Unknown error'}`
275
+ }
276
+ }));
277
+ socket.close();
278
+ });
279
+ socket.on('message', async (raw) => {
280
+ if (!sessionAuth) {
281
+ socket.send(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32603, message: 'Auth context not yet resolved' } }));
282
+ return;
283
+ }
284
+ let messageData = null;
285
+ try {
286
+ messageData = this.mcpCore.parseIncomingMessage(raw.toString());
287
+ const response = await this.mcpCore.processJsonRpcMessage(messageData, sessionAuth);
288
+ if (response) {
289
+ socket.send(JSON.stringify(response));
290
+ }
291
+ }
292
+ catch (error) {
293
+ socket.send(JSON.stringify({
294
+ jsonrpc: '2.0',
295
+ id: messageData?.id ?? null,
296
+ error: {
297
+ code: -32603,
298
+ message: `Internal error: ${error instanceof Error ? error.message : 'Unknown error'}`
299
+ }
300
+ }));
301
+ }
302
+ });
224
303
  });
225
- // Setup SSE transport for MCP - skip for now due to compatibility issues
226
- // const transport = new SSEServerTransport('/sse', httpServer);
227
- // await this.server.connect(transport);
228
- //console.log('āœ… MCP server connected with dynamic SQLite-based execution (HTTP endpoints active)');
229
- // Graceful shutdown
304
+ }
305
+ async start(port) {
306
+ const resolvedPort = typeof port === 'number' && Number.isFinite(port) && port > 0
307
+ ? port
308
+ : new port_utils_1.PortUtils(process.env).resolveServerPorts().mcpPort;
309
+ const httpServer = this.app.listen(resolvedPort);
310
+ this.setupWebSocketTransport(httpServer);
230
311
  process.on('SIGINT', async () => {
231
- //console.log('\nšŸ”„ Shutting down QuickMCP Integrated Server...');
232
312
  await this.cleanup();
233
313
  process.exit(0);
234
314
  });
235
315
  process.on('SIGTERM', async () => {
236
- //console.log('\nšŸ”„ Shutting down QuickMCP Integrated Server...');
237
316
  await this.cleanup();
238
317
  process.exit(0);
239
318
  });
240
319
  }
241
320
  async cleanup() {
242
321
  try {
243
- await this.server.close();
322
+ this.sseSessions.forEach((session) => {
323
+ clearInterval(session.keepAlive);
324
+ session.res.end();
325
+ });
326
+ this.sseSessions.clear();
327
+ await new Promise((resolve) => {
328
+ if (!this.wsServer) {
329
+ resolve();
330
+ return;
331
+ }
332
+ this.wsServer.close(() => resolve());
333
+ });
244
334
  await this.executor.close();
245
- //console.log('āœ… Cleanup completed');
335
+ this.authStore.close();
246
336
  }
247
337
  catch (error) {
248
- console.error('āŒ Error during cleanup:', error);
338
+ logger_1.logger.error('āŒ Error during cleanup:', error);
249
339
  }
250
340
  }
251
341
  }
@@ -1 +1 @@
1
- {"version":3,"file":"integrated-mcp-server-new.js","sourceRoot":"","sources":["../src/integrated-mcp-server-new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrated-mcp-server-new.js","sourceRoot":"","sources":["../src/integrated-mcp-server-new.ts"],"names":[],"mappings":"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"}