@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
@@ -1,457 +1,320 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en">
2
+ <html lang="en" class="h-full">
3
+
3
4
  <head>
4
5
  <meta charset="UTF-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Database Tables - MCP Server Generator</title>
7
- <link rel="stylesheet" href="shared-styles.css">
8
- <style>
9
- .table-grid {
10
- display: grid;
11
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
12
- gap: 1.5rem;
13
- margin-top: 1rem;
14
- }
15
-
16
- .table-card {
17
- background: var(--card-background);
18
- border: 1px solid var(--border-color);
19
- border-radius: 8px;
20
- padding: 1.5rem;
21
- transition: all 0.2s ease;
22
- }
23
-
24
- .table-card:hover {
25
- transform: translateY(-2px);
26
- box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
27
- }
7
+ <title>Database Tables - QuickMCP</title>
28
8
 
29
- .table-header {
30
- display: flex;
31
- align-items: center;
32
- justify-content: space-between;
33
- margin-bottom: 1rem;
34
- }
9
+ <link rel="icon" type="image/png" href="/images/favicon.png">
35
10
 
36
- .table-name {
37
- font-size: 1.25rem;
38
- font-weight: 600;
39
- color: var(--text-primary);
40
- margin: 0;
41
- display: flex;
42
- align-items: center;
43
- gap: 0.5rem;
44
- }
11
+ <!-- Tailwind CSS -->
12
+ <script src="https://cdn.tailwindcss.com"></script>
45
13
 
46
- .table-icon {
47
- font-size: 1.5rem;
48
- }
14
+ <!-- Font Awesome -->
15
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
49
16
 
50
- .table-stats {
51
- display: flex;
52
- gap: 1rem;
53
- margin-bottom: 1rem;
54
- }
17
+ <!-- Custom Archdraw Styles -->
18
+ <link rel="stylesheet" href="quickmcp-styles.css">
55
19
 
