@softtechai/quickmcp 1.0.16 → 1.1.1

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 (418) hide show
  1. package/README.md +3 -3
  2. package/dist/auth/auth-utils.d.ts +130 -0
  3. package/dist/auth/auth-utils.d.ts.map +1 -0
  4. package/dist/auth/auth-utils.js +600 -0
  5. package/dist/auth/auth-utils.js.map +1 -0
  6. package/dist/auth/jwks-provider.d.ts +9 -0
  7. package/dist/auth/jwks-provider.d.ts.map +1 -0
  8. package/dist/auth/jwks-provider.js +56 -0
  9. package/dist/auth/jwks-provider.js.map +1 -0
  10. package/dist/auth/token-utils.d.ts +40 -0
  11. package/dist/auth/token-utils.d.ts.map +1 -0
  12. package/dist/auth/token-utils.js +162 -0
  13. package/dist/auth/token-utils.js.map +1 -0
  14. package/dist/client/MCPClient.js +5 -4
  15. package/dist/client/MCPClient.js.map +1 -1
  16. package/dist/config/auth-config.d.ts +16 -0
  17. package/dist/config/auth-config.d.ts.map +1 -0
  18. package/dist/config/auth-config.js +107 -0
  19. package/dist/config/auth-config.js.map +1 -0
  20. package/dist/constant/constant.d.ts +20 -0
  21. package/dist/constant/constant.d.ts.map +1 -0
  22. package/dist/constant/constant.js +24 -0
  23. package/dist/constant/constant.js.map +1 -0
  24. package/dist/database/async-datastore.d.ts +6 -0
  25. package/dist/database/async-datastore.d.ts.map +1 -0
  26. package/dist/database/async-datastore.js +15 -0
  27. package/dist/database/async-datastore.js.map +1 -0
  28. package/dist/database/database-utils.d.ts +6 -0
  29. package/dist/database/database-utils.d.ts.map +1 -0
  30. package/dist/database/database-utils.js +29 -0
  31. package/dist/database/database-utils.js.map +1 -0
  32. package/dist/database/datastore.d.ts +164 -0
  33. package/dist/database/datastore.d.ts.map +1 -0
  34. package/dist/{parsers/types/index.js → database/datastore.js} +1 -0
  35. package/dist/database/datastore.js.map +1 -0
  36. package/dist/database/factory.d.ts +4 -0
  37. package/dist/database/factory.d.ts.map +1 -0
  38. package/dist/database/factory.js +32 -0
  39. package/dist/database/factory.js.map +1 -0
  40. package/dist/database/jdbc-manager.d.ts +49 -0
  41. package/dist/database/jdbc-manager.d.ts.map +1 -0
  42. package/dist/database/jdbc-manager.js +50 -0
  43. package/dist/database/jdbc-manager.js.map +1 -0
  44. package/dist/database/sqlite-manager.d.ts +46 -44
  45. package/dist/database/sqlite-manager.d.ts.map +1 -1
  46. package/dist/database/sqlite-manager.js +492 -42
  47. package/dist/database/sqlite-manager.js.map +1 -1
  48. package/dist/database/supabase-manager.d.ts +58 -0
  49. package/dist/database/supabase-manager.d.ts.map +1 -0
  50. package/dist/database/supabase-manager.js +432 -0
  51. package/dist/database/supabase-manager.js.map +1 -0
  52. package/dist/generators/MCPServerGenerator.d.ts +103 -20
  53. package/dist/generators/MCPServerGenerator.d.ts.map +1 -1
  54. package/dist/generators/MCPServerGenerator.js +6930 -128
  55. package/dist/generators/MCPServerGenerator.js.map +1 -1
  56. package/dist/index.d.ts +0 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +8 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/integrated-mcp-server-new.d.ts +14 -2
  61. package/dist/integrated-mcp-server-new.d.ts.map +1 -1
  62. package/dist/integrated-mcp-server-new.js +270 -180
  63. package/dist/integrated-mcp-server-new.js.map +1 -1
  64. package/dist/mcp-core/McpCoreService.d.ts +63 -0
  65. package/dist/mcp-core/McpCoreService.d.ts.map +1 -0
  66. package/dist/mcp-core/McpCoreService.js +492 -0
  67. package/dist/mcp-core/McpCoreService.js.map +1 -0
  68. package/dist/parsers/CsvParser.d.ts +1 -1
  69. package/dist/parsers/CsvParser.d.ts.map +1 -1
  70. package/dist/parsers/CsvParser.js +3 -2
  71. package/dist/parsers/CsvParser.js.map +1 -1
  72. package/dist/parsers/DatabaseParser.d.ts.map +1 -1
  73. package/dist/parsers/DatabaseParser.js +9 -8
  74. package/dist/parsers/DatabaseParser.js.map +1 -1
  75. package/dist/parsers/ExcelParser.d.ts +15 -0
  76. package/dist/parsers/ExcelParser.d.ts.map +1 -1
  77. package/dist/parsers/ExcelParser.js +287 -21
  78. package/dist/parsers/ExcelParser.js.map +1 -1
  79. package/dist/parsers/WebPageParser.d.ts +5 -0
  80. package/dist/parsers/WebPageParser.d.ts.map +1 -0
  81. package/dist/parsers/WebPageParser.js +35 -0
  82. package/dist/parsers/WebPageParser.js.map +1 -0
  83. package/dist/parsers/index.d.ts +3 -2
  84. package/dist/parsers/index.d.ts.map +1 -1
  85. package/dist/parsers/index.js +19 -16
  86. package/dist/parsers/index.js.map +1 -1
  87. package/dist/server/api/askApi.d.ts +41 -0
  88. package/dist/server/api/askApi.d.ts.map +1 -0
  89. package/dist/server/api/askApi.js +479 -0
  90. package/dist/server/api/askApi.js.map +1 -0
  91. package/dist/server/api/authApi.d.ts +101 -0
  92. package/dist/server/api/authApi.d.ts.map +1 -0
  93. package/dist/server/api/authApi.js +1472 -0
  94. package/dist/server/api/authApi.js.map +1 -0
  95. package/dist/server/api/authProperty.d.ts +18 -0
  96. package/dist/server/api/authProperty.d.ts.map +1 -0
  97. package/dist/server/api/authProperty.js +41 -0
  98. package/dist/server/api/authProperty.js.map +1 -0
  99. package/dist/server/api/configApi.d.ts +15 -0
  100. package/dist/server/api/configApi.d.ts.map +1 -0
  101. package/dist/server/api/configApi.js +42 -0
  102. package/dist/server/api/configApi.js.map +1 -0
  103. package/dist/server/api/databaseApi.d.ts +14 -0
  104. package/dist/server/api/databaseApi.d.ts.map +1 -0
  105. package/dist/server/api/databaseApi.js +111 -0
  106. package/dist/server/api/databaseApi.js.map +1 -0
  107. package/dist/server/api/directoryApi.d.ts +9 -0
  108. package/dist/server/api/directoryApi.d.ts.map +1 -0
  109. package/dist/server/api/directoryApi.js +103 -0
  110. package/dist/server/api/directoryApi.js.map +1 -0
  111. package/dist/server/api/generateApi.d.ts +24 -0
  112. package/dist/server/api/generateApi.d.ts.map +1 -0
  113. package/dist/server/api/generateApi.js +457 -0
  114. package/dist/server/api/generateApi.js.map +1 -0
  115. package/dist/server/api/healthApi.d.ts +9 -0
  116. package/dist/server/api/healthApi.d.ts.map +1 -0
  117. package/dist/server/api/healthApi.js +15 -0
  118. package/dist/server/api/healthApi.js.map +1 -0
  119. package/dist/server/api/indexApi.d.ts +21 -0
  120. package/dist/server/api/indexApi.d.ts.map +1 -0
  121. package/dist/server/api/indexApi.js +61 -0
  122. package/dist/server/api/indexApi.js.map +1 -0
  123. package/dist/server/api/logsApi.d.ts +12 -0
  124. package/dist/server/api/logsApi.d.ts.map +1 -0
  125. package/dist/server/api/logsApi.js +37 -0
  126. package/dist/server/api/logsApi.js.map +1 -0
  127. package/dist/server/api/mcpApi.d.ts +20 -0
  128. package/dist/server/api/mcpApi.d.ts.map +1 -0
  129. package/dist/server/api/mcpApi.js +120 -0
  130. package/dist/server/api/mcpApi.js.map +1 -0
  131. package/dist/server/api/nameApi.d.ts +21 -0
  132. package/dist/server/api/nameApi.d.ts.map +1 -0
  133. package/dist/server/api/nameApi.js +42 -0
  134. package/dist/server/api/nameApi.js.map +1 -0
  135. package/dist/server/api/parseApi.d.ts +9 -0
  136. package/dist/server/api/parseApi.d.ts.map +1 -0
  137. package/dist/server/api/parseApi.js +3245 -0
  138. package/dist/server/api/parseApi.js.map +1 -0
  139. package/dist/server/api/serverApi.d.ts +44 -0
  140. package/dist/server/api/serverApi.d.ts.map +1 -0
  141. package/dist/server/api/serverApi.js +417 -0
  142. package/dist/server/api/serverApi.js.map +1 -0
  143. package/dist/{dynamic-mcp-executor.d.ts → server/dynamic-mcp-executor.d.ts} +4 -5
  144. package/dist/server/dynamic-mcp-executor.d.ts.map +1 -0
  145. package/dist/server/dynamic-mcp-executor.js +62 -0
  146. package/dist/server/dynamic-mcp-executor.js.map +1 -0
  147. package/dist/server/port-utils.d.ts +14 -0
  148. package/dist/server/port-utils.d.ts.map +1 -0
  149. package/dist/server/port-utils.js +31 -0
  150. package/dist/server/port-utils.js.map +1 -0
  151. package/dist/server/server-utils.d.ts +13 -0
  152. package/dist/server/server-utils.d.ts.map +1 -0
  153. package/dist/server/server-utils.js +72 -0
  154. package/dist/server/server-utils.js.map +1 -0
  155. package/dist/{web → server}/server.d.ts +1 -0
  156. package/dist/server/server.d.ts.map +1 -0
  157. package/dist/server/server.js +535 -0
  158. package/dist/server/server.js.map +1 -0
  159. package/dist/server/tool-executer.d.ts +101 -0
  160. package/dist/server/tool-executer.d.ts.map +1 -0
  161. package/dist/server/tool-executer.js +6198 -0
  162. package/dist/server/tool-executer.js.map +1 -0
  163. package/dist/types/index.d.ts +1197 -4
  164. package/dist/types/index.d.ts.map +1 -1
  165. package/dist/types/index.js +1028 -0
  166. package/dist/types/index.js.map +1 -1
  167. package/dist/upload/upload-utils.d.ts +4 -0
  168. package/dist/upload/upload-utils.d.ts.map +1 -0
  169. package/dist/upload/upload-utils.js +29 -0
  170. package/dist/upload/upload-utils.js.map +1 -0
  171. package/dist/utils/deployment-util.d.ts +14 -0
  172. package/dist/utils/deployment-util.d.ts.map +1 -0
  173. package/dist/utils/deployment-util.js +46 -0
  174. package/dist/utils/deployment-util.js.map +1 -0
  175. package/dist/utils/logger.d.ts +15 -0
  176. package/dist/utils/logger.d.ts.map +1 -0
  177. package/dist/utils/logger.js +56 -0
  178. package/dist/utils/logger.js.map +1 -0
  179. package/package.json +18 -6
  180. package/quickmcp-direct-stdio.js +183 -187
  181. package/src/web/public/app.js +15370 -1471
  182. package/src/web/public/authorization.html +868 -0
  183. package/src/web/public/database-tables.html +283 -547
  184. package/src/web/public/how-to-use.html +446 -462
  185. package/src/web/public/how-to-use.js +4 -4
  186. package/src/web/public/images/app/activepieces.png +0 -0
  187. package/src/web/public/images/app/airtable.png +0 -0
  188. package/src/web/public/images/app/androidstudio.png +0 -0
  189. package/src/web/public/images/app/antigravity.png +0 -0
  190. package/src/web/public/images/app/applenotes.png +0 -0
  191. package/src/web/public/images/app/applereminders.png +0 -0
  192. package/src/web/public/images/app/asana.png +0 -0
  193. package/src/web/public/images/app/azureai.png +0 -0
  194. package/src/web/public/images/app/bash.png +0 -0
  195. package/src/web/public/images/app/bearnotes.png +0 -0
  196. package/src/web/public/images/app/bitbucket.png +0 -0
  197. package/src/web/public/images/app/claude.png +0 -0
  198. package/src/web/public/images/app/cli.png +0 -0
  199. package/src/web/public/images/app/clickup.png +0 -0
  200. package/src/web/public/images/app/cohere.png +0 -0
  201. package/src/web/public/images/app/confluence.png +0 -0
  202. package/src/web/public/images/app/confluence2.png +0 -0
  203. package/src/web/public/images/app/curl.png +0 -0
  204. package/src/web/public/images/app/curl_mini.png +0 -0
  205. package/src/web/public/images/app/cursor.png +0 -0
  206. package/src/web/public/images/app/db2.png +0 -0
  207. package/src/web/public/images/app/deepseek.png +0 -0
  208. package/src/web/public/images/app/discord.png +0 -0
  209. package/src/web/public/images/app/docker.png +0 -0
  210. package/src/web/public/images/app/dockerhub.png +0 -0
  211. package/src/web/public/images/app/dropbox.png +0 -0
  212. package/src/web/public/images/app/elasticsearch.png +0 -0
  213. package/src/web/public/images/app/facebook.png +0 -0
  214. package/src/web/public/images/app/falai.png +0 -0
  215. package/src/web/public/images/app/fireworks.png +0 -0
  216. package/src/web/public/images/app/gdrive.png +0 -0
  217. package/src/web/public/images/app/gemini.png +0 -0
  218. package/src/web/public/images/app/github.png +0 -0
  219. package/src/web/public/images/app/githubcopilot.png +0 -0
  220. package/src/web/public/images/app/gitlab.png +0 -0
  221. package/src/web/public/images/app/gmail.png +0 -0
  222. package/src/web/public/images/app/googlecalender.png +0 -0
  223. package/src/web/public/images/app/googledocs.png +0 -0
  224. package/src/web/public/images/app/googlesheets.png +0 -0
  225. package/src/web/public/images/app/gradle.png +0 -0
  226. package/src/web/public/images/app/grafana.png +0 -0
  227. package/src/web/public/images/app/graphql.png +0 -0
  228. package/src/web/public/images/app/grok.png +0 -0
  229. package/src/web/public/images/app/groq.png +0 -0
  230. package/src/web/public/images/app/hazelcast.png +0 -0
  231. package/src/web/public/images/app/huggingface.png +0 -0
  232. package/src/web/public/images/app/imessage.png +0 -0
  233. package/src/web/public/images/app/instagram.png +0 -0
  234. package/src/web/public/images/app/intellij.png +0 -0
  235. package/src/web/public/images/app/jenkins.png +0 -0
  236. package/src/web/public/images/app/jira.png +0 -0
  237. package/src/web/public/images/app/kafka.png +0 -0
  238. package/src/web/public/images/app/kubernetes.png +0 -0
  239. package/src/web/public/images/app/linear.png +0 -0
  240. package/src/web/public/images/app/linkedin.png +0 -0
  241. package/src/web/public/images/app/llama.png +0 -0
  242. package/src/web/public/images/app/make.png +0 -0
  243. package/src/web/public/images/app/maven.png +0 -0
  244. package/src/web/public/images/app/mcp.png +0 -0
  245. package/src/web/public/images/app/microsoftteams.png +0 -0
  246. package/src/web/public/images/app/mistral.png +0 -0
  247. package/src/web/public/images/app/monday.png +0 -0
  248. package/src/web/public/images/app/mongodb.png +0 -0
  249. package/src/web/public/images/app/mssql.png +0 -0
  250. package/src/web/public/images/app/mysql.png +0 -0
  251. package/src/web/public/images/app/n8n.png +0 -0
  252. package/src/web/public/images/app/notion.png +0 -0
  253. package/src/web/public/images/app/npm.png +0 -0
  254. package/src/web/public/images/app/nuget.png +0 -0
  255. package/src/web/public/images/app/obsidian.png +0 -0
  256. package/src/web/public/images/app/openai.png +0 -0
  257. package/src/web/public/images/app/openrouter.png +0 -0
  258. package/src/web/public/images/app/opensearch.png +0 -0
  259. package/src/web/public/images/app/openshift.png +0 -0
  260. package/src/web/public/images/app/oracle.png +0 -0
  261. package/src/web/public/images/app/perplexity.png +0 -0
  262. package/src/web/public/images/app/pipedream.png +0 -0
  263. package/src/web/public/images/app/postgresql.png +0 -0
  264. package/src/web/public/images/app/powershell.png +0 -0
  265. package/src/web/public/images/app/prometheus.png +0 -0
  266. package/src/web/public/images/app/reddit.png +0 -0
  267. package/src/web/public/images/app/redis.png +0 -0
  268. package/src/web/public/images/app/rss.png +0 -0
  269. package/src/web/public/images/app/signal.png +0 -0
  270. package/src/web/public/images/app/slack.png +0 -0
  271. package/src/web/public/images/app/soap.png +0 -0
  272. package/src/web/public/images/app/sqlite.png +0 -0
  273. package/src/web/public/images/app/supabase.png +0 -0
  274. package/src/web/public/images/app/telegram.png +0 -0
  275. package/src/web/public/images/app/things3.png +0 -0
  276. package/src/web/public/images/app/threads.png +0 -0
  277. package/src/web/public/images/app/tiktok.png +0 -0
  278. package/src/web/public/images/app/together.png +0 -0
  279. package/src/web/public/images/app/trello.png +0 -0
  280. package/src/web/public/images/app/vscode.png +0 -0
  281. package/src/web/public/images/app/webhook.png +0 -0
  282. package/src/web/public/images/app/webpage.png +0 -0
  283. package/src/web/public/images/app/whatsappbusiness.png +0 -0
  284. package/src/web/public/images/app/windsorf.png +0 -0
  285. package/src/web/public/images/app/x.png +0 -0
  286. package/src/web/public/images/app/youtube.png +0 -0
  287. package/src/web/public/images/app/zapier.png +0 -0
  288. package/src/web/public/images/app/zededitor.png +0 -0
  289. package/src/web/public/images/app/zoom.png +0 -0
  290. package/src/web/public/images/avatar-anon.svg +4 -0
  291. package/src/web/public/images/favicon.png +0 -0
  292. package/src/web/public/images/install/chatgpt-web/step0.png +0 -0
  293. package/src/web/public/images/install/chatgpt-web/step1.png +0 -0
  294. package/src/web/public/images/install/chatgpt-web/step2.png +0 -0
  295. package/src/web/public/images/install/chatgpt-web/step3.png +0 -0
  296. package/src/web/public/images/install/chatgpt-web/step4.png +0 -0
  297. package/src/web/public/images/install/chatgpt-web/step5.png +0 -0
  298. package/src/web/public/images/readme/1-generate-servers.png +0 -0
  299. package/src/web/public/images/readme/2-database-connection.png +0 -0
  300. package/src/web/public/images/readme/2-file-upload.png +0 -0
  301. package/src/web/public/images/readme/3-data-preview.png +0 -0
  302. package/src/web/public/images/readme/4-data-preview2.png +0 -0
  303. package/src/web/public/images/readme/5-server-configuration.png +0 -0
  304. package/src/web/public/images/readme/6-server-generated-modal.png +0 -0
  305. package/src/web/public/images/readme/7-generated-servers.png +0 -0
  306. package/src/web/public/images/readme/8-generated-servers-view-details.png +0 -0
  307. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.23.51.png +0 -0
  308. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.24.59.png +0 -0
  309. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.05.png +0 -0
  310. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.14.png +0 -0
  311. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.21.png +0 -0
  312. package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.36.png +0 -0
  313. package/src/web/public/index.html +4685 -488
  314. package/src/web/public/landing.html +1638 -0
  315. package/src/web/public/logger.js +31 -0
  316. package/src/web/public/login.html +372 -0
  317. package/src/web/public/manage-servers.html +121 -188
  318. package/src/web/public/pricing.html +537 -0
  319. package/src/web/public/quick-ask.html +133 -0
  320. package/src/web/public/quickmcp-styles.css +708 -0
  321. package/src/web/public/roles.html +177 -0
  322. package/src/web/public/shared.js +736 -3
  323. package/src/web/public/sidebar.js +414 -0
  324. package/src/web/public/test-servers.html +605 -221
  325. package/src/web/public/users.html +191 -0
  326. package/dist/client/MCPClientUnified.d.ts +0 -31
  327. package/dist/client/MCPClientUnified.d.ts.map +0 -1
  328. package/dist/client/MCPClientUnified.js +0 -275
  329. package/dist/client/MCPClientUnified.js.map +0 -1
  330. package/dist/client/MCPTestRunnerUnified.d.ts +0 -48
  331. package/dist/client/MCPTestRunnerUnified.d.ts.map +0 -1
  332. package/dist/client/MCPTestRunnerUnified.js +0 -183
  333. package/dist/client/MCPTestRunnerUnified.js.map +0 -1
  334. package/dist/database/json-manager.d.ts +0 -55
  335. package/dist/database/json-manager.d.ts.map +0 -1
  336. package/dist/database/json-manager.js +0 -128
  337. package/dist/database/json-manager.js.map +0 -1
  338. package/dist/dynamic-mcp-executor.d.ts.map +0 -1
  339. package/dist/dynamic-mcp-executor.js +0 -274
  340. package/dist/dynamic-mcp-executor.js.map +0 -1
  341. package/dist/generators/MCPServerGenerator-new.d.ts +0 -37
  342. package/dist/generators/MCPServerGenerator-new.d.ts.map +0 -1
  343. package/dist/generators/MCPServerGenerator-new.js +0 -287
  344. package/dist/generators/MCPServerGenerator-new.js.map +0 -1
  345. package/dist/generators/database/sqlite-manager.d.ts +0 -52
  346. package/dist/generators/database/sqlite-manager.js +0 -143
  347. package/dist/generators/generators/MCPServerGenerator.d.ts +0 -37
  348. package/dist/generators/generators/MCPServerGenerator.js +0 -396
  349. package/dist/integrated-mcp-server.d.ts +0 -25
  350. package/dist/integrated-mcp-server.d.ts.map +0 -1
  351. package/dist/integrated-mcp-server.js +0 -541
  352. package/dist/integrated-mcp-server.js.map +0 -1
  353. package/dist/mcp-inspector-server.d.ts +0 -3
  354. package/dist/mcp-inspector-server.d.ts.map +0 -1
  355. package/dist/mcp-inspector-server.js +0 -119
  356. package/dist/mcp-inspector-server.js.map +0 -1
  357. package/dist/mcp-sdk-server.d.ts +0 -3
  358. package/dist/mcp-sdk-server.d.ts.map +0 -1
  359. package/dist/mcp-sdk-server.js +0 -90
  360. package/dist/mcp-sdk-server.js.map +0 -1
  361. package/dist/mcp-server.d.ts +0 -3
  362. package/dist/mcp-server.d.ts.map +0 -1
  363. package/dist/mcp-server.js +0 -300
  364. package/dist/mcp-server.js.map +0 -1
  365. package/dist/parsers/parsers/ExcelParser.js +0 -118
  366. package/dist/quickmcp-unified-bridge.d.ts +0 -13
  367. package/dist/quickmcp-unified-bridge.d.ts.map +0 -1
  368. package/dist/quickmcp-unified-bridge.js +0 -176
  369. package/dist/quickmcp-unified-bridge.js.map +0 -1
  370. package/dist/sqlite-manager.js +0 -145
  371. package/dist/test-app.d.ts +0 -2
  372. package/dist/test-app.d.ts.map +0 -1
  373. package/dist/test-app.js +0 -119
  374. package/dist/test-app.js.map +0 -1
  375. package/dist/transport/base-transport.d.ts +0 -21
  376. package/dist/transport/base-transport.d.ts.map +0 -1
  377. package/dist/transport/base-transport.js +0 -16
  378. package/dist/transport/base-transport.js.map +0 -1
  379. package/dist/transport/index.d.ts +0 -10
  380. package/dist/transport/index.d.ts.map +0 -1
  381. package/dist/transport/index.js +0 -12
  382. package/dist/transport/index.js.map +0 -1
  383. package/dist/transport/sse-transport.d.ts +0 -13
  384. package/dist/transport/sse-transport.d.ts.map +0 -1
  385. package/dist/transport/sse-transport.js +0 -106
  386. package/dist/transport/sse-transport.js.map +0 -1
  387. package/dist/transport/stdio-transport.d.ts +0 -8
  388. package/dist/transport/stdio-transport.d.ts.map +0 -1
  389. package/dist/transport/stdio-transport.js +0 -53
  390. package/dist/transport/stdio-transport.js.map +0 -1
  391. package/dist/transport/streamable-http-transport.d.ts +0 -15
  392. package/dist/transport/streamable-http-transport.d.ts.map +0 -1
  393. package/dist/transport/streamable-http-transport.js +0 -151
  394. package/dist/transport/streamable-http-transport.js.map +0 -1
  395. package/dist/web/client/MCPClient.js +0 -348
  396. package/dist/web/client/MCPTestRunner.js +0 -317
  397. package/dist/web/database/json-manager.js +0 -124
  398. package/dist/web/database/sqlite-manager.js +0 -146
  399. package/dist/web/dynamic-mcp-executor.js +0 -443
  400. package/dist/web/generators/MCPServerGenerator-new.js +0 -284
  401. package/dist/web/generators/MCPServerGenerator.js +0 -566
  402. package/dist/web/integrated-mcp-server-new.js +0 -394
  403. package/dist/web/parsers/CsvParser.js +0 -144
  404. package/dist/web/parsers/DatabaseParser.js +0 -637
  405. package/dist/web/parsers/ExcelParser.js +0 -180
  406. package/dist/web/parsers/index.js +0 -152
  407. package/dist/web/server.d.ts.map +0 -1
  408. package/dist/web/server.js +0 -790
  409. package/dist/web/server.js.map +0 -1
  410. package/dist/web/types/index.js +0 -2
  411. package/dist/web/web/server.js +0 -860
  412. package/src/web/public/modern-styles.css +0 -946
  413. package/src/web/public/shared-styles.css +0 -2091
  414. /package/src/web/public/images/{1-claude-quickmcp-stdio.png → readme/1-claude-quickmcp-stdio.png} +0 -0
  415. /package/src/web/public/images/{2-claude-tools.png → readme/2-claude-tools.png} +0 -0
  416. /package/src/web/public/images/{3-claude-developer-settings.png → readme/3-claude-developer-settings.png} +0 -0
  417. /package/src/web/public/images/{4-claude-config.png → readme/4-claude-config.png} +0 -0
  418. /package/src/web/public/images/{5-claude-config-edit.png → readme/5-claude-config-edit.png} +0 -0
