@softtechai/quickmcp 1.0.16 → 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.
- package/dist/auth/auth-utils.d.ts +130 -0
- package/dist/auth/auth-utils.d.ts.map +1 -0
- package/dist/auth/auth-utils.js +600 -0
- package/dist/auth/auth-utils.js.map +1 -0
- package/dist/auth/jwks-provider.d.ts +9 -0
- package/dist/auth/jwks-provider.d.ts.map +1 -0
- package/dist/auth/jwks-provider.js +56 -0
- package/dist/auth/jwks-provider.js.map +1 -0
- package/dist/auth/token-utils.d.ts +40 -0
- package/dist/auth/token-utils.d.ts.map +1 -0
- package/dist/auth/token-utils.js +162 -0
- package/dist/auth/token-utils.js.map +1 -0
- package/dist/client/MCPClient.js +5 -4
- package/dist/client/MCPClient.js.map +1 -1
- package/dist/config/auth-config.d.ts +16 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +107 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/constant/constant.d.ts +20 -0
- package/dist/constant/constant.d.ts.map +1 -0
- package/dist/constant/constant.js +24 -0
- package/dist/constant/constant.js.map +1 -0
- package/dist/database/async-datastore.d.ts +6 -0
- package/dist/database/async-datastore.d.ts.map +1 -0
- package/dist/database/async-datastore.js +15 -0
- package/dist/database/async-datastore.js.map +1 -0
- package/dist/database/database-utils.d.ts +6 -0
- package/dist/database/database-utils.d.ts.map +1 -0
- package/dist/database/database-utils.js +29 -0
- package/dist/database/database-utils.js.map +1 -0
- package/dist/database/datastore.d.ts +164 -0
- package/dist/database/datastore.d.ts.map +1 -0
- package/dist/{parsers/types/index.js → database/datastore.js} +1 -0
- package/dist/database/datastore.js.map +1 -0
- package/dist/database/factory.d.ts +4 -0
- package/dist/database/factory.d.ts.map +1 -0
- package/dist/database/factory.js +32 -0
- package/dist/database/factory.js.map +1 -0
- package/dist/database/jdbc-manager.d.ts +49 -0
- package/dist/database/jdbc-manager.d.ts.map +1 -0
- package/dist/database/jdbc-manager.js +50 -0
- package/dist/database/jdbc-manager.js.map +1 -0
- package/dist/database/sqlite-manager.d.ts +46 -44
- package/dist/database/sqlite-manager.d.ts.map +1 -1
- package/dist/database/sqlite-manager.js +492 -42
- package/dist/database/sqlite-manager.js.map +1 -1
- package/dist/database/supabase-manager.d.ts +58 -0
- package/dist/database/supabase-manager.d.ts.map +1 -0
- package/dist/database/supabase-manager.js +432 -0
- package/dist/database/supabase-manager.js.map +1 -0
- package/dist/generators/MCPServerGenerator.d.ts +103 -20
- package/dist/generators/MCPServerGenerator.d.ts.map +1 -1
- package/dist/generators/MCPServerGenerator.js +6930 -128
- package/dist/generators/MCPServerGenerator.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/integrated-mcp-server-new.d.ts +14 -2
- package/dist/integrated-mcp-server-new.d.ts.map +1 -1
- package/dist/integrated-mcp-server-new.js +270 -180
- package/dist/integrated-mcp-server-new.js.map +1 -1
- package/dist/mcp-core/McpCoreService.d.ts +63 -0
- package/dist/mcp-core/McpCoreService.d.ts.map +1 -0
- package/dist/mcp-core/McpCoreService.js +492 -0
- package/dist/mcp-core/McpCoreService.js.map +1 -0
- package/dist/parsers/CsvParser.d.ts +1 -1
- package/dist/parsers/CsvParser.d.ts.map +1 -1
- package/dist/parsers/CsvParser.js +3 -2
- package/dist/parsers/CsvParser.js.map +1 -1
- package/dist/parsers/DatabaseParser.d.ts.map +1 -1
- package/dist/parsers/DatabaseParser.js +9 -8
- package/dist/parsers/DatabaseParser.js.map +1 -1
- package/dist/parsers/ExcelParser.d.ts +15 -0
- package/dist/parsers/ExcelParser.d.ts.map +1 -1
- package/dist/parsers/ExcelParser.js +287 -21
- package/dist/parsers/ExcelParser.js.map +1 -1
- package/dist/parsers/WebPageParser.d.ts +5 -0
- package/dist/parsers/WebPageParser.d.ts.map +1 -0
- package/dist/parsers/WebPageParser.js +35 -0
- package/dist/parsers/WebPageParser.js.map +1 -0
- package/dist/parsers/index.d.ts +3 -2
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +19 -16
- package/dist/parsers/index.js.map +1 -1
- package/dist/server/api/askApi.d.ts +41 -0
- package/dist/server/api/askApi.d.ts.map +1 -0
- package/dist/server/api/askApi.js +479 -0
- package/dist/server/api/askApi.js.map +1 -0
- package/dist/server/api/authApi.d.ts +101 -0
- package/dist/server/api/authApi.d.ts.map +1 -0
- package/dist/server/api/authApi.js +1472 -0
- package/dist/server/api/authApi.js.map +1 -0
- package/dist/server/api/authProperty.d.ts +18 -0
- package/dist/server/api/authProperty.d.ts.map +1 -0
- package/dist/server/api/authProperty.js +41 -0
- package/dist/server/api/authProperty.js.map +1 -0
- package/dist/server/api/configApi.d.ts +15 -0
- package/dist/server/api/configApi.d.ts.map +1 -0
- package/dist/server/api/configApi.js +42 -0
- package/dist/server/api/configApi.js.map +1 -0
- package/dist/server/api/databaseApi.d.ts +14 -0
- package/dist/server/api/databaseApi.d.ts.map +1 -0
- package/dist/server/api/databaseApi.js +111 -0
- package/dist/server/api/databaseApi.js.map +1 -0
- package/dist/server/api/directoryApi.d.ts +9 -0
- package/dist/server/api/directoryApi.d.ts.map +1 -0
- package/dist/server/api/directoryApi.js +103 -0
- package/dist/server/api/directoryApi.js.map +1 -0
- package/dist/server/api/generateApi.d.ts +24 -0
- package/dist/server/api/generateApi.d.ts.map +1 -0
- package/dist/server/api/generateApi.js +457 -0
- package/dist/server/api/generateApi.js.map +1 -0
- package/dist/server/api/healthApi.d.ts +9 -0
- package/dist/server/api/healthApi.d.ts.map +1 -0
- package/dist/server/api/healthApi.js +15 -0
- package/dist/server/api/healthApi.js.map +1 -0
- package/dist/server/api/indexApi.d.ts +21 -0
- package/dist/server/api/indexApi.d.ts.map +1 -0
- package/dist/server/api/indexApi.js +61 -0
- package/dist/server/api/indexApi.js.map +1 -0
- package/dist/server/api/logsApi.d.ts +12 -0
- package/dist/server/api/logsApi.d.ts.map +1 -0
- package/dist/server/api/logsApi.js +37 -0
- package/dist/server/api/logsApi.js.map +1 -0
- package/dist/server/api/mcpApi.d.ts +20 -0
- package/dist/server/api/mcpApi.d.ts.map +1 -0
- package/dist/server/api/mcpApi.js +120 -0
- package/dist/server/api/mcpApi.js.map +1 -0
- package/dist/server/api/nameApi.d.ts +21 -0
- package/dist/server/api/nameApi.d.ts.map +1 -0
- package/dist/server/api/nameApi.js +42 -0
- package/dist/server/api/nameApi.js.map +1 -0
- package/dist/server/api/parseApi.d.ts +9 -0
- package/dist/server/api/parseApi.d.ts.map +1 -0
- package/dist/server/api/parseApi.js +3245 -0
- package/dist/server/api/parseApi.js.map +1 -0
- package/dist/server/api/serverApi.d.ts +44 -0
- package/dist/server/api/serverApi.d.ts.map +1 -0
- package/dist/server/api/serverApi.js +417 -0
- package/dist/server/api/serverApi.js.map +1 -0
- package/dist/{dynamic-mcp-executor.d.ts → server/dynamic-mcp-executor.d.ts} +4 -5
- package/dist/server/dynamic-mcp-executor.d.ts.map +1 -0
- package/dist/server/dynamic-mcp-executor.js +62 -0
- package/dist/server/dynamic-mcp-executor.js.map +1 -0
- package/dist/server/port-utils.d.ts +14 -0
- package/dist/server/port-utils.d.ts.map +1 -0
- package/dist/server/port-utils.js +31 -0
- package/dist/server/port-utils.js.map +1 -0
- package/dist/server/server-utils.d.ts +13 -0
- package/dist/server/server-utils.d.ts.map +1 -0
- package/dist/server/server-utils.js +72 -0
- package/dist/server/server-utils.js.map +1 -0
- package/dist/{web → server}/server.d.ts +1 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +535 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/tool-executer.d.ts +101 -0
- package/dist/server/tool-executer.d.ts.map +1 -0
- package/dist/server/tool-executer.js +6198 -0
- package/dist/server/tool-executer.js.map +1 -0
- package/dist/types/index.d.ts +1197 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1028 -0
- package/dist/types/index.js.map +1 -1
- package/dist/upload/upload-utils.d.ts +4 -0
- package/dist/upload/upload-utils.d.ts.map +1 -0
- package/dist/upload/upload-utils.js +29 -0
- package/dist/upload/upload-utils.js.map +1 -0
- package/dist/utils/deployment-util.d.ts +14 -0
- package/dist/utils/deployment-util.d.ts.map +1 -0
- package/dist/utils/deployment-util.js +46 -0
- package/dist/utils/deployment-util.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +56 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +18 -6
- package/quickmcp-direct-stdio.js +176 -187
- package/src/web/public/app.js +15370 -1471
- package/src/web/public/authorization.html +868 -0
- package/src/web/public/database-tables.html +283 -547
- package/src/web/public/how-to-use.html +446 -462
- package/src/web/public/how-to-use.js +4 -4
- package/src/web/public/images/app/activepieces.png +0 -0
- package/src/web/public/images/app/airtable.png +0 -0
- package/src/web/public/images/app/androidstudio.png +0 -0
- package/src/web/public/images/app/antigravity.png +0 -0
- package/src/web/public/images/app/applenotes.png +0 -0
- package/src/web/public/images/app/applereminders.png +0 -0
- package/src/web/public/images/app/asana.png +0 -0
- package/src/web/public/images/app/azureai.png +0 -0
- package/src/web/public/images/app/bash.png +0 -0
- package/src/web/public/images/app/bearnotes.png +0 -0
- package/src/web/public/images/app/bitbucket.png +0 -0
- package/src/web/public/images/app/claude.png +0 -0
- package/src/web/public/images/app/cli.png +0 -0
- package/src/web/public/images/app/clickup.png +0 -0
- package/src/web/public/images/app/cohere.png +0 -0
- package/src/web/public/images/app/confluence.png +0 -0
- package/src/web/public/images/app/confluence2.png +0 -0
- package/src/web/public/images/app/curl.png +0 -0
- package/src/web/public/images/app/curl_mini.png +0 -0
- package/src/web/public/images/app/cursor.png +0 -0
- package/src/web/public/images/app/db2.png +0 -0
- package/src/web/public/images/app/deepseek.png +0 -0
- package/src/web/public/images/app/discord.png +0 -0
- package/src/web/public/images/app/docker.png +0 -0
- package/src/web/public/images/app/dockerhub.png +0 -0
- package/src/web/public/images/app/dropbox.png +0 -0
- package/src/web/public/images/app/elasticsearch.png +0 -0
- package/src/web/public/images/app/facebook.png +0 -0
- package/src/web/public/images/app/falai.png +0 -0
- package/src/web/public/images/app/fireworks.png +0 -0
- package/src/web/public/images/app/gdrive.png +0 -0
- package/src/web/public/images/app/gemini.png +0 -0
- package/src/web/public/images/app/github.png +0 -0
- package/src/web/public/images/app/githubcopilot.png +0 -0
- package/src/web/public/images/app/gitlab.png +0 -0
- package/src/web/public/images/app/gmail.png +0 -0
- package/src/web/public/images/app/googlecalender.png +0 -0
- package/src/web/public/images/app/googledocs.png +0 -0
- package/src/web/public/images/app/googlesheets.png +0 -0
- package/src/web/public/images/app/gradle.png +0 -0
- package/src/web/public/images/app/grafana.png +0 -0
- package/src/web/public/images/app/graphql.png +0 -0
- package/src/web/public/images/app/grok.png +0 -0
- package/src/web/public/images/app/groq.png +0 -0
- package/src/web/public/images/app/hazelcast.png +0 -0
- package/src/web/public/images/app/huggingface.png +0 -0
- package/src/web/public/images/app/imessage.png +0 -0
- package/src/web/public/images/app/instagram.png +0 -0
- package/src/web/public/images/app/intellij.png +0 -0
- package/src/web/public/images/app/jenkins.png +0 -0
- package/src/web/public/images/app/jira.png +0 -0
- package/src/web/public/images/app/kafka.png +0 -0
- package/src/web/public/images/app/kubernetes.png +0 -0
- package/src/web/public/images/app/linear.png +0 -0
- package/src/web/public/images/app/linkedin.png +0 -0
- package/src/web/public/images/app/llama.png +0 -0
- package/src/web/public/images/app/make.png +0 -0
- package/src/web/public/images/app/maven.png +0 -0
- package/src/web/public/images/app/mcp.png +0 -0
- package/src/web/public/images/app/microsoftteams.png +0 -0
- package/src/web/public/images/app/mistral.png +0 -0
- package/src/web/public/images/app/monday.png +0 -0
- package/src/web/public/images/app/mongodb.png +0 -0
- package/src/web/public/images/app/mssql.png +0 -0
- package/src/web/public/images/app/mysql.png +0 -0
- package/src/web/public/images/app/n8n.png +0 -0
- package/src/web/public/images/app/notion.png +0 -0
- package/src/web/public/images/app/npm.png +0 -0
- package/src/web/public/images/app/nuget.png +0 -0
- package/src/web/public/images/app/obsidian.png +0 -0
- package/src/web/public/images/app/openai.png +0 -0
- package/src/web/public/images/app/openrouter.png +0 -0
- package/src/web/public/images/app/opensearch.png +0 -0
- package/src/web/public/images/app/openshift.png +0 -0
- package/src/web/public/images/app/oracle.png +0 -0
- package/src/web/public/images/app/perplexity.png +0 -0
- package/src/web/public/images/app/pipedream.png +0 -0
- package/src/web/public/images/app/postgresql.png +0 -0
- package/src/web/public/images/app/powershell.png +0 -0
- package/src/web/public/images/app/prometheus.png +0 -0
- package/src/web/public/images/app/reddit.png +0 -0
- package/src/web/public/images/app/redis.png +0 -0
- package/src/web/public/images/app/rss.png +0 -0
- package/src/web/public/images/app/signal.png +0 -0
- package/src/web/public/images/app/slack.png +0 -0
- package/src/web/public/images/app/soap.png +0 -0
- package/src/web/public/images/app/sqlite.png +0 -0
- package/src/web/public/images/app/supabase.png +0 -0
- package/src/web/public/images/app/telegram.png +0 -0
- package/src/web/public/images/app/things3.png +0 -0
- package/src/web/public/images/app/threads.png +0 -0
- package/src/web/public/images/app/tiktok.png +0 -0
- package/src/web/public/images/app/together.png +0 -0
- package/src/web/public/images/app/trello.png +0 -0
- package/src/web/public/images/app/vscode.png +0 -0
- package/src/web/public/images/app/webhook.png +0 -0
- package/src/web/public/images/app/webpage.png +0 -0
- package/src/web/public/images/app/whatsappbusiness.png +0 -0
- package/src/web/public/images/app/windsorf.png +0 -0
- package/src/web/public/images/app/x.png +0 -0
- package/src/web/public/images/app/youtube.png +0 -0
- package/src/web/public/images/app/zapier.png +0 -0
- package/src/web/public/images/app/zededitor.png +0 -0
- package/src/web/public/images/app/zoom.png +0 -0
- package/src/web/public/images/avatar-anon.svg +4 -0
- package/src/web/public/images/favicon.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step0.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step1.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step2.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step3.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step4.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step5.png +0 -0
- package/src/web/public/images/readme/1-generate-servers.png +0 -0
- package/src/web/public/images/readme/2-database-connection.png +0 -0
- package/src/web/public/images/readme/2-file-upload.png +0 -0
- package/src/web/public/images/readme/3-data-preview.png +0 -0
- package/src/web/public/images/readme/4-data-preview2.png +0 -0
- package/src/web/public/images/readme/5-server-configuration.png +0 -0
- package/src/web/public/images/readme/6-server-generated-modal.png +0 -0
- package/src/web/public/images/readme/7-generated-servers.png +0 -0
- package/src/web/public/images/readme/8-generated-servers-view-details.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.23.51.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.24.59.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.05.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.14.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.21.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.36.png +0 -0
- package/src/web/public/index.html +4685 -488
- package/src/web/public/landing.html +1638 -0
- package/src/web/public/logger.js +31 -0
- package/src/web/public/login.html +372 -0
- package/src/web/public/manage-servers.html +121 -188
- package/src/web/public/pricing.html +537 -0
- package/src/web/public/quick-ask.html +133 -0
- package/src/web/public/quickmcp-styles.css +708 -0
- package/src/web/public/roles.html +177 -0
- package/src/web/public/shared.js +736 -3
- package/src/web/public/sidebar.js +414 -0
- package/src/web/public/test-servers.html +605 -221
- package/src/web/public/users.html +191 -0
- package/dist/client/MCPClientUnified.d.ts +0 -31
- package/dist/client/MCPClientUnified.d.ts.map +0 -1
- package/dist/client/MCPClientUnified.js +0 -275
- package/dist/client/MCPClientUnified.js.map +0 -1
- package/dist/client/MCPTestRunnerUnified.d.ts +0 -48
- package/dist/client/MCPTestRunnerUnified.d.ts.map +0 -1
- package/dist/client/MCPTestRunnerUnified.js +0 -183
- package/dist/client/MCPTestRunnerUnified.js.map +0 -1
- package/dist/database/json-manager.d.ts +0 -55
- package/dist/database/json-manager.d.ts.map +0 -1
- package/dist/database/json-manager.js +0 -128
- package/dist/database/json-manager.js.map +0 -1
- package/dist/dynamic-mcp-executor.d.ts.map +0 -1
- package/dist/dynamic-mcp-executor.js +0 -274
- package/dist/dynamic-mcp-executor.js.map +0 -1
- package/dist/generators/MCPServerGenerator-new.d.ts +0 -37
- package/dist/generators/MCPServerGenerator-new.d.ts.map +0 -1
- package/dist/generators/MCPServerGenerator-new.js +0 -287
- package/dist/generators/MCPServerGenerator-new.js.map +0 -1
- package/dist/generators/database/sqlite-manager.d.ts +0 -52
- package/dist/generators/database/sqlite-manager.js +0 -143
- package/dist/generators/generators/MCPServerGenerator.d.ts +0 -37
- package/dist/generators/generators/MCPServerGenerator.js +0 -396
- package/dist/integrated-mcp-server.d.ts +0 -25
- package/dist/integrated-mcp-server.d.ts.map +0 -1
- package/dist/integrated-mcp-server.js +0 -541
- package/dist/integrated-mcp-server.js.map +0 -1
- package/dist/mcp-inspector-server.d.ts +0 -3
- package/dist/mcp-inspector-server.d.ts.map +0 -1
- package/dist/mcp-inspector-server.js +0 -119
- package/dist/mcp-inspector-server.js.map +0 -1
- package/dist/mcp-sdk-server.d.ts +0 -3
- package/dist/mcp-sdk-server.d.ts.map +0 -1
- package/dist/mcp-sdk-server.js +0 -90
- package/dist/mcp-sdk-server.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -3
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -300
- package/dist/mcp-server.js.map +0 -1
- package/dist/parsers/parsers/ExcelParser.js +0 -118
- package/dist/quickmcp-unified-bridge.d.ts +0 -13
- package/dist/quickmcp-unified-bridge.d.ts.map +0 -1
- package/dist/quickmcp-unified-bridge.js +0 -176
- package/dist/quickmcp-unified-bridge.js.map +0 -1
- package/dist/sqlite-manager.js +0 -145
- package/dist/test-app.d.ts +0 -2
- package/dist/test-app.d.ts.map +0 -1
- package/dist/test-app.js +0 -119
- package/dist/test-app.js.map +0 -1
- package/dist/transport/base-transport.d.ts +0 -21
- package/dist/transport/base-transport.d.ts.map +0 -1
- package/dist/transport/base-transport.js +0 -16
- package/dist/transport/base-transport.js.map +0 -1
- package/dist/transport/index.d.ts +0 -10
- package/dist/transport/index.d.ts.map +0 -1
- package/dist/transport/index.js +0 -12
- package/dist/transport/index.js.map +0 -1
- package/dist/transport/sse-transport.d.ts +0 -13
- package/dist/transport/sse-transport.d.ts.map +0 -1
- package/dist/transport/sse-transport.js +0 -106
- package/dist/transport/sse-transport.js.map +0 -1
- package/dist/transport/stdio-transport.d.ts +0 -8
- package/dist/transport/stdio-transport.d.ts.map +0 -1
- package/dist/transport/stdio-transport.js +0 -53
- package/dist/transport/stdio-transport.js.map +0 -1
- package/dist/transport/streamable-http-transport.d.ts +0 -15
- package/dist/transport/streamable-http-transport.d.ts.map +0 -1
- package/dist/transport/streamable-http-transport.js +0 -151
- package/dist/transport/streamable-http-transport.js.map +0 -1
- package/dist/web/client/MCPClient.js +0 -348
- package/dist/web/client/MCPTestRunner.js +0 -317
- package/dist/web/database/json-manager.js +0 -124
- package/dist/web/database/sqlite-manager.js +0 -146
- package/dist/web/dynamic-mcp-executor.js +0 -443
- package/dist/web/generators/MCPServerGenerator-new.js +0 -284
- package/dist/web/generators/MCPServerGenerator.js +0 -566
- package/dist/web/integrated-mcp-server-new.js +0 -394
- package/dist/web/parsers/CsvParser.js +0 -144
- package/dist/web/parsers/DatabaseParser.js +0 -637
- package/dist/web/parsers/ExcelParser.js +0 -180
- package/dist/web/parsers/index.js +0 -152
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js +0 -790
- package/dist/web/server.js.map +0 -1
- package/dist/web/types/index.js +0 -2
- package/dist/web/web/server.js +0 -860
- package/src/web/public/modern-styles.css +0 -946
- package/src/web/public/shared-styles.css +0 -2091
- /package/src/web/public/images/{1-claude-quickmcp-stdio.png → readme/1-claude-quickmcp-stdio.png} +0 -0
- /package/src/web/public/images/{2-claude-tools.png → readme/2-claude-tools.png} +0 -0
- /package/src/web/public/images/{3-claude-developer-settings.png → readme/3-claude-developer-settings.png} +0 -0
- /package/src/web/public/images/{4-claude-config.png → readme/4-claude-config.png} +0 -0
- /package/src/web/public/images/{5-claude-config-edit.png → readme/5-claude-config-edit.png} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerUtils = void 0;
|
|
4
|
+
class ServerUtils {
|
|
5
|
+
constructor(dataStore) {
|
|
6
|
+
this.dataStore = dataStore;
|
|
7
|
+
}
|
|
8
|
+
async getAllTools() {
|
|
9
|
+
const tools = await this.dataStore.getAllTools();
|
|
10
|
+
return tools.map((tool) => ({
|
|
11
|
+
name: `${tool.server_id}__${tool.name}`,
|
|
12
|
+
description: `[${tool.server_id}] ${tool.description}`,
|
|
13
|
+
inputSchema: typeof tool.inputSchema === 'string' ? JSON.parse(tool.inputSchema) : tool.inputSchema
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
async getAllResources() {
|
|
17
|
+
const resources = await this.dataStore.getAllResources();
|
|
18
|
+
return resources.map((resource) => ({
|
|
19
|
+
name: `${resource.server_id}__${resource.name}`,
|
|
20
|
+
description: `[${resource.server_id}] ${resource.description}`,
|
|
21
|
+
uri: resource.uri_template
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
async parseQualifiedName(name, kind) {
|
|
25
|
+
const allServerIds = (await this.dataStore.getAllServers()).map((s) => s.id);
|
|
26
|
+
const matchingServerIds = allServerIds
|
|
27
|
+
.filter((serverId) => name.startsWith(`${serverId}__`))
|
|
28
|
+
.sort((a, b) => b.length - a.length);
|
|
29
|
+
if (matchingServerIds.length > 0) {
|
|
30
|
+
const serverId = matchingServerIds[0];
|
|
31
|
+
const itemName = name.slice(serverId.length + 2);
|
|
32
|
+
if (itemName.length === 0) {
|
|
33
|
+
throw new Error(`Invalid ${kind} name format: ${name}`);
|
|
34
|
+
}
|
|
35
|
+
return [serverId, itemName];
|
|
36
|
+
}
|
|
37
|
+
// Backward-compatible fallback: "<serverId>__<name>"
|
|
38
|
+
const sepIndex = name.indexOf('__');
|
|
39
|
+
if (sepIndex <= 0 || sepIndex >= name.length - 2) {
|
|
40
|
+
throw new Error(`Invalid ${kind} name format: ${name}`);
|
|
41
|
+
}
|
|
42
|
+
return [name.slice(0, sepIndex), name.slice(sepIndex + 2)];
|
|
43
|
+
}
|
|
44
|
+
async parseToolName(toolName) {
|
|
45
|
+
return this.parseQualifiedName(toolName, 'tool');
|
|
46
|
+
}
|
|
47
|
+
async getTool(serverId, toolName) {
|
|
48
|
+
const tools = await this.dataStore.getToolsForServer(serverId);
|
|
49
|
+
const tool = tools.find((t) => t.name === toolName);
|
|
50
|
+
if (!tool) {
|
|
51
|
+
throw new Error(`Tool not found: ${serverId}__${toolName}`);
|
|
52
|
+
}
|
|
53
|
+
return tool;
|
|
54
|
+
}
|
|
55
|
+
async getServerConfig(serverId) {
|
|
56
|
+
const serverConfig = await this.dataStore.getServer(serverId);
|
|
57
|
+
if (!serverConfig) {
|
|
58
|
+
throw new Error(`Server not found: ${serverId}`);
|
|
59
|
+
}
|
|
60
|
+
return serverConfig;
|
|
61
|
+
}
|
|
62
|
+
parseQueryConfig(sqlQuery) {
|
|
63
|
+
try {
|
|
64
|
+
return JSON.parse(sqlQuery);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.ServerUtils = ServerUtils;
|
|
72
|
+
//# sourceMappingURL=server-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../../src/server/server-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAqCA,QAAA,MAAM,GAAG,6CAAY,CAAC;AA2gBtB,wBAAgB,WAAW,IAAI,IAAI,CA8BlC;AAED,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.startServer = startServer;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const express_1 = __importDefault(require("express"));
|
|
9
|
+
const cors_1 = __importDefault(require("cors"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const parsers_1 = require("../parsers");
|
|
12
|
+
const MCPServerGenerator_1 = require("../generators/MCPServerGenerator");
|
|
13
|
+
const MCPTestRunner_1 = require("../client/MCPTestRunner");
|
|
14
|
+
const child_process_1 = require("child_process");
|
|
15
|
+
const integrated_mcp_server_new_1 = require("../integrated-mcp-server-new");
|
|
16
|
+
const factory_1 = require("../database/factory");
|
|
17
|
+
const auth_config_1 = require("../config/auth-config");
|
|
18
|
+
const token_utils_1 = require("../auth/token-utils");
|
|
19
|
+
const jwks_provider_1 = require("../auth/jwks-provider");
|
|
20
|
+
const auth_utils_1 = require("../auth/auth-utils");
|
|
21
|
+
const configApi_1 = require("./api/configApi");
|
|
22
|
+
const authApi_1 = require("./api/authApi");
|
|
23
|
+
const healthApi_1 = require("./api/healthApi");
|
|
24
|
+
const directoryApi_1 = require("./api/directoryApi");
|
|
25
|
+
const parseApi_1 = require("./api/parseApi");
|
|
26
|
+
const generateApi_1 = require("./api/generateApi");
|
|
27
|
+
const serverApi_1 = require("./api/serverApi");
|
|
28
|
+
const nameApi_1 = require("./api/nameApi");
|
|
29
|
+
const databaseApi_1 = require("./api/databaseApi");
|
|
30
|
+
const mcpApi_1 = require("./api/mcpApi");
|
|
31
|
+
const indexApi_1 = require("./api/indexApi");
|
|
32
|
+
const logsApi_1 = require("./api/logsApi");
|
|
33
|
+
const askApi_1 = require("./api/askApi");
|
|
34
|
+
const port_utils_1 = require("./port-utils");
|
|
35
|
+
const authProperty_1 = require("./api/authProperty");
|
|
36
|
+
const logger_1 = require("../utils/logger");
|
|
37
|
+
const dynamic_mcp_executor_1 = require("./dynamic-mcp-executor");
|
|
38
|
+
const McpCoreService_1 = require("../mcp-core/McpCoreService");
|
|
39
|
+
const app = (0, express_1.default)();
|
|
40
|
+
app.use(express_1.default.json());
|
|
41
|
+
app.use(express_1.default.urlencoded({ extended: false }));
|
|
42
|
+
// Enforce a single canonical host in production so OAuth token binding
|
|
43
|
+
// and MCP requests use the same origin (www vs non-www drift breaks bearer attach).
|
|
44
|
+
const configuredAppBaseUrl = (process.env.APP_BASE_URL || '').trim();
|
|
45
|
+
let canonicalHost = '';
|
|
46
|
+
let canonicalProto = 'https';
|
|
47
|
+
try {
|
|
48
|
+
if (configuredAppBaseUrl) {
|
|
49
|
+
const u = new URL(configuredAppBaseUrl);
|
|
50
|
+
canonicalHost = u.host.toLowerCase();
|
|
51
|
+
canonicalProto = (u.protocol || 'https:').replace(':', '');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
const ALLOWED_ORIGINS = [
|
|
56
|
+
'https://chatgpt.com',
|
|
57
|
+
'https://chat.openai.com',
|
|
58
|
+
'https://claude.ai',
|
|
59
|
+
...(configuredAppBaseUrl ? [configuredAppBaseUrl.replace(/\/+$/, '')] : [])
|
|
60
|
+
];
|
|
61
|
+
app.use((0, cors_1.default)({
|
|
62
|
+
origin: (origin, callback) => {
|
|
63
|
+
if (!origin)
|
|
64
|
+
return callback(null, true);
|
|
65
|
+
if (ALLOWED_ORIGINS.some(o => origin === o || origin.startsWith(o + '/'))) {
|
|
66
|
+
return callback(null, true);
|
|
67
|
+
}
|
|
68
|
+
return callback(null, false);
|
|
69
|
+
},
|
|
70
|
+
credentials: true,
|
|
71
|
+
allowedHeaders: ['Content-Type', 'Authorization', 'MCP-Protocol-Version', 'x-mcp-token'],
|
|
72
|
+
exposedHeaders: ['WWW-Authenticate'],
|
|
73
|
+
methods: ['GET', 'POST', 'DELETE', 'OPTIONS']
|
|
74
|
+
}));
|
|
75
|
+
app.use((req, res, next) => {
|
|
76
|
+
if (!canonicalHost)
|
|
77
|
+
return next();
|
|
78
|
+
const host = String(req.headers.host || '').toLowerCase();
|
|
79
|
+
const isLocal = host.startsWith('localhost:') || host.startsWith('127.0.0.1:');
|
|
80
|
+
if (!host || isLocal || host === canonicalHost)
|
|
81
|
+
return next();
|
|
82
|
+
const target = `${canonicalProto}://${canonicalHost}${req.originalUrl || req.url}`;
|
|
83
|
+
res.redirect(308, target);
|
|
84
|
+
});
|
|
85
|
+
const dataProvider = (0, factory_1.getDataProvider)();
|
|
86
|
+
const deployMode = String(process.env.DEPLOY_MODE || 'ONPREM').trim().toUpperCase();
|
|
87
|
+
const authMode = (0, auth_config_1.resolveAuthMode)();
|
|
88
|
+
const authCookieSecret = (0, auth_config_1.getAuthCookieSecret)();
|
|
89
|
+
const authDefaultUsername = (0, auth_config_1.getAuthDefaultUsername)();
|
|
90
|
+
const authAdminUsers = (0, auth_config_1.parseAuthAdminUsers)();
|
|
91
|
+
const authAccessTtlSec = (0, auth_config_1.getAuthAccessTtlSeconds)();
|
|
92
|
+
const authRefreshTtlSec = (0, auth_config_1.getAuthRefreshTtlSeconds)();
|
|
93
|
+
const authProperty = (0, authProperty_1.getAuthProperty)(process.env);
|
|
94
|
+
(0, auth_config_1.validateAuthDataProviderCompatibility)(dataProvider, authMode);
|
|
95
|
+
const cookieSecure = (0, token_utils_1.isSecureCookieEnv)(process.env.NODE_ENV);
|
|
96
|
+
const accessCookieName = token_utils_1.AUTH_COOKIE_NAMES.access;
|
|
97
|
+
const refreshCookieName = token_utils_1.AUTH_COOKIE_NAMES.refresh;
|
|
98
|
+
const parser = new parsers_1.DataSourceParser();
|
|
99
|
+
// Lazily initialize heavy/native-backed services to avoid startup failure
|
|
100
|
+
let generator = null;
|
|
101
|
+
let dataStore = null;
|
|
102
|
+
const testRunner = new MCPTestRunner_1.MCPTestRunner();
|
|
103
|
+
// Store generated servers in memory (in production, use a database)
|
|
104
|
+
const generatedServers = new Map();
|
|
105
|
+
function ensureGenerator() {
|
|
106
|
+
if (!generator) {
|
|
107
|
+
generator = new MCPServerGenerator_1.MCPServerGenerator();
|
|
108
|
+
}
|
|
109
|
+
return generator;
|
|
110
|
+
}
|
|
111
|
+
function ensureDataStore() {
|
|
112
|
+
if (!dataStore) {
|
|
113
|
+
dataStore = (0, factory_1.createDataStore)();
|
|
114
|
+
}
|
|
115
|
+
return dataStore;
|
|
116
|
+
}
|
|
117
|
+
const authUtils = new auth_utils_1.AuthUtils({
|
|
118
|
+
authMode,
|
|
119
|
+
authDefaultUsername,
|
|
120
|
+
authCookieSecret,
|
|
121
|
+
authAccessTtlSec,
|
|
122
|
+
authRefreshTtlSec,
|
|
123
|
+
accessCookieName,
|
|
124
|
+
refreshCookieName,
|
|
125
|
+
authAdminUsers,
|
|
126
|
+
cookieSecure,
|
|
127
|
+
ensureDataStore
|
|
128
|
+
});
|
|
129
|
+
const normalizeUsername = authUtils.normalizeUsername.bind(authUtils);
|
|
130
|
+
const hashPassword = authUtils.hashPassword.bind(authUtils);
|
|
131
|
+
const verifyPassword = authUtils.verifyPassword.bind(authUtils);
|
|
132
|
+
const createMcpToken = authUtils.createMcpToken.bind(authUtils);
|
|
133
|
+
const getUserRole = authUtils.getUserRole.bind(authUtils);
|
|
134
|
+
const parseCookies = authUtils.parseCookies.bind(authUtils);
|
|
135
|
+
const setCookie = authUtils.setCookie.bind(authUtils);
|
|
136
|
+
const clearCookie = authUtils.clearCookie.bind(authUtils);
|
|
137
|
+
const seedLiteAdminsAsync = authUtils.seedLiteAdminsAsync.bind(authUtils);
|
|
138
|
+
const getEffectiveUsername = authUtils.getEffectiveUsername.bind(authUtils);
|
|
139
|
+
const publicDir = authUtils.resolvePublicDir(__dirname);
|
|
140
|
+
const applyNoneModeAuth = authUtils.applyNoneModeAuth.bind(authUtils);
|
|
141
|
+
const isNoneMode = authUtils.isNoneMode.bind(authUtils);
|
|
142
|
+
const buildServerId = authUtils.buildServerId.bind(authUtils);
|
|
143
|
+
const isPublicPath = authUtils.isPublicPath.bind(authUtils);
|
|
144
|
+
const getAuthenticatedUser = authUtils.getAuthenticatedUser.bind(authUtils);
|
|
145
|
+
const resolveAuthContext = authUtils.resolveAuthContextAsync.bind(authUtils);
|
|
146
|
+
const requireAdminApi = authUtils.requireAdminApiAsync.bind(authUtils);
|
|
147
|
+
const applyAuthenticatedRequestContextAsync = authUtils.applyAuthenticatedRequestContextAsync.bind(authUtils);
|
|
148
|
+
const healthApi = new healthApi_1.HealthApi();
|
|
149
|
+
const directoryApi = new directoryApi_1.DirectoryApi();
|
|
150
|
+
const parseApi = new parseApi_1.ParseApi(parser);
|
|
151
|
+
const generateApi = new generateApi_1.GenerateApi({
|
|
152
|
+
parser,
|
|
153
|
+
ensureGenerator,
|
|
154
|
+
ensureDataStore,
|
|
155
|
+
getEffectiveUsername,
|
|
156
|
+
buildServerId
|
|
157
|
+
});
|
|
158
|
+
const serverApi = new serverApi_1.ServerApi({
|
|
159
|
+
ensureGenerator,
|
|
160
|
+
ensureDataStore,
|
|
161
|
+
getEffectiveUsername,
|
|
162
|
+
generatedServers,
|
|
163
|
+
startRuntimeMCPServer,
|
|
164
|
+
publicDir
|
|
165
|
+
});
|
|
166
|
+
const nameApi = new nameApi_1.NameApi({
|
|
167
|
+
ensureDataStore,
|
|
168
|
+
getEffectiveUsername
|
|
169
|
+
});
|
|
170
|
+
const databaseApi = new databaseApi_1.DatabaseApi({ publicDir });
|
|
171
|
+
const mcpApi = new mcpApi_1.McpApi({ generatedServers });
|
|
172
|
+
const indexApi = new indexApi_1.IndexApi({
|
|
173
|
+
publicDir,
|
|
174
|
+
authMode,
|
|
175
|
+
resolveAuthContext
|
|
176
|
+
});
|
|
177
|
+
const authApi = new authApi_1.AuthApi({
|
|
178
|
+
deployMode,
|
|
179
|
+
authMode,
|
|
180
|
+
authAdminUsers,
|
|
181
|
+
authCookieSecret,
|
|
182
|
+
authAccessTtlSec,
|
|
183
|
+
authRefreshTtlSec,
|
|
184
|
+
accessCookieName,
|
|
185
|
+
refreshCookieName,
|
|
186
|
+
publicDir,
|
|
187
|
+
resolveAuthContext,
|
|
188
|
+
requireAdminApi,
|
|
189
|
+
ensureDataStore,
|
|
190
|
+
normalizeUsername,
|
|
191
|
+
createMcpToken,
|
|
192
|
+
hashPassword,
|
|
193
|
+
verifyPassword,
|
|
194
|
+
getUserRole,
|
|
195
|
+
parseCookies,
|
|
196
|
+
setCookie,
|
|
197
|
+
clearCookie,
|
|
198
|
+
getAuthenticatedUser,
|
|
199
|
+
getAuthProperty: () => authProperty
|
|
200
|
+
});
|
|
201
|
+
const logsApi = new logsApi_1.LogsApi(ensureDataStore());
|
|
202
|
+
const askApi = new askApi_1.AskApi({
|
|
203
|
+
ensureDataStore,
|
|
204
|
+
resolveAuthContext,
|
|
205
|
+
deployMode
|
|
206
|
+
});
|
|
207
|
+
const portUtils = new port_utils_1.PortUtils(process.env);
|
|
208
|
+
const { port: PORT, mcpPort: MCP_PORT } = portUtils.resolveServerPorts();
|
|
209
|
+
const configApi = new configApi_1.ConfigApi(authMode, authProperty.providerUrl, MCP_PORT);
|
|
210
|
+
const mcpCore = new McpCoreService_1.McpCoreService({
|
|
211
|
+
executor: new dynamic_mcp_executor_1.DynamicMCPExecutor(),
|
|
212
|
+
authStore: ensureDataStore(),
|
|
213
|
+
authMode,
|
|
214
|
+
deployMode,
|
|
215
|
+
tokenSecret: process.env.QUICKMCP_TOKEN_SECRET || process.env.AUTH_COOKIE_SECRET || 'change-me',
|
|
216
|
+
defaultToken: (process.env.QUICKMCP_TOKEN || '').trim(),
|
|
217
|
+
rsaPublicKey: (0, jwks_provider_1.getRsaPublicKey)()
|
|
218
|
+
});
|
|
219
|
+
function parseCookieHeader(raw) {
|
|
220
|
+
if (!raw)
|
|
221
|
+
return {};
|
|
222
|
+
return raw.split(';').reduce((acc, part) => {
|
|
223
|
+
const [name, ...rest] = part.trim().split('=');
|
|
224
|
+
if (!name)
|
|
225
|
+
return acc;
|
|
226
|
+
acc[name] = decodeURIComponent(rest.join('=') || '');
|
|
227
|
+
return acc;
|
|
228
|
+
}, {});
|
|
229
|
+
}
|
|
230
|
+
function truncateForLog(input, maxLen = 4000) {
|
|
231
|
+
if (input.length <= maxLen)
|
|
232
|
+
return input;
|
|
233
|
+
return `${input.slice(0, maxLen)}...[truncated:${input.length - maxLen}]`;
|
|
234
|
+
}
|
|
235
|
+
function safeStringifyForLog(value) {
|
|
236
|
+
try {
|
|
237
|
+
return truncateForLog(JSON.stringify(value));
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return String(value);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function buildCookieFallbackAuthContext(req) {
|
|
244
|
+
const cookies = parseCookieHeader(String(req.headers.cookie || ''));
|
|
245
|
+
const access = String(cookies[token_utils_1.AUTH_COOKIE_NAMES.access] || '').trim();
|
|
246
|
+
if (!access)
|
|
247
|
+
return null;
|
|
248
|
+
const payload = (0, token_utils_1.verifyAccessToken)(access, authCookieSecret);
|
|
249
|
+
if (!payload?.sub)
|
|
250
|
+
return null;
|
|
251
|
+
const username = String(payload.sub);
|
|
252
|
+
const workspace = String(payload.ws || payload.sub);
|
|
253
|
+
const role = String(payload.role || 'user');
|
|
254
|
+
return {
|
|
255
|
+
identity: {
|
|
256
|
+
tokenId: 'cookie-session',
|
|
257
|
+
username,
|
|
258
|
+
workspace,
|
|
259
|
+
role
|
|
260
|
+
},
|
|
261
|
+
tokenRecord: {
|
|
262
|
+
id: 'cookie-session',
|
|
263
|
+
tokenName: 'cookie-session',
|
|
264
|
+
workspaceId: workspace,
|
|
265
|
+
subjectUsername: username,
|
|
266
|
+
allowAllServers: true,
|
|
267
|
+
allowAllTools: true,
|
|
268
|
+
allowAllResources: true,
|
|
269
|
+
serverIds: [],
|
|
270
|
+
allowedTools: [],
|
|
271
|
+
allowedResources: [],
|
|
272
|
+
serverRules: {},
|
|
273
|
+
toolRules: {},
|
|
274
|
+
resourceRules: {},
|
|
275
|
+
neverExpires: true,
|
|
276
|
+
expiresAt: null,
|
|
277
|
+
revokedAt: null
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
async function resolveMcpAuthContext(req) {
|
|
282
|
+
logger_1.logger.info(`[MCP] transport host=${String(req.headers.host || '')} ua=${String(req.headers['user-agent'] || '').slice(0, 80)} cookie=${req.headers.cookie ? '1' : '0'}`);
|
|
283
|
+
const mcpAuth = await mcpCore.resolveAuthContextFromSources({
|
|
284
|
+
authorization: String(req.headers.authorization || ''),
|
|
285
|
+
xMcpToken: String(req.headers['x-mcp-token'] || ''),
|
|
286
|
+
queryToken: String(req.query.token || req.query.access_token || ''),
|
|
287
|
+
bodyToken: String(req.body?.token || req.body?.access_token || req.body?.params?.access_token || '')
|
|
288
|
+
});
|
|
289
|
+
if (mcpAuth.identity)
|
|
290
|
+
return mcpAuth;
|
|
291
|
+
if (authMode === 'NONE')
|
|
292
|
+
return mcpAuth;
|
|
293
|
+
const cookieFallback = buildCookieFallbackAuthContext(req);
|
|
294
|
+
return cookieFallback || mcpAuth;
|
|
295
|
+
}
|
|
296
|
+
function buildMcpWwwAuthenticate(req) {
|
|
297
|
+
const configuredBase = String(authProperty.appBaseUrl || '').trim().replace(/\/+$/, '');
|
|
298
|
+
const host = String(req.headers.host || '').trim();
|
|
299
|
+
const proto = String(req.headers['x-forwarded-proto'] || req.protocol || 'https').split(',')[0].trim();
|
|
300
|
+
const runtimeBase = host ? `${proto}://${host}` : '';
|
|
301
|
+
const base = configuredBase || runtimeBase;
|
|
302
|
+
const normalizedBase = base.replace(/\/+$/, '');
|
|
303
|
+
const metadataUrl = `${normalizedBase}/mcp/.well-known/oauth-protected-resource`;
|
|
304
|
+
const resource = `${normalizedBase}/mcp`;
|
|
305
|
+
return `Bearer resource_metadata="${metadataUrl}", resource="${resource}", scope="mcp", error="insufficient_scope", error_description="You need to login to continue"`;
|
|
306
|
+
}
|
|
307
|
+
function sendMcpAuthRequired(res, id, challenge, text) {
|
|
308
|
+
logger_1.logger.info(`[MCP] auth challenge jsonrpc_id=${String(id)} www-authenticate=${challenge}`);
|
|
309
|
+
res.setHeader('WWW-Authenticate', challenge);
|
|
310
|
+
res.status(401).json({
|
|
311
|
+
jsonrpc: '2.0',
|
|
312
|
+
id,
|
|
313
|
+
result: {
|
|
314
|
+
content: [{ type: 'text', text }],
|
|
315
|
+
_meta: { 'mcp/www_authenticate': [challenge] },
|
|
316
|
+
isError: true
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
function isMcpAuthError(error) {
|
|
321
|
+
if (!(error instanceof Error))
|
|
322
|
+
return false;
|
|
323
|
+
const msg = String(error.message || '').toLowerCase();
|
|
324
|
+
return msg.includes('unauthorized')
|
|
325
|
+
|| msg.includes('invalid mcp token')
|
|
326
|
+
|| msg.includes('bearer token required')
|
|
327
|
+
|| msg.includes('insufficient_scope');
|
|
328
|
+
}
|
|
329
|
+
async function handleMcpJsonRpc(req, res) {
|
|
330
|
+
try {
|
|
331
|
+
const bodyPreview = Buffer.isBuffer(req.body)
|
|
332
|
+
? truncateForLog(req.body.toString('utf8'))
|
|
333
|
+
: safeStringifyForLog(req.body);
|
|
334
|
+
logger_1.logger.info(`[MCP] debug headers=${safeStringifyForLog(req.headers)}`);
|
|
335
|
+
logger_1.logger.info(`[MCP] debug body=${bodyPreview}`);
|
|
336
|
+
// Detect empty probe (no JSON-RPC body — typically Python aiohttp after OAuth)
|
|
337
|
+
const isEmptyProbe = !req.body
|
|
338
|
+
|| (typeof req.body === 'object' && !Buffer.isBuffer(req.body) && Object.keys(req.body).length === 0);
|
|
339
|
+
if (isEmptyProbe && authMode !== 'NONE') {
|
|
340
|
+
const challenge = buildMcpWwwAuthenticate(req);
|
|
341
|
+
const authContext = await resolveMcpAuthContext(req);
|
|
342
|
+
if (!authContext.identity) {
|
|
343
|
+
logger_1.logger.info(`[MCP] probe: no token → 401 challenge www-authenticate=${challenge}`);
|
|
344
|
+
res.setHeader('WWW-Authenticate', challenge);
|
|
345
|
+
res.status(401).end();
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
logger_1.logger.info(`[MCP] probe: authenticated user=${authContext.identity.username}`);
|
|
349
|
+
res.status(200).json({ status: 'ok' });
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const message = mcpCore.parseIncomingMessage(req.body);
|
|
353
|
+
const authContext = await resolveMcpAuthContext(req);
|
|
354
|
+
const method = String(message?.method || '');
|
|
355
|
+
const protectedMethods = new Set([
|
|
356
|
+
'tools/call',
|
|
357
|
+
'resources/read',
|
|
358
|
+
'prompts/get'
|
|
359
|
+
]);
|
|
360
|
+
if (authMode !== 'NONE' && !authContext.identity && protectedMethods.has(method)) {
|
|
361
|
+
const challenge = buildMcpWwwAuthenticate(req);
|
|
362
|
+
sendMcpAuthRequired(res, message?.id ?? null, challenge, 'Authentication required: no access token provided.');
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
let response = null;
|
|
366
|
+
try {
|
|
367
|
+
response = await mcpCore.processJsonRpcMessage(message, authContext);
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
if (authMode !== 'NONE' && isMcpAuthError(error)) {
|
|
371
|
+
const challenge = buildMcpWwwAuthenticate(req);
|
|
372
|
+
sendMcpAuthRequired(res, message?.id ?? null, challenge, 'Authentication required: no access token provided.');
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
throw error;
|
|
376
|
+
}
|
|
377
|
+
if (!response) {
|
|
378
|
+
res.status(204).end();
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
const protocolVersion = String(message?.params?.protocolVersion || '2025-11-25');
|
|
382
|
+
res.setHeader('mcp-protocol-version', protocolVersion);
|
|
383
|
+
res.setHeader('x-quickmcp-random-no', (0, node_crypto_1.randomUUID)());
|
|
384
|
+
res.json(response);
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
logger_1.logger.error('[MCP] /mcp request failed', error);
|
|
388
|
+
res.status(500).json({
|
|
389
|
+
jsonrpc: '2.0',
|
|
390
|
+
id: req.body?.id ?? null,
|
|
391
|
+
error: {
|
|
392
|
+
code: -32603,
|
|
393
|
+
message: `Internal error: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
async function authMiddleware(req, res, next) {
|
|
399
|
+
if (isNoneMode()) {
|
|
400
|
+
applyNoneModeAuth(req);
|
|
401
|
+
next();
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
if (isPublicPath(req.path)) {
|
|
405
|
+
next();
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
if (!await applyAuthenticatedRequestContextAsync(req, res)) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
next();
|
|
412
|
+
}
|
|
413
|
+
function startRuntimeMCPServer(serverId, serverPath) {
|
|
414
|
+
return new Promise((resolve, reject) => {
|
|
415
|
+
const serverInfo = generatedServers.get(serverId);
|
|
416
|
+
if (!serverInfo) {
|
|
417
|
+
reject(new Error('Server not found'));
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
// Kill existing process if running
|
|
421
|
+
if (serverInfo.runtimeProcess) {
|
|
422
|
+
serverInfo.runtimeProcess.kill();
|
|
423
|
+
}
|
|
424
|
+
const port = portUtils.getNextPort();
|
|
425
|
+
const serverDir = path_1.default.dirname(serverPath);
|
|
426
|
+
//console.log(`Starting runtime MCP server for ${serverId} on port ${port}`);
|
|
427
|
+
// Fork the MCP server process
|
|
428
|
+
const mcpProcess = (0, child_process_1.fork)(serverPath, [], {
|
|
429
|
+
cwd: serverDir,
|
|
430
|
+
env: {
|
|
431
|
+
...process.env,
|
|
432
|
+
MCP_PORT: port.toString()
|
|
433
|
+
},
|
|
434
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc']
|
|
435
|
+
});
|
|
436
|
+
mcpProcess.on('message', (message) => {
|
|
437
|
+
if (message === 'ready') {
|
|
438
|
+
//console.log(`MCP Server ${serverId} ready on port ${port}`);
|
|
439
|
+
resolve(port);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
mcpProcess.on('error', (error) => {
|
|
443
|
+
logger_1.logger.error(`MCP Server ${serverId} error:`, error);
|
|
444
|
+
reject(error);
|
|
445
|
+
});
|
|
446
|
+
mcpProcess.on('exit', (code) => {
|
|
447
|
+
//console.log(`MCP Server ${serverId} exited with code ${code}`);
|
|
448
|
+
if (serverInfo.runtimeProcess === mcpProcess) {
|
|
449
|
+
serverInfo.runtimeProcess = undefined;
|
|
450
|
+
serverInfo.runtimePort = undefined;
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
// Update server info
|
|
454
|
+
serverInfo.runtimeProcess = mcpProcess;
|
|
455
|
+
serverInfo.runtimePort = port;
|
|
456
|
+
// Fallback timeout
|
|
457
|
+
setTimeout(() => {
|
|
458
|
+
if (serverInfo.runtimePort === port) {
|
|
459
|
+
resolve(port);
|
|
460
|
+
}
|
|
461
|
+
}, 3000);
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
seedLiteAdminsAsync().catch((error) => {
|
|
465
|
+
logger_1.logger.error('Failed to seed admin users:', error);
|
|
466
|
+
});
|
|
467
|
+
app.use((req, res, next) => {
|
|
468
|
+
authMiddleware(req, res, next).catch(next);
|
|
469
|
+
});
|
|
470
|
+
app.use(express_1.default.static(publicDir, { index: false }));
|
|
471
|
+
configApi.registerRoutes(app);
|
|
472
|
+
healthApi.registerRoutes(app);
|
|
473
|
+
directoryApi.registerRoutes(app);
|
|
474
|
+
parseApi.registerRoutes(app);
|
|
475
|
+
generateApi.registerRoutes(app);
|
|
476
|
+
serverApi.registerRoutes(app);
|
|
477
|
+
nameApi.registerRoutes(app);
|
|
478
|
+
databaseApi.registerRoutes(app);
|
|
479
|
+
mcpApi.registerRoutes(app);
|
|
480
|
+
authApi.registerRoutes(app);
|
|
481
|
+
logsApi.registerRoutes(app);
|
|
482
|
+
askApi.registerRoutes(app);
|
|
483
|
+
// Serverless/Vercel path: expose integrated MCP HTTP transport directly on the main app.
|
|
484
|
+
app.get('/mcp', (req, res) => {
|
|
485
|
+
if (authMode !== 'NONE') {
|
|
486
|
+
const challenge = buildMcpWwwAuthenticate(req);
|
|
487
|
+
res.setHeader('WWW-Authenticate', challenge);
|
|
488
|
+
res.status(401).end();
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
res.status(200).json({ ok: true, transport: 'streamable-http', endpoint: '/mcp' });
|
|
492
|
+
});
|
|
493
|
+
app.post('/mcp', (req, res) => {
|
|
494
|
+
handleMcpJsonRpc(req, res).catch((error) => {
|
|
495
|
+
logger_1.logger.error('[MCP] /mcp unhandled error', error);
|
|
496
|
+
res.status(500).json({ error: 'Internal error' });
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
app.delete('/mcp', (_req, res) => {
|
|
500
|
+
res.status(204).end();
|
|
501
|
+
});
|
|
502
|
+
indexApi.registerRoutes(app);
|
|
503
|
+
function startServer() {
|
|
504
|
+
console.log('[quickmcp] startup config');
|
|
505
|
+
console.log(`[quickmcp] DEPLOY_MODE=${process.env.DEPLOY_MODE || '(unset)'}`);
|
|
506
|
+
console.log(`[quickmcp] AUTH_MODE=${authMode}`);
|
|
507
|
+
console.log(`[quickmcp] DATA_PROVIDER=${dataProvider}`);
|
|
508
|
+
if (authMode === 'SUPABASE_GOOGLE') {
|
|
509
|
+
console.log(`[quickmcp] SUPABASE_URL=${authProperty.providerUrl || '(unset)'}`);
|
|
510
|
+
console.log(`[quickmcp] SUPABASE_ANON_KEY=${authProperty.publicKey ? '(set)' : '(unset)'}`);
|
|
511
|
+
console.log(`[quickmcp] APP_BASE_URL=${authProperty.appBaseUrl}`);
|
|
512
|
+
}
|
|
513
|
+
console.log(`[quickmcp] PORT=${PORT}`);
|
|
514
|
+
console.log(`[quickmcp] MCP_PORT=${MCP_PORT}`);
|
|
515
|
+
// Initialize integrated MCP server (optional in environments without native deps)
|
|
516
|
+
let integratedMCPServer = null;
|
|
517
|
+
try {
|
|
518
|
+
integratedMCPServer = new integrated_mcp_server_new_1.IntegratedMCPServer();
|
|
519
|
+
}
|
|
520
|
+
catch (error) {
|
|
521
|
+
logger_1.logger.error('⚠️ Skipping IntegratedMCPServer initialization:', error instanceof Error ? error.message : error);
|
|
522
|
+
}
|
|
523
|
+
app.listen(PORT, async () => {
|
|
524
|
+
if (integratedMCPServer) {
|
|
525
|
+
try {
|
|
526
|
+
await integratedMCPServer.start(MCP_PORT);
|
|
527
|
+
}
|
|
528
|
+
catch (error) {
|
|
529
|
+
logger_1.logger.error('❌ Failed to start integrated MCP server:', error);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
exports.default = app;
|
|
535
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|