56
- .stat-item {
57
- display: flex;
58
- flex-direction: column;
59
- align-items: center;
60
- gap: 0.25rem;
61
- }
62
-
63
- .stat-number {
64
- font-size: 1.5rem;
65
- font-weight: 700;
66
- color: var(--primary-color);
67
- }
68
-
69
- .stat-label {
70
- font-size: 0.75rem;
71
- color: var(--text-secondary);
72
- text-transform: uppercase;
73
- letter-spacing: 0.5px;
74
- }
75
-
76
- .data-preview {
77
- margin-top: 1rem;
78
- }
79
-
80
- .data-header {
81
- font-size: 0.9rem;
82
- font-weight: 600;
83
- color: var(--text-primary);
84
- margin-bottom: 0.5rem;
85
- padding-bottom: 0.5rem;
86
- border-bottom: 1px solid var(--border-color);
87
- }
88
-
89
- .data-grid {
90
- overflow-x: auto;
91
- margin-top: 0.5rem;
92
- }
93
-
94
- .data-table {
95
- width: 100%;
96
- border-collapse: collapse;
97
- background: white;
98
- border-radius: 8px;
99
- overflow: hidden;
100
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
20
+ <script>
21
+ tailwind.config = {
22
+ darkMode: 'class',
23
+ theme: {
24
+ extend: {
25
+ colors: {
26
+ slate: {
27
+ 50: '#f8fafc',
28
+ 100: '#f1f5f9',
29
+ 200: '#e2e8f0',
30
+ 300: '#cbd5e1',
31
+ 400: '#94a3b8',
32
+ 500: '#64748b',
33
+ 600: '#475569',
34
+ 700: '#334155',
35
+ 800: '#1e293b',
36
+ 900: '#0f172a',
37
+ }
38
+ }
39
+ }
40
+ }
101
41
  }
102
-
42
+ </script>
43
+ <style>
44
+ /* Custom styles for data tables */
103
45
  .data-table th {
104
- background: var(--primary-color);
105
- color: white;
106
- padding: 0.75rem;
107
- text-align: left;
46
+ background-color: #f1f5f9;
47
+ color: #475569;
108
48
  font-weight: 600;
109
- font-size: 0.85rem;
110
- border: none;
49
+ text-transform: uppercase;
50
+ font-size: 0.75rem;
51
+ letter-spacing: 0.05em;
52
+ padding: 0.75rem 1rem;
53
+ border-bottom: 1px solid #e2e8f0;
111
54
  }
112
55
 
113
56
  .data-table td {
114
- padding: 0.75rem;
115
- border-bottom: 1px solid var(--border-light);
116
- font-size: 0.85rem;
117
- color: var(--text-primary);
118
- max-width: 200px;
119
- word-wrap: break-word;
120
- }
121
-
122
- .data-table tr:nth-child(even) {
123
- background: var(--secondary-color);
124
- }
125
-
126
- .data-table tr:hover {
127
- background: #e3f2fd;
57
+ padding: 0.75rem 1rem;
58
+ border-bottom: 1px solid #f1f5f9;
59
+ font-size: 0.875rem;
60
+ color: #334155;
128
61
  }
129
62
 
130
63
  .data-table tr:last-child td {
131
64
  border-bottom: none;
132
65
  }
133
66
 
134
- .no-data {
135
- text-align: center;
136
- color: var(--text-secondary);
137
- font-style: italic;
138
- padding: 2rem;
139
- background: var(--secondary-color);
140
- border-radius: 6px;
141
- }
142
-
143
- .more-data {
144
- text-align: center;
145
- color: var(--text-secondary);
146
- font-size: 0.9rem;
147
- font-style: italic;
148
- margin-top: 0.5rem;
149
- }
150
-
151
- .table-actions {
152
- display: flex;
153
- gap: 0.5rem;
154
- margin-top: 1rem;
155
- }
156
-
157
- .btn-small {
158
- font-size: 0.85rem;
159
- padding: 0.5rem 1rem;
160
- border: none;
161
- border-radius: 4px;
162
- cursor: pointer;
163
- text-decoration: none;
164
- display: inline-flex;
165
- align-items: center;
166
- gap: 0.5rem;
167
- transition: all 0.2s ease;
168
- }
169
-
170
- .btn-view {
171
- background: var(--primary-color);
172
- color: white;
173
- }
174
-
175
- .btn-view:hover {
176
- background: var(--primary-dark);
177
- transform: translateY(-1px);
178
- }
179
-
180
- .btn-query {
181
- background: var(--secondary-color);
182
- color: var(--text-primary);
183
- }
184
-
185
- .btn-query:hover {
186
- background: var(--secondary-dark);
187
- transform: translateY(-1px);
188
- }
189
-
190
- .empty-state {
191
- text-align: center;
192
- padding: 3rem;
193
- color: var(--text-secondary);
194
- }
195
-
196
- .empty-icon {
197
- font-size: 4rem;
198
- margin-bottom: 1rem;
199
- opacity: 0.5;
200
- }
201
-
202
- .refresh-btn {
203
- position: fixed;
204
- bottom: 2rem;
205
- right: 2rem;
206
- width: 56px;
207
- height: 56px;
208
- border: none;
209
- border-radius: 50%;
210
- background: var(--primary-color);
211
- color: white;
212
- font-size: 1.5rem;
213
- cursor: pointer;
214
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
215
- transition: all 0.2s ease;
216
- z-index: 100;
217
- }
218
-
219
- .refresh-btn:hover {
220
- background: var(--primary-dark);
221
- transform: scale(1.1);
222
- }
223
-
224
- .db-info {
225
- background: var(--info-background);
226
- border: 1px solid var(--info-border);
227
- border-radius: 8px;
228
- padding: 1rem;
229
- margin-bottom: 2rem;
230
- }
231
-
232
- .db-path {
233
- font-family: monospace;
234
- font-size: 0.9rem;
235
- color: var(--text-secondary);
236
- word-break: break-all;
237
- }
238
-
239
- .tab-navigation {
240
- display: flex;
241
- border-bottom: 2px solid var(--border-color);
242
- margin-bottom: 2rem;
243
- gap: 0.5rem;
244
- }
245
-
246
- .tab-button {
247
- background: none;
248
- border: none;
249
- padding: 1rem 1.5rem;
250
- cursor: pointer;
251
- border-bottom: 3px solid transparent;
252
- font-size: 0.95rem;
253
- font-weight: 500;
254
- color: var(--text-secondary);
255
- transition: all 0.2s ease;
256
- border-radius: 8px 8px 0 0;
257
- display: flex;
258
- align-items: center;
259
- gap: 0.5rem;
260
- }
261
-
262
- .tab-button:hover {
263
- background: var(--secondary-color);
264
- color: var(--text-primary);
265
- }
266
-
267
- .tab-button.active {
268
- color: var(--primary-color);
269
- border-bottom-color: var(--primary-color);
270
- background: var(--secondary-color);
271
- font-weight: 600;
67
+ .data-table tr:hover td {
68
+ background-color: #f8fafc;
272
69
  }
70
+ </style>
71
+ </head>
273
72
 
274
- .tab-content {
275
- min-height: 400px;
276
- }
73
+ <body class="h-screen flex flex-col bg-gradient-to-br from-slate-50 to-slate-100 overflow-hidden text-slate-900">
74
+
75
+ <!-- Header -->
76
+ <header
77
+ class="backdrop-blur-sm bg-white/80 border-b border-slate-200/60 shadow-sm relative z-50 h-16 flex-shrink-0 flex items-center justify-between px-6 py-3">
78
+ <!-- Brand -->
79
+ <div class="flex items-center gap-6">
80
+ <div class="flex items-center gap-3">
81
+ <div
82
+ class="w-9 h-9 rounded-lg bg-blue-600 text-white flex items-center justify-center shadow-lg shadow-blue-500/25">
83
+ <i class="fas fa-rocket text-lg"></i>
84
+ </div>
85
+ <div>
86
+ <h1 class="text-xl font-bold gradient-text leading-tight">QuickMCP</h1>
87
+ <p class="text-xs text-slate-500 font-medium">Server Generator</p>
88
+ </div>
89
+ </div>
90
+ <div class="h-8 w-px bg-gradient-to-b from-transparent via-slate-300 to-transparent hidden md:block"></div>
91
+ <div class="hidden md:flex items-center gap-2 text-sm font-medium text-slate-600">
92
+ <span>Database Tables</span>
93
+ </div>
94
+ </div>
277
95
 
278
- .tab-panel {
279
- display: none !important;
280
- }
96
+ <!-- Actions -->
97
+ <div class="flex items-center gap-3">
98
+ <div
99
+ class="hidden sm:flex items-center gap-2 bg-green-50 text-green-700 px-3 py-1.5 rounded-lg text-sm font-medium border border-green-200/50">
100
+ <div class="w-2 h-2 bg-green-500 rounded-full animate-pulse"></div>
101
+ <span>System Online</span>
102
+ </div>
103
+ <button
104
+ class="p-2 rounded-lg hover:bg-slate-100 transition-colors relative text-slate-500 hover:text-slate-700">
105
+ <i class="fas fa-bell"></i>
106
+ <span class="absolute top-2 right-2 w-2 h-2 bg-red-500 rounded-full border-2 border-white"></span>
107
+ </button>
108
+ <div
109
+ class="w-8 h-8 rounded-full bg-gradient-to-tr from-blue-500 to-purple-500 text-white flex items-center justify-center text-sm font-bold shadow-md" data-user-avatar>
110
+ G
111
+ </div>
112
+ </div>
113
+ </header>
114
+
115
+ <!-- Main Body -->
116
+ <div class="flex flex-1 overflow-hidden">
117
+
118
+ <!-- Left Sidebar (Navigation) -->
119
+ <div class="w-72 bg-white/95 backdrop-blur-sm border-r border-slate-200/60 flex flex-col flex-shrink-0 z-40">
120
+ <!-- Sidebar Header -->
121
+ <div class="p-6 border-b border-slate-200/60 bg-gradient-to-r from-slate-50/50 to-white/50">
122
+ <div class="flex items-center justify-between mb-2">
123
+ <div class="flex items-center gap-3">
124
+ <div
125
+ class="w-8 h-8 flex items-center justify-center bg-gradient-to-br from-emerald-500 to-emerald-600 rounded-lg shadow-lg shadow-emerald-500/25">
126
+ <i class="fas fa-compass text-white"></i>
127
+ </div>
128
+ <div>
129
+ <h2 class="text-slate-900 font-bold tracking-tight text-lg">Navigation</h2>
130
+ <p class="text-slate-500 text-xs leading-none font-medium">Application Pages</p>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ </div>
281
135
 
282
- .tab-panel.active {
283
- display: block !important;
284
- }
136
+ <!-- Navigation Links -->
137
+ <div class="p-4 overflow-y-auto flex-1 scrollbar-modern space-y-3">
285
138
 
286
- .table-wrapper {
287
- background: white;
288
- border-radius: 8px;
289
- overflow: hidden;
290
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
291
- }
139
+ <a href="/generate"
140
+ class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
141
+ <div class="relative">
142
+ <div
143
+ class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
144
+ <i class="fas fa-magic"></i>
145
+ </div>
146
+ </div>
147
+ <div class="flex-1 min-w-0">
148
+ <span
149
+ class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">Generate
150
+ Server</span>
151
+ </div>
152
+ </a>
292
153
 
293
- .table-header {
294
- background: var(--primary-color);
295
- color: white;
296
- padding: 1rem;
297
- font-weight: 600;
298
- display: flex;
299
- align-items: center;
300
- gap: 0.5rem;
301
- }
154
+ <a href="/manage-servers"
155
+ class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
156
+ <div class="relative">
157
+ <div
158
+ class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
159
+ <i class="fas fa-server"></i>
160
+ </div>
161
+ </div>
162
+ <div class="flex-1 min-w-0">
163
+ <span
164
+ class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">Manage
165
+ Servers</span>
166
+ </div>
167
+ </a>
302
168
 
303
- @media (max-width: 768px) {
304
- .tab-navigation {
305
- flex-direction: column;
306
- gap: 0;
307
- }
169
+ <a href="/test-servers"
170
+ class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
171
+ <div class="relative">
172
+ <div
173
+ class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
174
+ <i class="fas fa-vial"></i>
175
+ </div>
176
+ </div>
177
+ <div class="flex-1 min-w-0">
178
+ <span
179
+ class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">Test
180
+ Servers</span>
181
+ </div>
182
+ </a>
308
183
 
309
- .tab-button {
310
- border-radius: 0;
311
- border-bottom: 1px solid var(--border-color);
312
- border-right: 3px solid transparent;
313
- padding: 0.75rem 1rem;
314
- }
184
+ <!-- Active Link -->
185
+ <a href="/database-tables"
186
+ class="card relative flex items-center gap-3 p-4 border-blue-400 shadow-md shadow-blue-500/10 bg-blue-50/30">
187
+ <div class="relative">
188
+ <div class="p-2.5 rounded-lg shadow-sm bg-blue-500 text-white">
189
+ <i class="fas fa-table"></i>
190
+ </div>
191
+ </div>
192
+ <div class="flex-1 min-w-0">
193
+ <span class="text-blue-900 font-bold text-sm block">Database Tables</span>
194
+ <span class="text-blue-600 text-xs mt-0.5 block font-medium">Inspect Data</span>
195
+ </div>
196
+ <div class="w-1.5 h-1.5 rounded-full bg-blue-500 shadow-sm"></div>
197
+ </a>
315
198
 
316
- .tab-button.active {
317
- border-bottom-color: var(--border-color);
318
- border-right-color: var(--primary-color);
319
- }
199
+ <a href="/how-to-use"
200
+ class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
201
+ <div class="relative">
202
+ <div
203
+ class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
204
+ <i class="fas fa-book"></i>
205
+ </div>
206
+ </div>
207
+ <div class="flex-1 min-w-0">
208
+ <span
209
+ class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">How
210
+ to Use</span>
211
+ </div>
212
+ </a>
320
213
 
321
- .refresh-btn {
322
- bottom: 1rem;
323
- right: 1rem;
324
- }
325
- }
326
- </style>
327
- </head>
328
- <body>
329
- <div class="main-layout">
330
- <!-- Sidebar -->
331
- <div class="sidebar" id="sidebar">
332
- <div class="sidebar-header">
333
- <div class="sidebar-logo">QM</div>
334
- <div class="sidebar-title">QuickMCP</div>
335
214
  </div>
336
- <nav class="sidebar-nav">
337
- <a href="/" class="sidebar-nav-item">
338
- <div class="icon">🚀</div>
339
- <span>Generate Server</span>
340
- </a>
341
- <a href="/manage-servers" class="sidebar-nav-item">
342
- <div class="icon">📋</div>
343
- <span>Manage Servers</span>
344
- </a>
345
- <a href="/test-servers" class="sidebar-nav-item">
346
- <div class="icon">🧪</div>
347
- <span>Test Servers</span>
348
- </a>
349
- <a href="/database-tables" class="sidebar-nav-item active">
350
- <div class="icon">🗃️</div>
351
- <span>Database Tables</span>
352
- </a>
353
- <a href="/how-to-use" class="sidebar-nav-item">
354
- <div class="icon">📖</div>
355
- <span>How to Use</span>
356
- </a>
357
- </nav>
358
215
  </div>
359
216
 
360
- <!-- Overlay for mobile -->
361
- <div class="sidebar-overlay" id="sidebarOverlay" onclick="closeSidebar()"></div>
217
+ <!-- Main Content Area -->
218
+ <div class="flex-1 relative bg-slate-50/50 overflow-hidden flex flex-col min-w-0">
219
+ <div class="absolute inset-0 shadow-inner shadow-slate-200/30 pointer-events-none z-10"></div>
362
220
 
363
- <!-- Main Content -->
364
- <div class="main-content">
365
- <div class="topbar">
366
- <button class="hamburger" id="hamburger" onclick="toggleSidebar()">
367
- <span></span>
368
- <span></span>
369
- <span></span>
370
- </button>
371
- <div class="topbar-title">
372
- MCP Server Generator - Database Tables
373
- </div>
374
- </div>
221
+ <div class="flex-1 overflow-y-auto scrollbar-modern p-8 relative z-0">
222
+ <div class="max-w-7xl mx-auto space-y-8 pb-20">
375
223
 
376
- <div class="container">
377
- <div class="card">
378
- <div class="card-header">
379
- <h1 class="section-title">SQLite Database Tables</h1>
380
- <p class="section-subtitle">Explore the internal database structure</p>
224
+ <div class="flex justify-between items-center">
225
+ <div>
226
+ <h2 class="text-3xl font-bold text-slate-900">SQLite Database Tables</h2>
227
+ <p class="text-slate-600 mt-1">Explore the internal database structure</p>
228
+ </div>
229
+ <button onclick="loadTables()"
230
+ class="bg-white border border-slate-200 hover:border-blue-400 text-slate-700 hover:text-blue-600 px-4 py-2 rounded-lg font-medium transition-colors shadow-sm flex items-center gap-2">
231
+ <i class="fas fa-sync-alt"></i> Refresh
232
+ </button>
381
233
  </div>
382
- <div class="card-content">
383
- <div class="db-info">
384
- <h3 style="margin-top: 0;">Database Information</h3>
385
- <div class="db-path" id="dbPath">Loading database path...</div>
386
- <div style="margin-top: 0.5rem;">
387
- <strong>Total Tables:</strong> <span id="tableCount">-</span>
234
+
235
+ <div class="card p-6">
236
+ <div class="flex items-center gap-4 mb-6 p-4 bg-slate-50 rounded-xl border border-slate-200">
237
+ <div class="p-3 bg-blue-100 text-blue-600 rounded-lg">
238
+ <i class="fas fa-database text-xl"></i>
239
+ </div>
240
+ <div>
241
+ <h3 class="text-sm font-bold text-slate-900 uppercase tracking-wide">Database Path</h3>
242
+ <p class="text-xs font-mono text-slate-600 mt-1 break-all" id="dbPath">Loading...</p>
243
+ </div>
244
+ <div class="ml-auto text-right">
245
+ <h3 class="text-sm font-bold text-slate-900 uppercase tracking-wide">Total Tables</h3>
246
+ <p class="text-2xl font-bold text-blue-600 leading-none mt-1" id="tableCount">-</p>
388
247
  </div>
389
248
  </div>
390
249
 
391
250
  <div id="tables-container">
392
- <div class="loading" id="tablesLoading">Loading database tables...</div>
251
+ <div id="tablesLoading" class="text-center py-12">
252
+ <div
253
+ class="w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin mx-auto mb-3">
254
+ </div>
255
+ <p class="text-sm font-medium text-blue-600">Loading database tables...</p>
256
+ </div>
393
257
 
394
258
  <div id="tables-tabs" style="display: none;">
395
- <!-- Tab Navigation -->
396
- <div class="tab-navigation">
397
- <button class="tab-button active" data-table="servers" onclick="switchTab('servers')">
398
- 🖥️ Servers (<span id="servers-count">0</span>)
259
+ <!-- Tabs -->
260
+ <div class="flex border-b border-slate-200 mb-6">
261
+ <button
262
+ class="px-6 py-3 text-sm font-bold text-blue-600 border-b-2 border-blue-600 bg-blue-50/50 rounded-t-lg transition-colors tab-button active"
263
+ data-table="servers" onclick="switchTab('servers')">
264
+ <i class="fas fa-server mr-2"></i> Servers (<span id="servers-count">0</span>)
399
265
  </button>
400
- <button class="tab-button" data-table="tools" onclick="switchTab('tools')">
401
- 🔧 Tools (<span id="tools-count">0</span>)
266
+ <button
267
+ class="px-6 py-3 text-sm font-medium text-slate-600 hover:text-slate-900 border-b-2 border-transparent hover:bg-slate-50 rounded-t-lg transition-colors tab-button"
268
+ data-table="tools" onclick="switchTab('tools')">
269
+ <i class="fas fa-wrench mr-2"></i> Tools (<span id="tools-count">0</span>)
402
270
  </button>
403
- <button class="tab-button" data-table="resources" onclick="switchTab('resources')">
404
- 📦 Resources (<span id="resources-count">0</span>)
271
+ <button
272
+ class="px-6 py-3 text-sm font-medium text-slate-600 hover:text-slate-900 border-b-2 border-transparent hover:bg-slate-50 rounded-t-lg transition-colors tab-button"
273
+ data-table="resources" onclick="switchTab('resources')">
274
+ <i class="fas fa-box mr-2"></i> Resources (<span id="resources-count">0</span>)
405
275
  </button>
406
276
  </div>
407
277
 
408
- <!-- Tab Content -->
278
+ <!-- Content -->
409
279
  <div class="tab-content">
410
- <div id="tab-servers" class="tab-panel active">
411
- <!-- Servers table will be loaded here -->
412
- </div>
413
- <div id="tab-tools" class="tab-panel">
414
- <!-- Tools table will be loaded here -->
415
- </div>
416
- <div id="tab-resources" class="tab-panel">
417
- <!-- Resources table will be loaded here -->
418
- </div>
280
+ <div id="tab-servers" class="tab-panel active"></div>
281
+ <div id="tab-tools" class="tab-panel hidden"></div>
282
+ <div id="tab-resources" class="tab-panel hidden"></div>
419
283
  </div>
420
284
  </div>
421
285
  </div>
422
286
  </div>
287
+
423
288
  </div>
424
289
  </div>
425
290
  </div>
426
291
  </div>
427
292
 
428
293
  <!-- Table Details Modal -->
429
- <div id="tableDetailsModal" class="modal" style="display: none;">
430
- <div class="modal-content">
431
- <div class="modal-header">
432
- <h2 id="tableModalTitle">Table Details</h2>
433
- <button class="modal-close" onclick="closeTableDetailsModal()">&times;</button>
294
+ <div id="tableDetailsModal"
295
+ class="fixed inset-0 bg-slate-900/60 backdrop-blur-sm z-50 hidden flex items-center justify-center p-4">
296
+ <div class="bg-white rounded-2xl shadow-2xl max-w-4xl w-full max-h-[90vh] flex flex-col overflow-hidden">
297
+ <div class="p-6 border-b border-slate-200 flex justify-between items-center bg-slate-50">
298
+ <h2 class="text-xl font-bold text-slate-900" id="tableModalTitle">Table Details</h2>
299
+ <button onclick="closeTableDetailsModal()"
300
+ class="text-slate-400 hover:text-slate-600 transition-colors">
301
+ <i class="fas fa-times text-xl"></i>
302
+ </button>
434
303
  </div>
435
- <div class="modal-body" id="tableModalBody">
436
- <!-- Table details will be loaded here -->
304
+ <div class="p-6 overflow-y-auto" id="tableModalBody">
305
+ <div class="text-center py-8">Loading...</div>
437
306
  </div>
438
307
  </div>
439
- <div class="modal-overlay" onclick="closeTableDetailsModal()"></div>
440
308
  </div>
441
309
 
442
- <!-- Refresh Button -->
443
- <button class="refresh-btn" onclick="loadTables()" title="Refresh Tables">
444
- 🔄
445
- </button>
446
-
447
- <script src="shared.js"></script>
310
+ <script src="logger.js"></script>
311
+ <script src="shared.js"></script>
448
312
  <script>
449
313
  // Load tables when page loads
450
- document.addEventListener('DOMContentLoaded', function() {
314
+ document.addEventListener('DOMContentLoaded', function () {
451
315
  loadTables();
452
316
  });
453
317
 
454
- // Load database tables
455
318
  async function loadTables() {
456
319
  const loading = document.getElementById('tablesLoading');
457
320
  const tabsContainer = document.getElementById('tables-tabs');
@@ -472,11 +335,11 @@
472
335
  } catch (error) {
473
336
  console.error('Error loading tables:', error);
474
337
  tabsContainer.innerHTML = `
475
- <div class="empty-state">
476
- <div class="empty-icon">❌</div>
477
- <h3>Failed to Load Tables</h3>
478
- <p>Error: ${error.message}</p>
479
- <button class="btn btn-primary" onclick="loadTables()">Retry</button>
338
+ <div class="text-center py-12">
339
+ <div class="text-red-500 text-4xl mb-4"><i class="fas fa-exclamation-circle"></i></div>
340
+ <h3 class="text-lg font-bold text-slate-900">Failed to Load Tables</h3>
341
+ <p class="text-slate-600 mb-4">Error: ${error.message}</p>
342
+ <button class="bg-blue-600 text-white px-4 py-2 rounded-lg" onclick="loadTables()">Retry</button>
480
343
  </div>
481
344
  `;
482
345
  tabsContainer.style.display = 'block';
@@ -485,71 +348,56 @@
485
348
  }
486
349
  }
487
350
 
488
- // Update database info
489
351
  function updateDatabaseInfo(data) {
490
352
  document.getElementById('dbPath').textContent = data.dbPath || 'Unknown';
491
353
  document.getElementById('tableCount').textContent = data.tables.length;
492
354
  }
493
355
 
494
- // Display tables in tab format
495
356
  function displayTables(tables) {
496
357
  const tabsContainer = document.getElementById('tables-tabs');
497
358
 
498
359
  if (tables.length === 0) {
499
360
  tabsContainer.innerHTML = `
500
- <div class="empty-state">
501
- <div class="empty-icon">🗃️</div>
502
- <h3>No Tables Found</h3>
503
- <p>The database appears to be empty or not initialized.</p>
361
+ <div class="text-center py-12">
362
+ <div class="text-slate-300 text-4xl mb-4"><i class="fas fa-table"></i></div>
363
+ <h3 class="text-lg font-bold text-slate-900">No Tables Found</h3>
364
+ <p class="text-slate-600">The database appears to be empty.</p>
504
365
  </div>
505
366
  `;
506
367
  return;
507
368
  }
508
369
 
509
- // Update counts in tab buttons
510
370
  tables.forEach(table => {
511
371
  const countSpan = document.getElementById(`${table.name}-count`);
512
- if (countSpan) {
513
- countSpan.textContent = table.rowCount || 0;
514
- }
372
+ if (countSpan) countSpan.textContent = table.rowCount || 0;
515
373
  });
516
374
 
517
- // Display each table in its tab panel
518
375
  tables.forEach(table => {
519
376
  const tabPanel = document.getElementById(`tab-${table.name}`);
520
- if (tabPanel) {
521
- tabPanel.innerHTML = generateTableHTML(table);
522
- }
377
+ if (tabPanel) tabPanel.innerHTML = generateTableHTML(table);
523
378
  });
524
379
 
525
380
  tabsContainer.style.display = 'block';
526
381
  }
527
382
 
528
- // Generate HTML for a single table
529
383
  function generateTableHTML(table) {
530
384
  if (!table.sampleData || table.sampleData.length === 0) {
531
385
  return `
532
- <div class="table-wrapper">
533
- <div class="table-header">
534
- <span class="table-icon">${getTableIcon(table.name)}</span>
535
- ${table.name} - No data available
536
- </div>
537
- <div class="no-data" style="padding: 3rem;">
538
- <div>This table is empty</div>
539
- </div>
386
+ <div class="text-center py-12 bg-slate-50 rounded-xl border border-slate-200 border-dashed">
387
+ <p class="text-slate-500 italic">No data available in ${table.name}</p>
540
388
  </div>
541
389
  `;
542
390
  }
543
391
 
544
392
  return `
545
- <div class="table-wrapper">
546
- <div class="table-header">
547
- <span class="table-icon">${getTableIcon(table.name)}</span>
548
- ${table.name} (${table.rowCount} rows, ${table.columns.length} columns)
393
+ <div class="border border-slate-200 rounded-xl overflow-hidden">
394
+ <div class="bg-slate-50 px-4 py-3 border-b border-slate-200 flex justify-between items-center">
395
+ <span class="font-bold text-slate-700 text-sm uppercase">${table.name}</span>
396
+ <span class="text-xs text-slate-500">${table.rowCount} rows</span>
549
397
  </div>
550
- <div class="data-grid" style="max-height: 500px; overflow-y: auto;">
551
- <table class="data-table" style="margin: 0;">
552
- <thead style="position: sticky; top: 0; z-index: 10;">
398
+ <div class="overflow-x-auto">
399
+ <table class="w-full data-table">
400
+ <thead>
553
401
  <tr>
554
402
  ${table.columns.map(col => `<th>${col.name}</th>`).join('')}
555
403
  </tr>
@@ -559,9 +407,9 @@
559
407
  <tr>
560
408
  ${table.columns.map(col => `
561
409
  <td>${row[col.name] !== null && row[col.name] !== undefined ?
562
- (typeof row[col.name] === 'string' && row[col.name].length > 100 ?
563
- row[col.name].substring(0, 100) + '...' :
564
- row[col.name]) : '<em>NULL</em>'}</td>
410
+ (typeof row[col.name] === 'string' && row[col.name].length > 100 ?
411
+ row[col.name].substring(0, 100) + '...' :
412
+ row[col.name]) : '<em class="text-slate-400">NULL</em>'}</td>
565
413
  `).join('')}
566
414
  </tr>
567
415
  `).join('')}
@@ -569,143 +417,31 @@
569
417
  </table>
570
418
  </div>
571
419
  ${table.sampleData.length >= 5 ? `
572
- <div style="padding: 1rem; background: var(--secondary-color); text-align: center; color: var(--text-secondary);">
573
- Showing first ${table.sampleData.length} rows of ${table.rowCount} total
420
+ <div class="bg-slate-50 px-4 py-2 border-t border-slate-200 text-center text-xs text-slate-500">
421
+ Showing first ${table.sampleData.length} rows
574
422
  </div>
575
423
  ` : ''}
576
424
  </div>
577
425
  `;
578
426
  }
579
427
 
580
- // Switch between tabs
581
428
  function switchTab(tableName) {
582
- // Update tab buttons
583
429
  document.querySelectorAll('.tab-button').forEach(btn => {
584
- btn.classList.remove('active');
585
- });
586
- document.querySelector(`[data-table="${tableName}"]`).classList.add('active');
587
-
588
- // Update tab panels
589
- document.querySelectorAll('.tab-panel').forEach(panel => {
590
- panel.classList.remove('active');
430
+ btn.classList.remove('active', 'text-blue-600', 'border-b-2', 'border-blue-600', 'bg-blue-50/50');
431
+ btn.classList.add('text-slate-600', 'border-transparent');
591
432
  });
592
- document.getElementById(`tab-${tableName}`).classList.add('active');
593
- }
594
-
595
- // Get table icon based on table name
596
- function getTableIcon(tableName) {
597
- switch(tableName.toLowerCase()) {
598
- case 'servers': return '🖥️';
599
- case 'tools': return '🔧';
600
- case 'resources': return '📦';
601
- default: return '📋';
602
- }
603
- }
604
-
605
- // View table details
606
- async function viewTableDetails(tableName) {
607
- const modal = document.getElementById('tableDetailsModal');
608
- const title = document.getElementById('tableModalTitle');
609
- const body = document.getElementById('tableModalBody');
610
-
611
- title.textContent = `Table: ${tableName}`;
612
- body.innerHTML = '<div class="loading">Loading table details...</div>';
613
- modal.style.display = 'block';
614
-
615
- try {
616
- const response = await fetch(`/api/database/tables/${tableName}`);
617
- const result = await response.json();
618
-
619
- if (result.success) {
620
- displayTableDetails(result.data);
621
- } else {
622
- throw new Error(result.error || 'Failed to load table details');
623
- }
624
- } catch (error) {
625
- console.error('Error loading table details:', error);
626
- body.innerHTML = `<div class="error">Failed to load table details: ${error.message}</div>`;
627
- }
628
- }
629
-
630
- // Display table details
631
- function displayTableDetails(data) {
632
- const body = document.getElementById('tableModalBody');
633
-
634
- let detailsHtml = `
635
- <div class="table-details">
636
- <div class="info-section">
637
- <h3>Table Information</h3>
638
- <div class="info-grid">
639
- <div><strong>Name:</strong> ${data.name}</div>
640
- <div><strong>Columns:</strong> ${data.columns.length}</div>
641
- <div><strong>Row Count:</strong> ${data.rowCount}</div>
642
- </div>
643
- </div>
644
-
645
- <div class="info-section">
646
- <h3>Column Schema</h3>
647
- <div class="schema-table">
648
- <table style="width: 100%; border-collapse: collapse;">
649
- <thead>
650
- <tr style="background: var(--secondary-color);">
651
- <th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Column</th>
652
- <th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Type</th>
653
- <th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Not Null</th>
654
- <th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Primary Key</th>
655
- </tr>
656
- </thead>
657
- <tbody>
658
- ${data.columns.map(column => `
659
- <tr>
660
- <td style="padding: 0.75rem; border: 1px solid var(--border-color); font-family: monospace;">${column.name}</td>
661
- <td style="padding: 0.75rem; border: 1px solid var(--border-color);">${column.type}</td>
662
- <td style="padding: 0.75rem; border: 1px solid var(--border-color);">${column.notnull ? '✅' : '❌'}</td>
663
- <td style="padding: 0.75rem; border: 1px solid var(--border-color);">${column.pk ? '🔑' : '❌'}</td>
664
- </tr>
665
- `).join('')}
666
- </tbody>
667
- </table>
668
- </div>
669
- </div>
670
- `;
433
+ const activeBtn = document.querySelector(`[data-table="${tableName}"]`);
434
+ activeBtn.classList.add('active', 'text-blue-600', 'border-b-2', 'border-blue-600', 'bg-blue-50/50');
435
+ activeBtn.classList.remove('text-slate-600', 'border-transparent');
671
436
 
672
- if (data.sampleData && data.sampleData.length > 0) {
673
- detailsHtml += `
674
- <div class="info-section">
675
- <h3>Sample Data (First 10 rows)</h3>
676
- <div style="overflow-x: auto;">
677
- <table style="width: 100%; border-collapse: collapse; min-width: 500px;">
678
- <thead>
679
- <tr style="background: var(--secondary-color);">
680
- ${data.columns.map(col => `<th style="padding: 0.5rem; border: 1px solid var(--border-color); text-align: left; font-size: 0.9rem;">${col.name}</th>`).join('')}
681
- </tr>
682
- </thead>
683
- <tbody>
684
- ${data.sampleData.map(row => `
685
- <tr>
686
- ${data.columns.map(col => `
687
- <td style="padding: 0.5rem; border: 1px solid var(--border-color); font-size: 0.85rem; max-width: 200px; word-wrap: break-word;">
688
- ${row[col.name] !== null && row[col.name] !== undefined ? row[col.name] : '<em>NULL</em>'}
689
- </td>
690
- `).join('')}
691
- </tr>
692
- `).join('')}
693
- </tbody>
694
- </table>
695
- </div>
696
- </div>
697
- `;
698
- }
699
-
700
- detailsHtml += '</div>';
701
- body.innerHTML = detailsHtml;
437
+ document.querySelectorAll('.tab-panel').forEach(panel => panel.classList.add('hidden'));
438
+ document.getElementById(`tab-${tableName}`).classList.remove('hidden');
702
439
  }
703
440
 
704
- // Close table details modal
705
441
  function closeTableDetailsModal() {
706
- document.getElementById('tableDetailsModal').style.display = 'none';
442
+ document.getElementById('tableDetailsModal').classList.add('hidden');
707
443
  }
708
-
709
444
  </script>
710
445
  </body>
711
- </html>
446
+
447
+ </html>