@@ -0,0 +1,1638 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>QuickMCP - AI-Powered MCP Server Generator</title>
7
+ <link rel="icon" type="image/png" href="/images/favicon.png">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Newsreader:ital,wght@0,400;1,400&display=swap" rel="stylesheet">
11
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
12
+ <style>
13
+ :root {
14
+ --bg: #f3f7ff;
15
+ --bg-soft: #ffffff;
16
+ --card: #ffffff;
17
+ --line: #dbe6f7;
18
+ --text: #1f2937;
19
+ --text-secondary: #475569;
20
+ --muted: #64748b;
21
+ --accent: #2563eb;
22
+ --accent-soft: #60a5fa;
23
+ --accent-bg: rgba(37, 99, 235, 0.08);
24
+ --shadow-sm: 0 2px 8px rgba(15, 23, 42, 0.04);
25
+ --shadow: 0 8px 32px rgba(15, 23, 42, 0.08);
26
+ --shadow-lg: 0 24px 64px rgba(15, 23, 42, 0.12);
27
+ }
28
+
29
+ * {
30
+ box-sizing: border-box;
31
+ margin: 0;
32
+ padding: 0;
33
+ }
34
+
35
+ body {
36
+ background: var(--bg);
37
+ color: var(--text);
38
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
39
+ overflow-x: hidden;
40
+ line-height: 1.5;
41
+ }
42
+
43
+ /* Background Effects */
44
+ .bg-effects {
45
+ position: fixed;
46
+ inset: 0;
47
+ z-index: 0;
48
+ pointer-events: none;
49
+ overflow: hidden;
50
+ background: radial-gradient(circle at 50% 50%, rgba(37, 99, 235, 0.12), transparent 62%);
51
+ filter: saturate(118%) contrast(106%);
52
+ }
53
+
54
+ .gradient-orb {
55
+ position: absolute;
56
+ border-radius: 50%;
57
+ filter: blur(46px);
58
+ opacity: 0;
59
+ will-change: transform;
60
+ }
61
+
62
+ .gradient-orb.one {
63
+ width: 44vmax;
64
+ height: 44vmax;
65
+ top: -10vmax;
66
+ left: -8vmax;
67
+ background: radial-gradient(circle at 35% 35%, rgba(245, 217, 122, 0.68), rgba(245, 217, 122, 0.32) 46%, transparent 74%);
68
+ animation: blobDropOne 18s cubic-bezier(0.22, 0.61, 0.36, 1) infinite;
69
+ }
70
+
71
+ .gradient-orb.two {
72
+ width: 42vmax;
73
+ height: 42vmax;
74
+ top: 8vmax;
75
+ left: 22vmax;
76
+ background: radial-gradient(circle at 40% 30%, rgba(240, 160, 192, 0.64), rgba(240, 160, 192, 0.3) 46%, transparent 74%);
77
+ animation: blobDropTwo 20s cubic-bezier(0.22, 0.61, 0.36, 1) 3s infinite;
78
+ }
79
+
80
+ .gradient-orb.three {
81
+ width: 46vmax;
82
+ height: 46vmax;
83
+ bottom: -12vmax;
84
+ right: -10vmax;
85
+ background: radial-gradient(circle at 50% 45%, rgba(212, 160, 240, 0.64), rgba(212, 160, 240, 0.3) 46%, transparent 74%);
86
+ animation: blobDropThree 22s cubic-bezier(0.22, 0.61, 0.36, 1) 6s infinite;
87
+ }
88
+
89
+ @keyframes blobDropOne {
90
+ 0% {
91
+ transform: translate3d(0, 0, 0) scale(0.2);
92
+ opacity: 0;
93
+ }
94
+ 18% {
95
+ opacity: 0.62;
96
+ }
97
+ 55% {
98
+ transform: translate3d(14vw, 12vh, 0) scale(1.25);
99
+ opacity: 0.5;
100
+ }
101
+ 100% {
102
+ transform: translate3d(28vw, 24vh, 0) scale(2.3);
103
+ opacity: 0;
104
+ }
105
+ }
106
+
107
+ @keyframes blobDropTwo {
108
+ 0% {
109
+ transform: translate3d(0, 0, 0) scale(0.22);
110
+ opacity: 0;
111
+ }
112
+ 20% {
113
+ opacity: 0.58;
114
+ }
115
+ 58% {
116
+ transform: translate3d(-16vw, 14vh, 0) scale(1.3);
117
+ opacity: 0.46;
118
+ }
119
+ 100% {
120
+ transform: translate3d(-32vw, 24vh, 0) scale(2.4);
121
+ opacity: 0;
122
+ }
123
+ }
124
+
125
+ @keyframes blobDropThree {
126
+ 0% {
127
+ transform: translate3d(0, 0, 0) scale(0.2);
128
+ opacity: 0;
129
+ }
130
+ 16% {
131
+ opacity: 0.56;
132
+ }
133
+ 60% {
134
+ transform: translate3d(-20vw, -16vh, 0) scale(1.35);
135
+ opacity: 0.44;
136
+ }
137
+ 100% {
138
+ transform: translate3d(-34vw, -28vh, 0) scale(2.5);
139
+ opacity: 0;
140
+ }
141
+ }
142
+
143
+ /* Layout */
144
+ .container {
145
+ position: relative;
146
+ z-index: 1;
147
+ max-width: 1200px;
148
+ margin: 0 auto;
149
+ padding: 0 24px;
150
+ }
151
+
152
+ /* Navigation */
153
+ .nav {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ padding: 20px 0;
158
+ border-bottom: 1px solid var(--line);
159
+ }
160
+
161
+ .logo {
162
+ display: flex;
163
+ align-items: center;
164
+ gap: 12px;
165
+ text-decoration: none;
166
+ color: var(--text);
167
+ }
168
+
169
+ .logo-icon {
170
+ width: 40px;
171
+ height: 40px;
172
+ background: var(--accent);
173
+ border-radius: 10px;
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ color: white;
178
+ font-size: 18px;
179
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
180
+ }
181
+
182
+ .logo-text {
183
+ font-weight: 800;
184
+ font-size: 22px;
185
+ letter-spacing: -0.02em;
186
+ }
187
+
188
+ .nav-links {
189
+ display: flex;
190
+ align-items: center;
191
+ gap: 32px;
192
+ }
193
+
194
+ .nav-link {
195
+ text-decoration: none;
196
+ color: var(--text-secondary);
197
+ font-weight: 500;
198
+ font-size: 15px;
199
+ transition: color 0.2s;
200
+ }
201
+
202
+ .nav-link:hover {
203
+ color: var(--text);
204
+ }
205
+
206
+ .nav-actions {
207
+ display: flex;
208
+ align-items: center;
209
+ gap: 16px;
210
+ }
211
+
212
+ .nav-menu-toggle,
213
+ .nav-mobile-menu {
214
+ display: none;
215
+ }
216
+
217
+ @media (min-width: 901px) {
218
+ .nav-menu-toggle,
219
+ .nav-mobile-menu {
220
+ display: none !important;
221
+ }
222
+
223
+ .nav-get-started-desktop {
224
+ display: inline-flex !important;
225
+ }
226
+ }
227
+
228
+ .btn {
229
+ display: inline-flex;
230
+ align-items: center;
231
+ justify-content: center;
232
+ gap: 8px;
233
+ padding: 12px 20px;
234
+ border-radius: 10px;
235
+ font-weight: 600;
236
+ font-size: 14px;
237
+ text-decoration: none;
238
+ transition: all 0.2s;
239
+ cursor: pointer;
240
+ border: none;
241
+ }
242
+
243
+ .btn-ghost {
244
+ color: var(--text);
245
+ background: transparent;
246
+ }
247
+
248
+ .btn-ghost:hover {
249
+ background: var(--accent-bg);
250
+ color: var(--accent);
251
+ }
252
+
253
+ .btn-primary {
254
+ background: var(--text);
255
+ color: white;
256
+ }
257
+
258
+ .btn-primary:hover {
259
+ background: #1a1918;
260
+ transform: translateY(-1px);
261
+ }
262
+
263
+ .btn-accent {
264
+ background: var(--accent);
265
+ color: white;
266
+ box-shadow: 0 4px 16px rgba(37, 99, 235, 0.3);
267
+ }
268
+
269
+ .btn-accent:hover {
270
+ background: #1d4ed8;
271
+ transform: translateY(-1px);
272
+ box-shadow: 0 6px 20px rgba(37, 99, 235, 0.4);
273
+ }
274
+
275
+ /* Hero Section */
276
+ .hero {
277
+ padding: 80px 0 60px;
278
+ text-align: center;
279
+ }
280
+
281
+ .hero-badge {
282
+ display: inline-flex;
283
+ align-items: center;
284
+ gap: 8px;
285
+ padding: 8px 16px;
286
+ background: var(--accent-bg);
287
+ border: 1px solid rgba(37, 99, 235, 0.2);
288
+ border-radius: 100px;
289
+ font-size: 13px;
290
+ font-weight: 600;
291
+ color: var(--accent);
292
+ margin-bottom: 24px;
293
+ }
294
+
295
+ .hero-badge i {
296
+ font-size: 12px;
297
+ }
298
+
299
+ .hero-title {
300
+ font-size: clamp(42px, 8vw, 72px);
301
+ font-weight: 800;
302
+ line-height: 1.05;
303
+ letter-spacing: -0.03em;
304
+ margin-bottom: 24px;
305
+ max-width: 900px;
306
+ margin-left: auto;
307
+ margin-right: auto;
308
+ }
309
+
310
+ .hero-title .highlight {
311
+ color: var(--accent);
312
+ }
313
+
314
+ .hero-title .serif {
315
+ font-family: "Newsreader", Georgia, serif;
316
+ font-style: italic;
317
+ font-weight: 400;
318
+ }
319
+
320
+ .type-cursor {
321
+ display: inline-block;
322
+ margin-left: 2px;
323
+ color: var(--accent);
324
+ animation: blink 1s steps(1, end) infinite;
325
+ }
326
+
327
+ @keyframes blink {
328
+ 50% { opacity: 0; }
329
+ }
330
+
331
+ .hero-subtitle {
332
+ font-size: 18px;
333
+ color: var(--text-secondary);
334
+ max-width: 600px;
335
+ margin: 0 auto 40px;
336
+ line-height: 1.6;
337
+ }
338
+
339
+ .hero-actions {
340
+ display: flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ gap: 16px;
344
+ flex-wrap: wrap;
345
+ }
346
+
347
+ .hero-actions .btn {
348
+ padding: 14px 28px;
349
+ font-size: 15px;
350
+ }
351
+
352
+ /* Prompt Cards Section */
353
+ .prompts-section {
354
+ padding: 40px 0 80px;
355
+ }
356
+
357
+ .section-header {
358
+ text-align: center;
359
+ margin-bottom: 48px;
360
+ }
361
+
362
+ .section-label {
363
+ display: inline-block;
364
+ font-size: 12px;
365
+ font-weight: 700;
366
+ text-transform: uppercase;
367
+ letter-spacing: 0.1em;
368
+ color: var(--muted);
369
+ margin-bottom: 12px;
370
+ }
371
+
372
+ .section-title {
373
+ font-size: clamp(28px, 5vw, 42px);
374
+ font-weight: 800;
375
+ letter-spacing: -0.02em;
376
+ margin-bottom: 16px;
377
+ }
378
+
379
+ .section-subtitle {
380
+ font-size: 16px;
381
+ color: var(--text-secondary);
382
+ max-width: 500px;
383
+ margin: 0 auto;
384
+ }
385
+
386
+ .prompt-grid {
387
+ display: grid;
388
+ grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
389
+ gap: 20px;
390
+ }
391
+
392
+ .prompt-card {
393
+ background: var(--card);
394
+ border: 1px solid var(--line);
395
+ border-radius: 16px;
396
+ padding: 24px;
397
+ display: flex;
398
+ flex-direction: column;
399
+ height: 100%;
400
+ transition: all 0.3s;
401
+ position: relative;
402
+ overflow: hidden;
403
+ }
404
+
405
+ .prompt-card:hover {
406
+ border-color: rgba(37, 99, 235, 0.3);
407
+ box-shadow: var(--shadow);
408
+ transform: translateY(-2px);
409
+ }
410
+
411
+ .prompt-card-header {
412
+ display: flex;
413
+ align-items: flex-start;
414
+ gap: 16px;
415
+ margin-bottom: 16px;
416
+ }
417
+
418
+ .prompt-icon {
419
+ width: 48px;
420
+ height: 48px;
421
+ border-radius: 12px;
422
+ display: flex;
423
+ align-items: center;
424
+ justify-content: center;
425
+ background: #ffffff;
426
+ border: 1px solid var(--line);
427
+ flex-shrink: 0;
428
+ overflow: hidden;
429
+ }
430
+
431
+ .prompt-icon img {
432
+ width: 42px;
433
+ height: 42px;
434
+ object-fit: contain;
435
+ border-radius: 4px;
436
+ }
437
+
438
+ .prompt-meta {
439
+ flex: 1;
440
+ }
441
+
442
+ .prompt-app {
443
+ font-size: 13px;
444
+ font-weight: 600;
445
+ color: var(--muted);
446
+ margin-bottom: 4px;
447
+ }
448
+
449
+ .prompt-title {
450
+ font-size: 18px;
451
+ font-weight: 700;
452
+ color: var(--text);
453
+ line-height: 1.3;
454
+ }
455
+
456
+ .prompt-description {
457
+ font-size: 14px;
458
+ color: var(--text-secondary);
459
+ line-height: 1.6;
460
+ margin-bottom: 20px;
461
+ }
462
+
463
+ .prompt-footer {
464
+ display: flex;
465
+ align-items: center;
466
+ justify-content: space-between;
467
+ margin-top: auto;
468
+ }
469
+
470
+ .prompt-users {
471
+ display: flex;
472
+ align-items: center;
473
+ gap: 8px;
474
+ font-size: 13px;
475
+ color: var(--muted);
476
+ }
477
+
478
+ .prompt-users i {
479
+ color: var(--accent);
480
+ }
481
+
482
+ .prompt-cta {
483
+ display: inline-flex;
484
+ align-items: center;
485
+ gap: 6px;
486
+ padding: 10px 16px;
487
+ background: var(--text);
488
+ color: white;
489
+ border-radius: 8px;
490
+ font-size: 13px;
491
+ font-weight: 600;
492
+ text-decoration: none;
493
+ transition: all 0.2s;
494
+ }
495
+
496
+ .prompt-cta:hover {
497
+ background: var(--accent);
498
+ transform: translateX(2px);
499
+ }
500
+
501
+ .prompt-cta i {
502
+ font-size: 11px;
503
+ transition: transform 0.2s;
504
+ }
505
+
506
+ .prompt-cta:hover i {
507
+ transform: translateX(3px);
508
+ }
509
+
510
+ /* How It Works Section */
511
+ .how-section {
512
+ padding: 80px 0;
513
+ background: var(--bg-soft);
514
+ border-top: 1px solid var(--line);
515
+ border-bottom: 1px solid var(--line);
516
+ }
517
+
518
+ .steps-grid {
519
+ display: grid;
520
+ grid-template-columns: repeat(3, 1fr);
521
+ gap: 40px;
522
+ margin-top: 48px;
523
+ }
524
+
525
+ .step {
526
+ text-align: center;
527
+ position: relative;
528
+ }
529
+
530
+ .step-number {
531
+ width: 56px;
532
+ height: 56px;
533
+ background: var(--accent);
534
+ color: white;
535
+ border-radius: 16px;
536
+ display: flex;
537
+ align-items: center;
538
+ justify-content: center;
539
+ font-size: 24px;
540
+ font-weight: 800;
541
+ margin: 0 auto 20px;
542
+ box-shadow: 0 8px 24px rgba(37, 99, 235, 0.25);
543
+ }
544
+
545
+ .step-title {
546
+ font-size: 20px;
547
+ font-weight: 700;
548
+ margin-bottom: 12px;
549
+ }
550
+
551
+ .step-desc {
552
+ font-size: 15px;
553
+ color: var(--text-secondary);
554
+ line-height: 1.6;
555
+ }
556
+
557
+ /* Integrations Section */
558
+ .integrations-section {
559
+ padding: 80px 0;
560
+ }
561
+
562
+ .integrations-wrap {
563
+ background: var(--card);
564
+ border: 1px solid var(--line);
565
+ border-radius: 20px;
566
+ padding: 32px;
567
+ overflow: hidden;
568
+ }
569
+
570
+ .integrations-header {
571
+ text-align: center;
572
+ margin-bottom: 32px;
573
+ }
574
+
575
+ .integrations-title {
576
+ font-size: clamp(28px, 5vw, 42px);
577
+ font-weight: 800;
578
+ letter-spacing: -0.02em;
579
+ margin-bottom: 16px;
580
+ }
581
+
582
+ .integrations-subtitle {
583
+ font-size: 15px;
584
+ color: var(--text-secondary);
585
+ }
586
+
587
+ .marquee-container {
588
+ overflow: hidden;
589
+ mask-image: linear-gradient(90deg, transparent, black 10%, black 90%, transparent);
590
+ }
591
+
592
+ .marquee-row {
593
+ padding: 8px 0;
594
+ }
595
+
596
+ .marquee {
597
+ display: flex;
598
+ width: max-content;
599
+ gap: 12px;
600
+ }
601
+
602
+ .marquee.left {
603
+ animation: marquee-left 50s linear infinite;
604
+ }
605
+
606
+ .marquee.right {
607
+ animation: marquee-right 45s linear infinite;
608
+ }
609
+
610
+ @keyframes marquee-left {
611
+ from { transform: translateX(0); }
612
+ to { transform: translateX(-50%); }
613
+ }
614
+
615
+ @keyframes marquee-right {
616
+ from { transform: translateX(-50%); }
617
+ to { transform: translateX(0); }
618
+ }
619
+
620
+ .integration-chip {
621
+ display: inline-flex;
622
+ align-items: center;
623
+ gap: 10px;
624
+ padding: 10px 18px;
625
+ background: var(--bg);
626
+ border: 1px solid var(--line);
627
+ border-radius: 100px;
628
+ font-size: 14px;
629
+ font-weight: 600;
630
+ color: var(--text);
631
+ white-space: nowrap;
632
+ transition: all 0.2s;
633
+ }
634
+
635
+ .integration-chip:hover {
636
+ border-color: var(--accent);
637
+ background: var(--accent-bg);
638
+ }
639
+
640
+ .integration-chip img {
641
+ width: 22px;
642
+ height: 22px;
643
+ border-radius: 6px;
644
+ object-fit: contain;
645
+ }
646
+
647
+ .server-tech {
648
+ margin-top: 36px;
649
+ text-align: center;
650
+ }
651
+
652
+ .server-tech-title {
653
+ font-size: clamp(28px, 5vw, 42px);
654
+ font-weight: 800;
655
+ letter-spacing: -0.02em;
656
+ margin-bottom: 12px;
657
+ }
658
+
659
+ .server-tech-subtitle {
660
+ font-size: 15px;
661
+ color: var(--text-secondary);
662
+ margin-bottom: 16px;
663
+ }
664
+
665
+ .server-tech-chip {
666
+ display: inline-flex;
667
+ align-items: center;
668
+ gap: 8px;
669
+ padding: 12px 18px;
670
+ border-radius: 999px;
671
+ border: 1px solid var(--line);
672
+ background: #fff;
673
+ color: var(--text);
674
+ font-size: 14px;
675
+ font-weight: 600;
676
+ white-space: nowrap;
677
+ }
678
+
679
+ .server-tech-chip img {
680
+ width: 20px;
681
+ height: 20px;
682
+ object-fit: contain;
683
+ border-radius: 4px;
684
+ }
685
+
686
+ .marquee.tech-left {
687
+ animation: marquee-left 150s linear infinite;
688
+ }
689
+
690
+ .marquee.tech-right {
691
+ animation: marquee-right 150s linear infinite;
692
+ }
693
+
694
+ .server-tech .marquee-row {
695
+ padding: 14px 0;
696
+ }
697
+
698
+ /* FAQ Section */
699
+ .faq-section {
700
+ padding: 80px 0;
701
+ background: var(--bg-soft);
702
+ border-top: 1px solid var(--line);
703
+ }
704
+
705
+ .faq-grid {
706
+ display: grid;
707
+ grid-template-columns: repeat(2, 1fr);
708
+ gap: 16px;
709
+ margin-top: 48px;
710
+ align-items: start;
711
+ }
712
+
713
+ .faq-item {
714
+ background: var(--card);
715
+ border: 1px solid var(--line);
716
+ border-radius: 14px;
717
+ overflow: hidden;
718
+ transition: all 0.2s;
719
+ }
720
+
721
+ .faq-item:hover {
722
+ border-color: rgba(37, 99, 235, 0.2);
723
+ }
724
+
725
+ .faq-item[open] {
726
+ border-color: var(--accent);
727
+ box-shadow: var(--shadow-sm);
728
+ }
729
+
730
+ .faq-item summary {
731
+ list-style: none;
732
+ padding: 20px 24px;
733
+ font-weight: 600;
734
+ font-size: 15px;
735
+ cursor: pointer;
736
+ display: flex;
737
+ align-items: center;
738
+ justify-content: space-between;
739
+ gap: 16px;
740
+ }
741
+
742
+ .faq-item summary::-webkit-details-marker {
743
+ display: none;
744
+ }
745
+
746
+ .faq-item summary::after {
747
+ content: '+';
748
+ font-size: 20px;
749
+ color: var(--muted);
750
+ font-weight: 500;
751
+ transition: transform 0.2s;
752
+ }
753
+
754
+ .faq-item[open] summary::after {
755
+ content: '-';
756
+ color: var(--accent);
757
+ }
758
+
759
+ .faq-answer {
760
+ padding: 0 24px 20px;
761
+ font-size: 14px;
762
+ color: var(--text-secondary);
763
+ line-height: 1.7;
764
+ }
765
+
766
+ /* CTA Section */
767
+ .cta-section {
768
+ padding: 80px 0;
769
+ }
770
+
771
+ .cta-card {
772
+ background: var(--text);
773
+ border-radius: 24px;
774
+ padding: 64px;
775
+ text-align: center;
776
+ position: relative;
777
+ overflow: hidden;
778
+ }
779
+
780
+ .cta-card::before {
781
+ content: '';
782
+ position: absolute;
783
+ top: -50%;
784
+ right: -30%;
785
+ width: 400px;
786
+ height: 400px;
787
+ background: var(--accent);
788
+ border-radius: 50%;
789
+ filter: blur(100px);
790
+ opacity: 0.3;
791
+ }
792
+
793
+ .cta-content {
794
+ position: relative;
795
+ z-index: 1;
796
+ }
797
+
798
+ .cta-title {
799
+ font-size: clamp(28px, 5vw, 40px);
800
+ font-weight: 800;
801
+ color: white;
802
+ margin-bottom: 16px;
803
+ letter-spacing: -0.02em;
804
+ }
805
+
806
+ .cta-subtitle {
807
+ font-size: 16px;
808
+ color: rgba(255, 255, 255, 0.7);
809
+ margin-bottom: 32px;
810
+ max-width: 500px;
811
+ margin-left: auto;
812
+ margin-right: auto;
813
+ }
814
+
815
+ .cta-actions {
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ gap: 16px;
820
+ flex-wrap: wrap;
821
+ }
822
+
823
+ .cta-actions .btn-accent {
824
+ background: var(--accent);
825
+ padding: 16px 32px;
826
+ font-size: 16px;
827
+ }
828
+
829
+ .cta-actions .btn-ghost {
830
+ color: white;
831
+ border: 1px solid rgba(255, 255, 255, 0.2);
832
+ padding: 16px 32px;
833
+ font-size: 16px;
834
+ }
835
+
836
+ .cta-actions .btn-ghost:hover {
837
+ background: rgba(255, 255, 255, 0.1);
838
+ border-color: rgba(255, 255, 255, 0.3);
839
+ color: white;
840
+ }
841
+
842
+ /* Footer */
843
+ .footer {
844
+ padding: 40px 0;
845
+ border-top: 1px solid var(--line);
846
+ text-align: center;
847
+ }
848
+
849
+ .footer-text {
850
+ font-size: 14px;
851
+ color: var(--muted);
852
+ }
853
+
854
+ .footer-text a {
855
+ color: var(--accent);
856
+ text-decoration: none;
857
+ }
858
+
859
+ /* Responsive */
860
+ @media (max-width: 900px) {
861
+ .nav-links {
862
+ display: none;
863
+ }
864
+
865
+ .nav {
866
+ flex-wrap: wrap;
867
+ gap: 12px;
868
+ }
869
+
870
+ .nav-actions {
871
+ margin-left: auto;
872
+ }
873
+
874
+ .nav-actions .btn-ghost,
875
+ .nav-get-started-desktop {
876
+ display: none;
877
+ }
878
+
879
+ .nav-menu-toggle {
880
+ display: inline-flex;
881
+ padding: 10px 12px;
882
+ font-size: 13px;
883
+ }
884
+
885
+ .nav-menu-toggle .label {
886
+ display: none;
887
+ }
888
+
889
+ .nav-mobile-menu {
890
+ width: 100%;
891
+ border: 1px solid var(--line);
892
+ border-radius: 12px;
893
+ background: #ffffff;
894
+ padding: 10px 12px;
895
+ gap: 10px;
896
+ }
897
+
898
+ .nav-mobile-menu.open {
899
+ display: grid;
900
+ }
901
+
902
+ .nav-mobile-link {
903
+ text-decoration: none;
904
+ color: var(--text-secondary);
905
+ font-size: 14px;
906
+ font-weight: 500;
907
+ padding: 6px 2px;
908
+ }
909
+
910
+ .nav-mobile-link:hover {
911
+ color: var(--text);
912
+ }
913
+
914
+ .steps-grid {
915
+ grid-template-columns: 1fr;
916
+ gap: 32px;
917
+ }
918
+
919
+ .faq-grid {
920
+ grid-template-columns: 1fr;
921
+ }
922
+
923
+ .prompt-grid {
924
+ grid-template-columns: 1fr;
925
+ }
926
+
927
+ .cta-card {
928
+ padding: 40px 24px;
929
+ }
930
+ }
931
+
932
+ @media (max-width: 600px) {
933
+ .hero {
934
+ padding: 48px 0 40px;
935
+ }
936
+
937
+ .hero-actions {
938
+ flex-direction: column;
939
+ width: 100%;
940
+ }
941
+
942
+ .hero-actions .btn {
943
+ width: 100%;
944
+ }
945
+
946
+ .cta-actions {
947
+ flex-direction: column;
948
+ }
949
+
950
+ .cta-actions .btn {
951
+ width: 100%;
952
+ }
953
+ }
954
+ </style>
955
+ </head>
956
+ <body>
957
+ <!-- Background Effects -->
958
+ <div class="bg-effects" aria-hidden="true">
959
+ <div class="gradient-orb one"></div>
960
+ <div class="gradient-orb two"></div>
961
+ <div class="gradient-orb three"></div>
962
+ </div>
963
+
964
+ <!-- Navigation -->
965
+ <div class="container">
966
+ <nav class="nav">
967
+ <a href="/landing" class="logo">
968
+ <span class="logo-icon">
969
+ <i class="fas fa-rocket"></i>
970
+ </span>
971
+ <span class="logo-text">QuickMCP</span>
972
+ </a>
973
+
974
+ <div class="nav-links">
975
+ <a href="#prompts" class="nav-link">Use Cases</a>
976
+ <a href="#how" class="nav-link">How It Works</a>
977
+ <a href="#integrations" class="nav-link">Integrations</a>
978
+ <a href="/pricing" class="nav-link">Pricing</a>
979
+ <a href="#faq" class="nav-link">FAQ</a>
980
+ </div>
981
+
982
+ <div class="nav-actions">
983
+ <a href="/login" class="btn btn-ghost">Sign In</a>
984
+ <a href="/login" class="btn btn-primary nav-get-started-desktop">Get Started</a>
985
+ <button type="button" id="navMenuToggle" class="btn btn-primary nav-menu-toggle" aria-expanded="false" aria-controls="navMobileMenu">
986
+ <span class="label">Menu</span>
987
+ <i class="fas fa-bars"></i>
988
+ </button>
989
+ </div>
990
+
991
+ <div id="navMobileMenu" class="nav-mobile-menu">
992
+ <a href="/login" class="nav-mobile-link">Sign In</a>
993
+ <a href="#prompts" class="nav-mobile-link">Use Cases</a>
994
+ <a href="#how" class="nav-mobile-link">How It Works</a>
995
+ <a href="#integrations" class="nav-mobile-link">Integrations</a>
996
+ <a href="/pricing" class="nav-mobile-link">Pricing</a>
997
+ <a href="#faq" class="nav-mobile-link">FAQ</a>
998
+ </div>
999
+ </nav>
1000
+ </div>
1001
+
1002
+ <!-- Hero Section -->
1003
+ <section class="hero">
1004
+ <div class="container">
1005
+ <span class="hero-badge">
1006
+ <i class="fas fa-sparkles"></i>
1007
+ AI-Powered MCP Server Generator
1008
+ </span>
1009
+ <h1 class="hero-title">
1010
+ <span id="hero-type-part-1"></span><span class="highlight" id="hero-type-part-2"></span><span id="hero-type-part-3"></span><span class="serif" id="hero-type-part-4"></span><span class="type-cursor" aria-hidden="true">|</span>
1011
+ </h1>
1012
+ <p class="hero-subtitle">
1013
+ Generate MCP servers from APIs and databases. Connect Claude, Cursor, and other AI tools to your entire stack in minutes.
1014
+ </p>
1015
+ <div class="hero-actions">
1016
+ <a href="/login" class="btn btn-accent">
1017
+ <i class="fas fa-rocket"></i>
1018
+ Start Building Free
1019
+ </a>
1020
+ <a href="#prompts" class="btn btn-ghost">
1021
+ Explore Use Cases
1022
+ <i class="fas fa-arrow-right"></i>
1023
+ </a>
1024
+ </div>
1025
+ </div>
1026
+ </section>
1027
+
1028
+ <!-- Prompt Cards Section -->
1029
+ <section id="prompts" class="prompts-section">
1030
+ <div class="container">
1031
+ <div class="section-header">
1032
+ <span class="section-label">Popular Prompts</span>
1033
+ <h2 class="section-title">Connect apps, automation happens</h2>
1034
+ <p class="section-subtitle">Real prompts that work. Try them with your AI assistant.</p>
1035
+ </div>
1036
+
1037
+ <div class="prompt-grid">
1038
+ <div class="prompt-card">
1039
+ <div class="prompt-card-header">
1040
+ <div class="prompt-icon gmail">
1041
+ <img src="/images/app/gmail.png" alt="Gmail">
1042
+ </div>
1043
+ <div class="prompt-meta">
1044
+ <div class="prompt-app">Gmail Integration</div>
1045
+ <div class="prompt-title">Send emails with Gmail</div>
1046
+ </div>
1047
+ </div>
1048
+ <p class="prompt-description">
1049
+ "Draft and send an email to my team about tomorrow's meeting, include the agenda from my notes."
1050
+ </p>
1051
+ <div class="prompt-footer">
1052
+ <span class="prompt-users">
1053
+ <i class="fas fa-users"></i>
1054
+ 892+ users
1055
+ </span>
1056
+ <a href="/login" class="prompt-cta">
1057
+ Try
1058
+ <i class="fas fa-arrow-right"></i>
1059
+ </a>
1060
+ </div>
1061
+ </div>
1062
+
1063
+ <div class="prompt-card">
1064
+ <div class="prompt-card-header">
1065
+ <div class="prompt-icon slack">
1066
+ <img src="/images/app/slack.png" alt="Slack">
1067
+ </div>
1068
+ <div class="prompt-meta">
1069
+ <div class="prompt-app">Slack Integration</div>
1070
+ <div class="prompt-title">Post updates to Slack</div>
1071
+ </div>
1072
+ </div>
1073
+ <p class="prompt-description">
1074
+ "Post a summary of today's completed tasks to the #dev channel with relevant mentions."
1075
+ </p>
1076
+ <div class="prompt-footer">
1077
+ <span class="prompt-users">
1078
+ <i class="fas fa-users"></i>
1079
+ 1.2k+ users
1080
+ </span>
1081
+ <a href="/login" class="prompt-cta">
1082
+ Try
1083
+ <i class="fas fa-arrow-right"></i>
1084
+ </a>
1085
+ </div>
1086
+ </div>
1087
+
1088
+ <div class="prompt-card">
1089
+ <div class="prompt-card-header">
1090
+ <div class="prompt-icon database">
1091
+ <img src="/images/app/postgresql.png" alt="PostgreSQL">
1092
+ </div>
1093
+ <div class="prompt-meta">
1094
+ <div class="prompt-app">PostgreSQL Integration</div>
1095
+ <div class="prompt-title">Query your database</div>
1096
+ </div>
1097
+ </div>
1098
+ <p class="prompt-description">
1099
+ "Show me all users who signed up last week and their subscription status from the database."
1100
+ </p>
1101
+ <div class="prompt-footer">
1102
+ <span class="prompt-users">
1103
+ <i class="fas fa-users"></i>
1104
+ 756+ users
1105
+ </span>
1106
+ <a href="/login" class="prompt-cta">
1107
+ Try
1108
+ <i class="fas fa-arrow-right"></i>
1109
+ </a>
1110
+ </div>
1111
+ </div>
1112
+
1113
+ <div class="prompt-card">
1114
+ <div class="prompt-card-header">
1115
+ <div class="prompt-icon notion">
1116
+ <img src="/images/app/notion.png" alt="Notion">
1117
+ </div>
1118
+ <div class="prompt-meta">
1119
+ <div class="prompt-app">Notion Integration</div>
1120
+ <div class="prompt-title">Update Notion pages</div>
1121
+ </div>
1122
+ </div>
1123
+ <p class="prompt-description">
1124
+ "Create a new page in my Projects database with today's meeting notes and action items."
1125
+ </p>
1126
+ <div class="prompt-footer">
1127
+ <span class="prompt-users">
1128
+ <i class="fas fa-users"></i>
1129
+ 634+ users
1130
+ </span>
1131
+ <a href="/login" class="prompt-cta">
1132
+ Try
1133
+ <i class="fas fa-arrow-right"></i>
1134
+ </a>
1135
+ </div>
1136
+ </div>
1137
+
1138
+ <div class="prompt-card">
1139
+ <div class="prompt-card-header">
1140
+ <div class="prompt-icon calendar">
1141
+ <img src="/images/app/googlecalender.png" alt="Google Calendar">
1142
+ </div>
1143
+ <div class="prompt-meta">
1144
+ <div class="prompt-app">Google Calendar</div>
1145
+ <div class="prompt-title">Manage calendar events</div>
1146
+ </div>
1147
+ </div>
1148
+ <p class="prompt-description">
1149
+ "Schedule a 30-minute sync with Sarah next week, find a time that works for both of us."
1150
+ </p>
1151
+ <div class="prompt-footer">
1152
+ <span class="prompt-users">
1153
+ <i class="fas fa-users"></i>
1154
+ 543+ users
1155
+ </span>
1156
+ <a href="/login" class="prompt-cta">
1157
+ Try
1158
+ <i class="fas fa-arrow-right"></i>
1159
+ </a>
1160
+ </div>
1161
+ </div>
1162
+
1163
+ <div class="prompt-card">
1164
+ <div class="prompt-card-header">
1165
+ <div class="prompt-icon api">
1166
+ <img src="/images/app/graphql.png" alt="Custom API">
1167
+ </div>
1168
+ <div class="prompt-meta">
1169
+ <div class="prompt-app">Custom API</div>
1170
+ <div class="prompt-title">Connect any REST API</div>
1171
+ </div>
1172
+ </div>
1173
+ <p class="prompt-description">
1174
+ "Fetch the latest analytics from our internal API and create a summary report."
1175
+ </p>
1176
+ <div class="prompt-footer">
1177
+ <span class="prompt-users">
1178
+ <i class="fas fa-users"></i>
1179
+ 421+ users
1180
+ </span>
1181
+ <a href="/login" class="prompt-cta">
1182
+ Try
1183
+ <i class="fas fa-arrow-right"></i>
1184
+ </a>
1185
+ </div>
1186
+ </div>
1187
+ </div>
1188
+ </div>
1189
+ </section>
1190
+
1191
+ <!-- How It Works Section -->
1192
+ <section id="how" class="how-section">
1193
+ <div class="container">
1194
+ <div class="section-header">
1195
+ <span class="section-label">How It Works</span>
1196
+ <h2 class="section-title">Three steps to AI automation</h2>
1197
+ <p class="section-subtitle">From zero to production MCP server in minutes.</p>
1198
+ </div>
1199
+
1200
+ <div class="steps-grid">
1201
+ <div class="step">
1202
+ <div class="step-number">1</div>
1203
+ <h3 class="step-title">Connect your source</h3>
1204
+ <p class="step-desc">Link APIs, databases, or third-party services. We support REST, GraphQL, PostgreSQL, MySQL, and more.</p>
1205
+ </div>
1206
+ <div class="step">
1207
+ <div class="step-number">2</div>
1208
+ <h3 class="step-title">Generate MCP tools</h3>
1209
+ <p class="step-desc">QuickMCP automatically creates type-safe tools with proper schemas. Test them instantly in our playground.</p>
1210
+ </div>
1211
+ <div class="step">
1212
+ <div class="step-number">3</div>
1213
+ <h3 class="step-title">Deploy & use</h3>
1214
+ <p class="step-desc">Get your MCP server endpoint. Connect it to Claude, Cursor, or any MCP-compatible AI assistant.</p>
1215
+ </div>
1216
+ </div>
1217
+ </div>
1218
+ </section>
1219
+
1220
+ <!-- Integrations Section -->
1221
+ <section id="integrations" class="integrations-section">
1222
+ <div class="container">
1223
+ <div class="integrations-wrap">
1224
+ <div class="integrations-header">
1225
+ <span class="section-label">Integrations</span>
1226
+ <h2 class="integrations-title">Works with your entire stack</h2>
1227
+ <p class="integrations-subtitle">Connect the tools you already use and love.</p>
1228
+ </div>
1229
+
1230
+ <div class="marquee-container">
1231
+ <div class="marquee-row">
1232
+ <div class="marquee left">
1233
+ <span class="integration-chip"><img src="/images/app/vscode.png" alt="VSCode">VSCode</span>
1234
+ <span class="integration-chip"><img src="/images/app/claude.png" alt="Claude">Claude</span>
1235
+ <span class="integration-chip"><img src="/images/app/cursor.png" alt="Cursor">Cursor</span>
1236
+ <span class="integration-chip"><img src="/images/app/whatsappbusiness.png" alt="Whatsapp">Whatsapp</span>
1237
+ <span class="integration-chip"><img src="/images/app/openai.png" alt="OpenAI">OpenAI</span>
1238
+ <span class="integration-chip"><img src="/images/app/n8n.png" alt="N8N">N8N</span>
1239
+ <span class="integration-chip"><img src="/images/app/mcp.png" alt="MCP">MCP</span>
1240
+ <span class="integration-chip"><img src="/images/app/windsorf.png" alt="Windsurf">Windsurf</span>
1241
+ <span class="integration-chip"><img src="/images/app/intellij.png" alt="IntelliJ">IntelliJ</span>
1242
+ <span class="integration-chip"><img src="/images/app/githubcopilot.png" alt="GitHub Copilot">GitHub Copilot</span>
1243
+ <span class="integration-chip"><img src="/images/app/zededitor.png" alt="Zed">Zed</span>
1244
+ <span class="integration-chip"><img src="/images/app/vscode.png" alt="VSCode">VSCode</span>
1245
+ <span class="integration-chip"><img src="/images/app/claude.png" alt="Claude">Claude</span>
1246
+ <span class="integration-chip"><img src="/images/app/cursor.png" alt="Cursor">Cursor</span>
1247
+ <span class="integration-chip"><img src="/images/app/whatsappbusiness.png" alt="Whatsapp">Whatsapp</span>
1248
+ <span class="integration-chip"><img src="/images/app/openai.png" alt="OpenAI">OpenAI</span>
1249
+ <span class="integration-chip"><img src="/images/app/n8n.png" alt="N8N">N8N</span>
1250
+ <span class="integration-chip"><img src="/images/app/mcp.png" alt="MCP">MCP</span>
1251
+ <span class="integration-chip"><img src="/images/app/windsorf.png" alt="Windsurf">Windsurf</span>
1252
+ <span class="integration-chip"><img src="/images/app/intellij.png" alt="IntelliJ">IntelliJ</span>
1253
+ <span class="integration-chip"><img src="/images/app/githubcopilot.png" alt="GitHub Copilot">GitHub Copilot</span>
1254
+ <span class="integration-chip"><img src="/images/app/zededitor.png" alt="Zed">Zed</span>
1255
+ </div>
1256
+ </div>
1257
+
1258
+ <div class="marquee-row">
1259
+ <div class="marquee right">
1260
+ <span class="integration-chip"><img src="/images/app/slack.png" alt="Slack">Slack</span>
1261
+ <span class="integration-chip"><img src="/images/app/telegram.png" alt="Telegram">Telegram</span>
1262
+ <span class="integration-chip"><img src="/images/app/discord.png" alt="Discord">Discord</span>
1263
+ <span class="integration-chip"><img src="/images/app/microsoftteams.png" alt="Teams">Teams</span>
1264
+ <span class="integration-chip"><img src="/images/app/zapier.png" alt="Zapier">Zapier</span>
1265
+ <span class="integration-chip"><img src="/images/app/make.png" alt="Make">Make</span>
1266
+ <span class="integration-chip"><img src="/images/app/pipedream.png" alt="Pipedream">Pipedream</span>
1267
+ <span class="integration-chip"><img src="/images/app/activepieces.png" alt="Activepieces">Activepieces</span>
1268
+ <span class="integration-chip"><img src="/images/app/androidstudio.png" alt="Android Studio">Android Studio</span>
1269
+ <span class="integration-chip"><img src="/images/app/antigravity.png" alt="Antigravity">Antigravity</span>
1270
+ <span class="integration-chip"><img src="/images/app/slack.png" alt="Slack">Slack</span>
1271
+ <span class="integration-chip"><img src="/images/app/telegram.png" alt="Telegram">Telegram</span>
1272
+ <span class="integration-chip"><img src="/images/app/discord.png" alt="Discord">Discord</span>
1273
+ <span class="integration-chip"><img src="/images/app/microsoftteams.png" alt="Teams">Teams</span>
1274
+ <span class="integration-chip"><img src="/images/app/zapier.png" alt="Zapier">Zapier</span>
1275
+ <span class="integration-chip"><img src="/images/app/make.png" alt="Make">Make</span>
1276
+ <span class="integration-chip"><img src="/images/app/pipedream.png" alt="Pipedream">Pipedream</span>
1277
+ <span class="integration-chip"><img src="/images/app/activepieces.png" alt="Activepieces">Activepieces</span>
1278
+ <span class="integration-chip"><img src="/images/app/androidstudio.png" alt="Android Studio">Android Studio</span>
1279
+ <span class="integration-chip"><img src="/images/app/antigravity.png" alt="Antigravity">Antigravity</span>
1280
+ </div>
1281
+ </div>
1282
+ </div>
1283
+
1284
+ <div class="server-tech">
1285
+ <h3 class="server-tech-title">Build MCP servers from your data and APIs</h3>
1286
+ <p class="server-tech-subtitle">Use every source available in New Server, from databases and APIs to SaaS tools and AI platforms.</p>
1287
+ <div class="marquee-container">
1288
+ <div class="marquee-row">
1289
+ <div class="marquee tech-left" id="server-tech-marquee-left">
1290
+ <span class="server-tech-chip"><img src="/images/app/airtable.png" alt="Airtable">Airtable</span>
1291
+ <span class="server-tech-chip"><img src="/images/app/applenotes.png" alt="Apple Notes">Apple Notes</span>
1292
+ <span class="server-tech-chip"><img src="/images/app/applereminders.png" alt="Apple Reminders">Apple Reminders</span>
1293
+ <span class="server-tech-chip"><img src="/images/app/asana.png" alt="Asana">Asana</span>
1294
+ <span class="server-tech-chip"><img src="/images/app/azureai.png" alt="Azure AI">Azure AI</span>
1295
+ <span class="server-tech-chip"><img src="/images/app/bearnotes.png" alt="Bear Notes">Bear Notes</span>
1296
+ <span class="server-tech-chip"><img src="/images/app/bitbucket.png" alt="Bitbucket">Bitbucket</span>
1297
+ <span class="server-tech-chip"><img src="/images/app/claude.png" alt="Claude">Claude</span>
1298
+ <span class="server-tech-chip"><img src="/images/app/clickup.png" alt="ClickUp">ClickUp</span>
1299
+ <span class="server-tech-chip"><img src="/images/app/cohere.png" alt="Cohere">Cohere</span>
1300
+ <span class="server-tech-chip"><img src="/images/app/confluence.png" alt="Confluence">Confluence</span>
1301
+ <span class="server-tech-chip"><img src="/images/app/db2.png" alt="DB2">DB2</span>
1302
+ <span class="server-tech-chip"><img src="/images/app/deepseek.png" alt="DeepSeek">DeepSeek</span>
1303
+ <span class="server-tech-chip"><img src="/images/app/discord.png" alt="Discord">Discord</span>
1304
+ <span class="server-tech-chip"><img src="/images/app/dockerhub.png" alt="Docker Hub">Docker Hub</span>
1305
+ <span class="server-tech-chip"><img src="/images/app/dropbox.png" alt="Dropbox">Dropbox</span>
1306
+ <span class="server-tech-chip"><img src="/images/app/elasticsearch.png" alt="Elasticsearch">Elasticsearch</span>
1307
+ <span class="server-tech-chip"><img src="/images/app/facebook.png" alt="Facebook">Facebook</span>
1308
+ <span class="server-tech-chip"><img src="/images/app/falai.png" alt="Fal.ai">Fal.ai</span>
1309
+ <span class="server-tech-chip"><img src="/images/app/gdrive.png" alt="Google Drive">Google Drive</span>
1310
+ <span class="server-tech-chip"><img src="/images/app/gemini.png" alt="Gemini">Gemini</span>
1311
+ <span class="server-tech-chip"><img src="/images/app/github.png" alt="GitHub">GitHub</span>
1312
+ <span class="server-tech-chip"><img src="/images/app/gitlab.png" alt="GitLab">GitLab</span>
1313
+ <span class="server-tech-chip"><img src="/images/app/gmail.png" alt="Gmail">Gmail</span>
1314
+ <span class="server-tech-chip"><img src="/images/app/googlecalender.png" alt="Google Calendar">Google Calendar</span>
1315
+ <span class="server-tech-chip"><img src="/images/app/googledocs.png" alt="Google Docs">Google Docs</span>
1316
+ <span class="server-tech-chip"><img src="/images/app/googlesheets.png" alt="Google Sheets">Google Sheets</span>
1317
+ <span class="server-tech-chip"><img src="/images/app/gradle.png" alt="Gradle">Gradle</span>
1318
+ <span class="server-tech-chip"><img src="/images/app/grafana.png" alt="Grafana">Grafana</span>
1319
+ <span class="server-tech-chip"><img src="/images/app/graphql.png" alt="GraphQL">GraphQL</span>
1320
+ <span class="server-tech-chip"><img src="/images/app/grok.png" alt="Grok">Grok</span>
1321
+ <span class="server-tech-chip"><img src="/images/app/groq.png" alt="Groq">Groq</span>
1322
+ <span class="server-tech-chip"><img src="/images/app/hazelcast.png" alt="Hazelcast">Hazelcast</span>
1323
+ <span class="server-tech-chip"><img src="/images/app/huggingface.png" alt="Hugging Face">Hugging Face</span>
1324
+ <span class="server-tech-chip"><img src="/images/app/imessage.png" alt="iMessage">iMessage</span>
1325
+ <span class="server-tech-chip"><img src="/images/app/instagram.png" alt="Instagram">Instagram</span>
1326
+ <span class="server-tech-chip"><img src="/images/app/jenkins.png" alt="Jenkins">Jenkins</span>
1327
+ <span class="server-tech-chip"><img src="/images/app/jira.png" alt="Jira">Jira</span>
1328
+ <span class="server-tech-chip"><img src="/images/app/kafka.png" alt="Kafka">Kafka</span>
1329
+ <span class="server-tech-chip"><img src="/images/app/kubernetes.png" alt="Kubernetes">Kubernetes</span>
1330
+ <span class="server-tech-chip"><img src="/images/app/linear.png" alt="Linear">Linear</span>
1331
+ <span class="server-tech-chip"><img src="/images/app/linkedin.png" alt="LinkedIn">LinkedIn</span>
1332
+ <span class="server-tech-chip"><img src="/images/app/llama.png" alt="Llama">Llama</span>
1333
+ <span class="server-tech-chip"><img src="/images/app/maven.png" alt="Maven">Maven</span>
1334
+ <span class="server-tech-chip"><img src="/images/app/microsoftteams.png" alt="Microsoft Teams">Microsoft Teams</span>
1335
+ <span class="server-tech-chip"><img src="/images/app/mistral.png" alt="Mistral">Mistral</span>
1336
+ <span class="server-tech-chip"><img src="/images/app/monday.png" alt="Monday">Monday</span>
1337
+ <span class="server-tech-chip"><img src="/images/app/mssql.png" alt="SQL Server">SQL Server</span>
1338
+ <span class="server-tech-chip"><img src="/images/app/mysql.png" alt="MySQL">MySQL</span>
1339
+ <span class="server-tech-chip"><img src="/images/app/n8n.png" alt="n8n">n8n</span>
1340
+ <span class="server-tech-chip"><img src="/images/app/notion.png" alt="Notion">Notion</span>
1341
+ <span class="server-tech-chip"><img src="/images/app/npm.png" alt="npm">npm</span>
1342
+ <span class="server-tech-chip"><img src="/images/app/nuget.png" alt="NuGet">NuGet</span>
1343
+ <span class="server-tech-chip"><img src="/images/app/obsidian.png" alt="Obsidian">Obsidian</span>
1344
+ <span class="server-tech-chip"><img src="/images/app/openai.png" alt="OpenAI">OpenAI</span>
1345
+ <span class="server-tech-chip"><img src="/images/app/openrouter.png" alt="OpenRouter">OpenRouter</span>
1346
+ <span class="server-tech-chip"><img src="/images/app/opensearch.png" alt="OpenSearch">OpenSearch</span>
1347
+ <span class="server-tech-chip"><img src="/images/app/openshift.png" alt="OpenShift">OpenShift</span>
1348
+ <span class="server-tech-chip"><img src="/images/app/oracle.png" alt="Oracle">Oracle</span>
1349
+ <span class="server-tech-chip"><img src="/images/app/perplexity.png" alt="Perplexity">Perplexity</span>
1350
+ <span class="server-tech-chip"><img src="/images/app/postgresql.png" alt="PostgreSQL">PostgreSQL</span>
1351
+ <span class="server-tech-chip"><img src="/images/app/prometheus.png" alt="Prometheus">Prometheus</span>
1352
+ <span class="server-tech-chip"><img src="/images/app/reddit.png" alt="Reddit">Reddit</span>
1353
+ <span class="server-tech-chip"><img src="/images/app/redis.png" alt="Redis">Redis</span>
1354
+ <span class="server-tech-chip"><img src="/images/app/rss.png" alt="RSS">RSS</span>
1355
+ <span class="server-tech-chip"><img src="/images/app/signal.png" alt="Signal">Signal</span>
1356
+ <span class="server-tech-chip"><img src="/images/app/slack.png" alt="Slack">Slack</span>
1357
+ <span class="server-tech-chip"><img src="/images/app/soap.png" alt="SOAP">SOAP</span>
1358
+ <span class="server-tech-chip"><img src="/images/app/sqlite.png" alt="SQLite">SQLite</span>
1359
+ <span class="server-tech-chip"><img src="/images/app/supabase.png" alt="Supabase">Supabase</span>
1360
+ <span class="server-tech-chip"><img src="/images/app/telegram.png" alt="Telegram">Telegram</span>
1361
+ <span class="server-tech-chip"><img src="/images/app/things3.png" alt="Things3">Things3</span>
1362
+ <span class="server-tech-chip"><img src="/images/app/threads.png" alt="Threads">Threads</span>
1363
+ <span class="server-tech-chip"><img src="/images/app/tiktok.png" alt="TikTok">TikTok</span>
1364
+ <span class="server-tech-chip"><img src="/images/app/together.png" alt="Together AI">Together AI</span>
1365
+ <span class="server-tech-chip"><img src="/images/app/trello.png" alt="Trello">Trello</span>
1366
+ <span class="server-tech-chip"><img src="/images/app/whatsappbusiness.png" alt="WhatsApp">WhatsApp</span>
1367
+ <span class="server-tech-chip"><img src="/images/app/x.png" alt="X">X</span>
1368
+ <span class="server-tech-chip"><img src="/images/app/youtube.png" alt="YouTube">YouTube</span>
1369
+ <span class="server-tech-chip"><img src="/images/app/zoom.png" alt="Zoom">Zoom</span>
1370
+ <span class="server-tech-chip"><img src="/images/app/airtable.png" alt="Airtable">Airtable</span>
1371
+ <span class="server-tech-chip"><img src="/images/app/applenotes.png" alt="Apple Notes">Apple Notes</span>
1372
+ <span class="server-tech-chip"><img src="/images/app/applereminders.png" alt="Apple Reminders">Apple Reminders</span>
1373
+ <span class="server-tech-chip"><img src="/images/app/asana.png" alt="Asana">Asana</span>
1374
+ <span class="server-tech-chip"><img src="/images/app/azureai.png" alt="Azure AI">Azure AI</span>
1375
+ <span class="server-tech-chip"><img src="/images/app/bearnotes.png" alt="Bear Notes">Bear Notes</span>
1376
+ <span class="server-tech-chip"><img src="/images/app/bitbucket.png" alt="Bitbucket">Bitbucket</span>
1377
+ <span class="server-tech-chip"><img src="/images/app/claude.png" alt="Claude">Claude</span>
1378
+ <span class="server-tech-chip"><img src="/images/app/clickup.png" alt="ClickUp">ClickUp</span>
1379
+ <span class="server-tech-chip"><img src="/images/app/cohere.png" alt="Cohere">Cohere</span>
1380
+ <span class="server-tech-chip"><img src="/images/app/confluence.png" alt="Confluence">Confluence</span>
1381
+ <span class="server-tech-chip"><img src="/images/app/db2.png" alt="DB2">DB2</span>
1382
+ <span class="server-tech-chip"><img src="/images/app/deepseek.png" alt="DeepSeek">DeepSeek</span>
1383
+ <span class="server-tech-chip"><img src="/images/app/discord.png" alt="Discord">Discord</span>
1384
+ <span class="server-tech-chip"><img src="/images/app/dockerhub.png" alt="Docker Hub">Docker Hub</span>
1385
+ <span class="server-tech-chip"><img src="/images/app/dropbox.png" alt="Dropbox">Dropbox</span>
1386
+ <span class="server-tech-chip"><img src="/images/app/elasticsearch.png" alt="Elasticsearch">Elasticsearch</span>
1387
+ <span class="server-tech-chip"><img src="/images/app/facebook.png" alt="Facebook">Facebook</span>
1388
+ <span class="server-tech-chip"><img src="/images/app/falai.png" alt="Fal.ai">Fal.ai</span>
1389
+ <span class="server-tech-chip"><img src="/images/app/gdrive.png" alt="Google Drive">Google Drive</span>
1390
+ <span class="server-tech-chip"><img src="/images/app/gemini.png" alt="Gemini">Gemini</span>
1391
+ <span class="server-tech-chip"><img src="/images/app/github.png" alt="GitHub">GitHub</span>
1392
+ <span class="server-tech-chip"><img src="/images/app/gitlab.png" alt="GitLab">GitLab</span>
1393
+ <span class="server-tech-chip"><img src="/images/app/gmail.png" alt="Gmail">Gmail</span>
1394
+ <span class="server-tech-chip"><img src="/images/app/googlecalender.png" alt="Google Calendar">Google Calendar</span>
1395
+ <span class="server-tech-chip"><img src="/images/app/googledocs.png" alt="Google Docs">Google Docs</span>
1396
+ <span class="server-tech-chip"><img src="/images/app/googlesheets.png" alt="Google Sheets">Google Sheets</span>
1397
+ <span class="server-tech-chip"><img src="/images/app/gradle.png" alt="Gradle">Gradle</span>
1398
+ <span class="server-tech-chip"><img src="/images/app/grafana.png" alt="Grafana">Grafana</span>
1399
+ <span class="server-tech-chip"><img src="/images/app/graphql.png" alt="GraphQL">GraphQL</span>
1400
+ <span class="server-tech-chip"><img src="/images/app/grok.png" alt="Grok">Grok</span>
1401
+ <span class="server-tech-chip"><img src="/images/app/groq.png" alt="Groq">Groq</span>
1402
+ <span class="server-tech-chip"><img src="/images/app/hazelcast.png" alt="Hazelcast">Hazelcast</span>
1403
+ <span class="server-tech-chip"><img src="/images/app/huggingface.png" alt="Hugging Face">Hugging Face</span>
1404
+ <span class="server-tech-chip"><img src="/images/app/imessage.png" alt="iMessage">iMessage</span>
1405
+ <span class="server-tech-chip"><img src="/images/app/instagram.png" alt="Instagram">Instagram</span>
1406
+ <span class="server-tech-chip"><img src="/images/app/jenkins.png" alt="Jenkins">Jenkins</span>
1407
+ <span class="server-tech-chip"><img src="/images/app/jira.png" alt="Jira">Jira</span>
1408
+ <span class="server-tech-chip"><img src="/images/app/kafka.png" alt="Kafka">Kafka</span>
1409
+ <span class="server-tech-chip"><img src="/images/app/kubernetes.png" alt="Kubernetes">Kubernetes</span>
1410
+ <span class="server-tech-chip"><img src="/images/app/linear.png" alt="Linear">Linear</span>
1411
+ <span class="server-tech-chip"><img src="/images/app/linkedin.png" alt="LinkedIn">LinkedIn</span>
1412
+ <span class="server-tech-chip"><img src="/images/app/llama.png" alt="Llama">Llama</span>
1413
+ <span class="server-tech-chip"><img src="/images/app/maven.png" alt="Maven">Maven</span>
1414
+ <span class="server-tech-chip"><img src="/images/app/microsoftteams.png" alt="Microsoft Teams">Microsoft Teams</span>
1415
+ <span class="server-tech-chip"><img src="/images/app/mistral.png" alt="Mistral">Mistral</span>
1416
+ <span class="server-tech-chip"><img src="/images/app/monday.png" alt="Monday">Monday</span>
1417
+ <span class="server-tech-chip"><img src="/images/app/mssql.png" alt="SQL Server">SQL Server</span>
1418
+ <span class="server-tech-chip"><img src="/images/app/mysql.png" alt="MySQL">MySQL</span>
1419
+ <span class="server-tech-chip"><img src="/images/app/n8n.png" alt="n8n">n8n</span>
1420
+ <span class="server-tech-chip"><img src="/images/app/notion.png" alt="Notion">Notion</span>
1421
+ <span class="server-tech-chip"><img src="/images/app/npm.png" alt="npm">npm</span>
1422
+ <span class="server-tech-chip"><img src="/images/app/nuget.png" alt="NuGet">NuGet</span>
1423
+ <span class="server-tech-chip"><img src="/images/app/obsidian.png" alt="Obsidian">Obsidian</span>
1424
+ <span class="server-tech-chip"><img src="/images/app/openai.png" alt="OpenAI">OpenAI</span>
1425
+ <span class="server-tech-chip"><img src="/images/app/openrouter.png" alt="OpenRouter">OpenRouter</span>
1426
+ <span class="server-tech-chip"><img src="/images/app/opensearch.png" alt="OpenSearch">OpenSearch</span>
1427
+ <span class="server-tech-chip"><img src="/images/app/openshift.png" alt="OpenShift">OpenShift</span>
1428
+ <span class="server-tech-chip"><img src="/images/app/oracle.png" alt="Oracle">Oracle</span>
1429
+ <span class="server-tech-chip"><img src="/images/app/perplexity.png" alt="Perplexity">Perplexity</span>
1430
+ <span class="server-tech-chip"><img src="/images/app/postgresql.png" alt="PostgreSQL">PostgreSQL</span>
1431
+ <span class="server-tech-chip"><img src="/images/app/prometheus.png" alt="Prometheus">Prometheus</span>
1432
+ <span class="server-tech-chip"><img src="/images/app/reddit.png" alt="Reddit">Reddit</span>
1433
+ <span class="server-tech-chip"><img src="/images/app/redis.png" alt="Redis">Redis</span>
1434
+ <span class="server-tech-chip"><img src="/images/app/rss.png" alt="RSS">RSS</span>
1435
+ <span class="server-tech-chip"><img src="/images/app/signal.png" alt="Signal">Signal</span>
1436
+ <span class="server-tech-chip"><img src="/images/app/slack.png" alt="Slack">Slack</span>
1437
+ <span class="server-tech-chip"><img src="/images/app/soap.png" alt="SOAP">SOAP</span>
1438
+ <span class="server-tech-chip"><img src="/images/app/sqlite.png" alt="SQLite">SQLite</span>
1439
+ <span class="server-tech-chip"><img src="/images/app/supabase.png" alt="Supabase">Supabase</span>
1440
+ <span class="server-tech-chip"><img src="/images/app/telegram.png" alt="Telegram">Telegram</span>
1441
+ <span class="server-tech-chip"><img src="/images/app/things3.png" alt="Things3">Things3</span>
1442
+ <span class="server-tech-chip"><img src="/images/app/threads.png" alt="Threads">Threads</span>
1443
+ <span class="server-tech-chip"><img src="/images/app/tiktok.png" alt="TikTok">TikTok</span>
1444
+ <span class="server-tech-chip"><img src="/images/app/together.png" alt="Together AI">Together AI</span>
1445
+ <span class="server-tech-chip"><img src="/images/app/trello.png" alt="Trello">Trello</span>
1446
+ <span class="server-tech-chip"><img src="/images/app/whatsappbusiness.png" alt="WhatsApp">WhatsApp</span>
1447
+ <span class="server-tech-chip"><img src="/images/app/x.png" alt="X">X</span>
1448
+ <span class="server-tech-chip"><img src="/images/app/youtube.png" alt="YouTube">YouTube</span>
1449
+ <span class="server-tech-chip"><img src="/images/app/zoom.png" alt="Zoom">Zoom</span>
1450
+ </div>
1451
+ </div>
1452
+ <div class="marquee-row">
1453
+ <div class="marquee tech-right" id="server-tech-marquee-right"></div>
1454
+ </div>
1455
+ </div>
1456
+ </div>
1457
+ </div>
1458
+ </div>
1459
+ </section>
1460
+
1461
+ <!-- FAQ Section -->
1462
+ <section id="faq" class="faq-section">
1463
+ <div class="container">
1464
+ <div class="section-header">
1465
+ <span class="section-label">FAQ</span>
1466
+ <h2 class="section-title">Got questions?</h2>
1467
+ <p class="section-subtitle">Everything you need to know about QuickMCP.</p>
1468
+ </div>
1469
+
1470
+ <div class="faq-grid">
1471
+ <details class="faq-item">
1472
+ <summary>What is QuickMCP and how does it work?</summary>
1473
+ <div class="faq-answer">QuickMCP connects to 500+ apps, including Gmail, Slack, GitHub, and Notion, and turns your data into structured actions your AI assistant can safely execute through MCP (Model Context Protocol).<br><br>Just sign in, connect your apps, and ask your AI to complete real business workflows like "Analyze products in the database," "Segment customers by behavior," "Generate sales insights from recent orders," or "Identify churn-risk accounts." QuickMCP can also run as an MCP server in compatible AI tools.</div>
1474
+ </details>
1475
+
1476
+ <details class="faq-item">
1477
+ <summary>How do I get started?</summary>
1478
+ <div class="faq-answer">Create an account, connect your first tool or database, generate actions, and test them from your AI client in minutes. No coding required for basic setups.</div>
1479
+ </details>
1480
+
1481
+ <details class="faq-item">
1482
+ <summary>What can I connect to QuickMCP?</summary>
1483
+ <div class="faq-answer">You can connect databases like PostgreSQL, MySQL, MSSQL, and Oracle; message brokers like Kafka and RabbitMQ; in-memory data grids like Redis and Hazelcast; container platforms like OpenShift and Kubernetes; plus REST APIs and GraphQL endpoints.</div>
1484
+ </details>
1485
+
1486
+ <details class="faq-item">
1487
+ <summary>Which AI assistants are supported?</summary>
1488
+ <div class="faq-answer">QuickMCP works with any MCP-compatible AI assistant including Claude Desktop, Cursor, VSCode with Claude extension, and other tools that support the MCP protocol.</div>
1489
+ </details>
1490
+
1491
+ <details class="faq-item">
1492
+ <summary>Is my data secure?</summary>
1493
+ <div class="faq-answer">Yes. Access is controlled with authentication and token policies. Integrations are scoped to only the resources you explicitly allow. Your credentials are encrypted at rest.</div>
1494
+ </details>
1495
+
1496
+ <details class="faq-item">
1497
+ <summary>Do I need coding skills?</summary>
1498
+ <div class="faq-answer">Basic setup is no-code friendly. For advanced customization, you can modify generated tools and server behavior using TypeScript or Python.</div>
1499
+ </details>
1500
+
1501
+ <details class="faq-item">
1502
+ <summary>Can I use multiple integrations together?</summary>
1503
+ <div class="faq-answer">Yes. You can connect and orchestrate multiple services in one workflow and call them from the same MCP session for complex automations.</div>
1504
+ </details>
1505
+
1506
+ <details class="faq-item">
1507
+ <summary>What if my app isn't supported?</summary>
1508
+ <div class="faq-answer">You can integrate any app using custom API connectors or database connections. QuickMCP generates MCP tools from any REST API specification.</div>
1509
+ </details>
1510
+ </div>
1511
+ </div>
1512
+ </section>
1513
+
1514
+ <!-- CTA Section -->
1515
+ <section class="cta-section">
1516
+ <div class="container">
1517
+ <div class="cta-card">
1518
+ <div class="cta-content">
1519
+ <h2 class="cta-title">Ready to connect your AI to everything?</h2>
1520
+ <p class="cta-subtitle">Start building your MCP servers today. No credit card required.</p>
1521
+ <div class="cta-actions">
1522
+ <a href="/login" class="btn btn-accent">
1523
+ <i class="fas fa-rocket"></i>
1524
+ Get Started Free
1525
+ </a>
1526
+ <a href="mailto:quickmcp@gmail.com" class="btn btn-ghost">
1527
+ Contact Sales
1528
+ </a>
1529
+ </div>
1530
+ </div>
1531
+ </div>
1532
+ </div>
1533
+ </section>
1534
+
1535
+ <!-- Footer -->
1536
+ <footer class="footer">
1537
+ <div class="container">
1538
+ <p class="footer-text">
1539
+ Built with <span style="color: var(--accent);">&#10084;</span> by QuickMCP Team &middot;
1540
+ <a href="mailto:quickmcp@gmail.com">quickmcp@gmail.com</a>
1541
+ </p>
1542
+ </div>
1543
+ </footer>
1544
+ <script>
1545
+ (() => {
1546
+ const hash = window.location.hash || '';
1547
+ const hasSupabaseToken = hash.includes('access_token=');
1548
+ if (hasSupabaseToken) {
1549
+ const params = new URLSearchParams(hash.replace(/^#/, ''));
1550
+ const accessToken = params.get('access_token') || '';
1551
+ if (accessToken) {
1552
+ fetch('/api/auth/oauth/session', {
1553
+ method: 'POST',
1554
+ headers: { 'Content-Type': 'application/json' },
1555
+ body: JSON.stringify({ accessToken })
1556
+ })
1557
+ .then((response) => response.ok ? response.json() : Promise.reject(new Error('session_failed')))
1558
+ .then((body) => {
1559
+ const apiNext = typeof body?.data?.next === 'string' ? body.data.next : '';
1560
+ const next = apiNext.startsWith('/') ? apiNext : '/oauth/authorize/complete';
1561
+ window.location.replace(next);
1562
+ })
1563
+ .catch(() => {
1564
+ // Fallback to login page; keep hash so login page can retry session creation.
1565
+ window.location.replace(`/login${window.location.hash}`);
1566
+ });
1567
+ return;
1568
+ }
1569
+ }
1570
+
1571
+ const navMenuToggle = document.getElementById('navMenuToggle');
1572
+ const navMobileMenu = document.getElementById('navMobileMenu');
1573
+ if (navMenuToggle && navMobileMenu) {
1574
+ navMenuToggle.addEventListener('click', () => {
1575
+ const isOpen = navMobileMenu.classList.toggle('open');
1576
+ navMenuToggle.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
1577
+ });
1578
+
1579
+ navMobileMenu.querySelectorAll('a').forEach((link) => {
1580
+ link.addEventListener('click', () => {
1581
+ navMobileMenu.classList.remove('open');
1582
+ navMenuToggle.setAttribute('aria-expanded', 'false');
1583
+ });
1584
+ });
1585
+
1586
+ window.addEventListener('resize', () => {
1587
+ if (window.innerWidth > 900) {
1588
+ navMobileMenu.classList.remove('open');
1589
+ navMenuToggle.setAttribute('aria-expanded', 'false');
1590
+ }
1591
+ });
1592
+ }
1593
+
1594
+ const reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
1595
+ const parts = [
1596
+ { id: 'hero-type-part-1', text: 'Now your AI can ' },
1597
+ { id: 'hero-type-part-2', text: 'connect' },
1598
+ { id: 'hero-type-part-3', text: ' to ' },
1599
+ { id: 'hero-type-part-4', text: 'anything' }
1600
+ ];
1601
+
1602
+ if (reduceMotion) {
1603
+ parts.forEach((part) => {
1604
+ const el = document.getElementById(part.id);
1605
+ if (el) el.textContent = part.text;
1606
+ });
1607
+ } else {
1608
+ const queue = parts
1609
+ .map((part) => {
1610
+ const el = document.getElementById(part.id);
1611
+ if (el) el.textContent = '';
1612
+ return { ...part, el, index: 0 };
1613
+ })
1614
+ .filter((part) => part.el);
1615
+
1616
+ let partIndex = 0;
1617
+ const speedMs = 55;
1618
+
1619
+ const tick = () => {
1620
+ if (partIndex >= queue.length) return;
1621
+ const current = queue[partIndex];
1622
+ current.index += 1;
1623
+ current.el.textContent = current.text.slice(0, current.index);
1624
+ if (current.index >= current.text.length) partIndex += 1;
1625
+ setTimeout(tick, speedMs);
1626
+ };
1627
+
1628
+ tick();
1629
+ }
1630
+
1631
+ const left = document.getElementById('server-tech-marquee-left');
1632
+ const right = document.getElementById('server-tech-marquee-right');
1633
+ if (!left || !right) return;
1634
+ right.innerHTML = left.innerHTML;
1635
+ })();
1636
+ </script>
1637
+ </body>
1638
+ </html>