@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
package/quickmcp-direct-stdio.js
CHANGED
|
@@ -4,11 +4,63 @@ const path = require('path');
|
|
|
4
4
|
const fs = require('fs');
|
|
5
5
|
const os = require('os');
|
|
6
6
|
const net = require('net');
|
|
7
|
+
const dotenv = require('dotenv');
|
|
8
|
+
|
|
9
|
+
// Load .env from script directory first (works with Claude Desktop custom CWD),
|
|
10
|
+
// then fallback to process CWD.
|
|
11
|
+
dotenv.config({ path: path.join(__dirname, '.env') });
|
|
12
|
+
dotenv.config();
|
|
13
|
+
|
|
14
|
+
let logger;
|
|
15
|
+
try {
|
|
16
|
+
({ logger } = require('./dist/utils/logger.js'));
|
|
17
|
+
} catch (_) {
|
|
18
|
+
logger = {
|
|
19
|
+
trace: (...args) => console.error(...args),
|
|
20
|
+
debug: (...args) => console.error(...args),
|
|
21
|
+
info: (...args) => console.error(...args),
|
|
22
|
+
warn: (...args) => console.error(...args),
|
|
23
|
+
error: (...args) => console.error(...args)
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Secure default for direct-stdio: if caller does not provide auth/deploy mode,
|
|
28
|
+
// enforce ONPREM semantics (AUTH_MODE=LITE) so MCP token checks are active.
|
|
29
|
+
if (!process.env.AUTH_MODE && !process.env.DEPLOY_MODE) {
|
|
30
|
+
process.env.DEPLOY_MODE = 'ONPREM';
|
|
31
|
+
logger.error('[QuickMCP] AUTH_MODE/DEPLOY_MODE not provided, defaulting DEPLOY_MODE=ONPREM (AUTH_MODE=LITE)');
|
|
32
|
+
}
|
|
7
33
|
|
|
8
34
|
// Use the current working directory provided by the caller.
|
|
9
35
|
// Do not change directories; keep paths relative to this script.
|
|
10
36
|
|
|
11
|
-
|
|
37
|
+
let safeCreateDataStore;
|
|
38
|
+
try {
|
|
39
|
+
({ safeCreateDataStore } = require('./dist/database/database-utils.js'));
|
|
40
|
+
} catch (_) {
|
|
41
|
+
throw new Error('[QuickMCP] Missing dist/database/database-utils.js. Run `npm run build` before starting quickmcp-direct-stdio.js');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let resolveAuthMode;
|
|
45
|
+
try {
|
|
46
|
+
({ resolveAuthMode } = require('./dist/config/auth-config.js'));
|
|
47
|
+
} catch (_) {
|
|
48
|
+
throw new Error('[QuickMCP] Missing dist/config/auth-config.js. Run `npm run build` before starting quickmcp-direct-stdio.js');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let DynamicMCPExecutor;
|
|
52
|
+
try {
|
|
53
|
+
({ DynamicMCPExecutor } = require('./dist/server/dynamic-mcp-executor.js'));
|
|
54
|
+
} catch (_) {
|
|
55
|
+
throw new Error('[QuickMCP] Missing dist/server/dynamic-mcp-executor.js. Run `npm run build` before starting quickmcp-direct-stdio.js');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let McpCoreService;
|
|
59
|
+
try {
|
|
60
|
+
({ McpCoreService } = require('./dist/mcp-core/McpCoreService.js'));
|
|
61
|
+
} catch (_) {
|
|
62
|
+
throw new Error('[QuickMCP] Missing dist/mcp-core/McpCoreService.js. Run `npm run build` before starting quickmcp-direct-stdio.js');
|
|
63
|
+
}
|
|
12
64
|
|
|
13
65
|
// Parse CLI flags for convenience
|
|
14
66
|
// Supported flags:
|
|
@@ -36,14 +88,44 @@ if (dataDirArg) {
|
|
|
36
88
|
if (val) process.env.QUICKMCP_DATA_DIR = val;
|
|
37
89
|
}
|
|
38
90
|
|
|
39
|
-
|
|
40
|
-
const
|
|
91
|
+
const dataStore = safeCreateDataStore({ logger: (...args) => logger.error(...args) });
|
|
92
|
+
const executor = new DynamicMCPExecutor();
|
|
93
|
+
|
|
94
|
+
const mcpAuthMode = resolveAuthMode();
|
|
95
|
+
const mcpTokenSecret = process.env.QUICKMCP_TOKEN_SECRET || process.env.AUTH_COOKIE_SECRET || 'change-me';
|
|
96
|
+
const mcpToken = (process.env.QUICKMCP_TOKEN || '').trim();
|
|
97
|
+
let startupAuthError = null;
|
|
98
|
+
let mcpCore;
|
|
99
|
+
try {
|
|
100
|
+
mcpCore = new McpCoreService({
|
|
101
|
+
executor,
|
|
102
|
+
authStore: dataStore,
|
|
103
|
+
authMode: mcpAuthMode,
|
|
104
|
+
tokenSecret: mcpTokenSecret,
|
|
105
|
+
defaultToken: mcpToken
|
|
106
|
+
});
|
|
107
|
+
} catch (error) {
|
|
108
|
+
startupAuthError = error && error.message ? String(error.message) : 'Invalid MCP token';
|
|
109
|
+
mcpCore = new McpCoreService({
|
|
110
|
+
executor,
|
|
111
|
+
authStore: dataStore,
|
|
112
|
+
authMode: mcpAuthMode,
|
|
113
|
+
tokenSecret: mcpTokenSecret,
|
|
114
|
+
defaultToken: ''
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
logger.error(`[QuickMCP] MCP auth mode: ${mcpAuthMode}`);
|
|
119
|
+
logger.error(`[QuickMCP] MCP token present: ${mcpToken ? 'yes' : 'no'}`);
|
|
120
|
+
if (startupAuthError) {
|
|
121
|
+
logger.error('[QuickMCP] Provided MCP token is invalid/revoked/expired for current workspace.');
|
|
122
|
+
}
|
|
41
123
|
|
|
42
124
|
// Optionally start the Web UI (Express) like `npm run dev`
|
|
43
125
|
// Enable by setting QUICKMCP_ENABLE_WEB=1 (and optionally PORT, QUICKMCP_DATA_DIR)
|
|
44
126
|
if (process.env.QUICKMCP_ENABLE_WEB === '1') {
|
|
45
127
|
try {
|
|
46
|
-
|
|
128
|
+
logger.error('[QuickMCP] QUICKMCP_ENABLE_WEB=1 -> starting Web UI server...');
|
|
47
129
|
// Ensure we run from a writable directory when invoked via npx (CWD may be '/')
|
|
48
130
|
const canWrite = (dir) => {
|
|
49
131
|
try { fs.accessSync(dir, fs.constants.W_OK); return true; } catch { return false; }
|
|
@@ -53,7 +135,10 @@ if (process.env.QUICKMCP_ENABLE_WEB === '1') {
|
|
|
53
135
|
const home = os.homedir() || os.tmpdir();
|
|
54
136
|
runDir = path.join(home, '.quickmcp');
|
|
55
137
|
try { fs.mkdirSync(runDir, { recursive: true }); } catch {}
|
|
56
|
-
|
|
138
|
+
// NOTE: Disabled intentionally.
|
|
139
|
+
// Do not change process CWD here; changing CWD causes SQLite/database path drift
|
|
140
|
+
// between different launch modes (dev, npx, stdio).
|
|
141
|
+
// try { process.chdir(runDir); } catch {}
|
|
57
142
|
}
|
|
58
143
|
// Prepare uploads directory and expose as env for newer builds
|
|
59
144
|
const uploadsDir = path.join(runDir, 'uploads');
|
|
@@ -74,39 +159,39 @@ if (process.env.QUICKMCP_ENABLE_WEB === '1') {
|
|
|
74
159
|
process.once('SIGTERM', () => { cleanup(); process.exit(0); });
|
|
75
160
|
} catch (e) {
|
|
76
161
|
if (e && e.code !== 'EEXIST') {
|
|
77
|
-
|
|
162
|
+
logger.error('[QuickMCP] UI lock error (continuing without UI):', e.message || e);
|
|
78
163
|
}
|
|
79
164
|
// Another process holds the UI lock; skip starting UI in this process
|
|
80
165
|
}
|
|
81
166
|
|
|
82
167
|
if (!hasLock) {
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// For other errors, still try starting server; better to attempt than silently skip for unknown cases
|
|
95
|
-
safeStartWebServer();
|
|
96
|
-
});
|
|
97
|
-
probe.once('listening', () => {
|
|
98
|
-
probe.close(() => {
|
|
168
|
+
logger.error('[QuickMCP] UI lock held by another process; skipping Web UI in this process');
|
|
169
|
+
} else {
|
|
170
|
+
// Only start Web UI if preferred port is actually free.
|
|
171
|
+
const probe = net.createServer();
|
|
172
|
+
probe.once('error', (err) => {
|
|
173
|
+
if (err && (err.code === 'EADDRINUSE' || err.code === 'EACCES')) {
|
|
174
|
+
// Port is busy or not permitted; skip starting Web UI to avoid crashing Claude session
|
|
175
|
+
try { fs.unlinkSync(lockPath); } catch {}
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// For other errors, still try starting server; better to attempt than silently skip for unknown cases
|
|
99
179
|
safeStartWebServer();
|
|
100
180
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
181
|
+
probe.once('listening', () => {
|
|
182
|
+
probe.close(() => {
|
|
183
|
+
safeStartWebServer();
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
try {
|
|
187
|
+
// Probe on IPv6 unspecified to mirror Express default, falling back to IPv4 if needed
|
|
188
|
+
probe.listen(preferredPort, '::');
|
|
189
|
+
} catch (_e) {
|
|
190
|
+
// If probing throws synchronously (rare), just skip UI
|
|
191
|
+
}
|
|
107
192
|
}
|
|
108
193
|
} catch (e) {
|
|
109
|
-
|
|
194
|
+
logger.error('[QuickMCP] Failed to start Web UI:', e && e.message);
|
|
110
195
|
}
|
|
111
196
|
}
|
|
112
197
|
|
|
@@ -127,11 +212,11 @@ function safeStartWebServer() {
|
|
|
127
212
|
// Install one-time handler to catch immediate async throw from Express
|
|
128
213
|
process.prependOnceListener('uncaughtException', handler);
|
|
129
214
|
try {
|
|
130
|
-
require('./dist/
|
|
215
|
+
require('./dist/server/server.js');
|
|
131
216
|
} catch (e) {
|
|
132
217
|
// Synchronous load error
|
|
133
218
|
process.removeListener('uncaughtException', handler);
|
|
134
|
-
|
|
219
|
+
logger.error('[QuickMCP] Failed to start Web UI:', e && e.message);
|
|
135
220
|
}
|
|
136
221
|
// Remove handler on next tick if nothing happened, to avoid swallowing unrelated errors later
|
|
137
222
|
setImmediate(() => {
|
|
@@ -143,21 +228,21 @@ function safeStartWebServer() {
|
|
|
143
228
|
|
|
144
229
|
// Diagnostics: print environment and mssql details to help debug Claude Desktop
|
|
145
230
|
try {
|
|
146
|
-
const resolvedDynExec = require.resolve('./dist/dynamic-mcp-executor.js');
|
|
231
|
+
const resolvedDynExec = require.resolve('./dist/server/dynamic-mcp-executor.js');
|
|
147
232
|
const mssql = require('mssql');
|
|
148
233
|
const mssqlVersion = require('mssql/package.json').version;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
234
|
+
logger.error('[QuickMCP] Node:', process.version);
|
|
235
|
+
logger.error('[QuickMCP] CWD:', process.cwd());
|
|
236
|
+
logger.error('[QuickMCP] Dynamic executor path:', resolvedDynExec);
|
|
237
|
+
logger.error('[QuickMCP] mssql version:', mssqlVersion);
|
|
238
|
+
logger.error('[QuickMCP] mssql exports:', {
|
|
154
239
|
hasDefault: !!mssql.default,
|
|
155
240
|
hasConnect: typeof mssql.connect,
|
|
156
241
|
typeofConnectionPool: typeof (mssql.ConnectionPool),
|
|
157
242
|
keys: Object.keys(mssql).slice(0, 10)
|
|
158
243
|
});
|
|
159
244
|
} catch (e) {
|
|
160
|
-
|
|
245
|
+
logger.error('[QuickMCP] Diagnostic init error:', e && e.message);
|
|
161
246
|
}
|
|
162
247
|
|
|
163
248
|
// Direct STDIO MCP implementation with LSP-style framing support
|
|
@@ -176,150 +261,51 @@ function sendMessage(message) {
|
|
|
176
261
|
process.stdout.write(json + '\n');
|
|
177
262
|
}
|
|
178
263
|
} catch (e) {
|
|
179
|
-
|
|
264
|
+
logger.error('[QuickMCP] Failed to send message:', e && e.message);
|
|
180
265
|
}
|
|
181
266
|
}
|
|
182
267
|
|
|
183
268
|
async function handleMessage(message) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
result: {
|
|
194
|
-
protocolVersion: '2024-11-05',
|
|
195
|
-
serverInfo: { name: 'quickmcp-direct', version: '1.0.0' },
|
|
196
|
-
capabilities: {
|
|
197
|
-
tools: { listChanged: true },
|
|
198
|
-
resources: { listChanged: true },
|
|
199
|
-
prompts: { listChanged: true }
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
break;
|
|
204
|
-
|
|
205
|
-
case 'tools/list':
|
|
206
|
-
try {
|
|
207
|
-
const tools = sqliteManager.getAllTools();
|
|
208
|
-
console.error(`[QuickMCP] Got ${tools.length} tools from SQLite`);
|
|
209
|
-
const formattedTools = tools.map(tool => ({
|
|
210
|
-
name: `${tool.server_id}__${tool.name}`,
|
|
211
|
-
description: `[${tool.server_id}] ${tool.description}`,
|
|
212
|
-
inputSchema: typeof tool.inputSchema === 'string' ? JSON.parse(tool.inputSchema) : tool.inputSchema
|
|
213
|
-
}));
|
|
214
|
-
console.error(`[QuickMCP] Formatted ${formattedTools.length} tools`);
|
|
215
|
-
|
|
216
|
-
response = {
|
|
217
|
-
jsonrpc: '2.0',
|
|
218
|
-
id: message.id,
|
|
219
|
-
result: { tools: formattedTools }
|
|
220
|
-
};
|
|
221
|
-
} catch (error) {
|
|
222
|
-
console.error('[QuickMCP] Error getting tools:', error);
|
|
223
|
-
response = {
|
|
224
|
-
jsonrpc: '2.0',
|
|
225
|
-
id: message.id,
|
|
226
|
-
result: { tools: [] }
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
break;
|
|
230
|
-
|
|
231
|
-
case 'resources/list':
|
|
232
|
-
try {
|
|
233
|
-
const resources = sqliteManager.getAllResources();
|
|
234
|
-
const formattedResources = resources.map(resource => ({
|
|
235
|
-
name: `${resource.server_id}__${resource.name}`,
|
|
236
|
-
description: `[${resource.server_id}] ${resource.description}`,
|
|
237
|
-
uri: resource.uri_template
|
|
238
|
-
}));
|
|
239
|
-
|
|
240
|
-
response = {
|
|
241
|
-
jsonrpc: '2.0',
|
|
242
|
-
id: message.id,
|
|
243
|
-
result: { resources: formattedResources }
|
|
244
|
-
};
|
|
245
|
-
} catch (error) {
|
|
246
|
-
console.error('[QuickMCP] Error getting resources:', error);
|
|
247
|
-
response = {
|
|
248
|
-
jsonrpc: '2.0',
|
|
249
|
-
id: message.id,
|
|
250
|
-
result: { resources: [] }
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
break;
|
|
254
|
-
|
|
255
|
-
case 'prompts/list':
|
|
256
|
-
// Return empty prompts list for now
|
|
257
|
-
response = {
|
|
258
|
-
jsonrpc: '2.0',
|
|
259
|
-
id: message.id,
|
|
260
|
-
result: { prompts: [] }
|
|
261
|
-
};
|
|
262
|
-
break;
|
|
263
|
-
|
|
264
|
-
case 'tools/call':
|
|
265
|
-
try {
|
|
266
|
-
console.error(`[QuickMCP] Executing tool: ${message.params.name}`);
|
|
267
|
-
console.error(`[QuickMCP] Arguments:`, JSON.stringify(message.params.arguments));
|
|
268
|
-
|
|
269
|
-
const { DynamicMCPExecutor } = require('./dist/dynamic-mcp-executor.js');
|
|
270
|
-
const executor = new DynamicMCPExecutor();
|
|
271
|
-
|
|
272
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
273
|
-
setTimeout(() => reject(new Error('Tool execution timeout')), 10000);
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
const toolResult = await Promise.race([
|
|
277
|
-
executor.executeTool(message.params.name, message.params.arguments || {}),
|
|
278
|
-
timeoutPromise
|
|
279
|
-
]);
|
|
280
|
-
|
|
281
|
-
console.error(`[QuickMCP] Tool result:`, JSON.stringify(toolResult, null, 2));
|
|
282
|
-
|
|
283
|
-
response = {
|
|
284
|
-
jsonrpc: '2.0',
|
|
285
|
-
id: message.id,
|
|
286
|
-
result: {
|
|
287
|
-
content: [{
|
|
288
|
-
type: 'text',
|
|
289
|
-
text: JSON.stringify(toolResult, null, 2)
|
|
290
|
-
}]
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
} catch (error) {
|
|
294
|
-
console.error(`[QuickMCP] Tool execution error:`, error);
|
|
295
|
-
response = {
|
|
296
|
-
jsonrpc: '2.0',
|
|
297
|
-
id: message.id,
|
|
298
|
-
error: {
|
|
299
|
-
code: -32603,
|
|
300
|
-
message: `Tool execution failed: ${error.message}`
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
break;
|
|
305
|
-
|
|
306
|
-
case 'notifications/initialized':
|
|
307
|
-
console.error('[QuickMCP] Client initialized');
|
|
308
|
-
break;
|
|
309
|
-
|
|
310
|
-
default:
|
|
311
|
-
if (message.id) {
|
|
312
|
-
response = {
|
|
313
|
-
jsonrpc: '2.0',
|
|
314
|
-
id: message.id,
|
|
315
|
-
error: { code: -32601, message: `Method not found: ${message.method}` }
|
|
316
|
-
};
|
|
269
|
+
logger.error(`[QuickMCP] Received: ${message.method} (id: ${message.id})`);
|
|
270
|
+
|
|
271
|
+
if (startupAuthError && message.method !== 'initialize' && message.method !== 'notifications/initialized') {
|
|
272
|
+
const authErrorResponse = {
|
|
273
|
+
jsonrpc: '2.0',
|
|
274
|
+
id: message.id,
|
|
275
|
+
error: {
|
|
276
|
+
code: -32001,
|
|
277
|
+
message: startupAuthError
|
|
317
278
|
}
|
|
279
|
+
};
|
|
280
|
+
logger.error('[QuickMCP] Sending: auth-error');
|
|
281
|
+
sendMessage(authErrorResponse);
|
|
282
|
+
return;
|
|
318
283
|
}
|
|
319
284
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
285
|
+
try {
|
|
286
|
+
let authContext;
|
|
287
|
+
try {
|
|
288
|
+
authContext = await mcpCore.resolveAuthContextFromSources({});
|
|
289
|
+
} catch (authError) {
|
|
290
|
+
logger.error('[QuickMCP] Failed to resolve auth context:', authError && authError.message ? authError.message : String(authError));
|
|
291
|
+
authContext = { identity: null, tokenRecord: null };
|
|
292
|
+
}
|
|
293
|
+
const response = await mcpCore.processJsonRpcMessage(message, authContext);
|
|
294
|
+
if (response) {
|
|
295
|
+
logger.error(`[QuickMCP] Sending: ${response.result ? 'success' : 'error'}`);
|
|
296
|
+
sendMessage(response);
|
|
297
|
+
}
|
|
298
|
+
} catch (error) {
|
|
299
|
+
const errorResponse = {
|
|
300
|
+
jsonrpc: '2.0',
|
|
301
|
+
id: message.id,
|
|
302
|
+
error: {
|
|
303
|
+
code: -32603,
|
|
304
|
+
message: `Internal error: ${error && error.message ? error.message : 'Unknown error'}`
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
logger.error('[QuickMCP] Sending: error');
|
|
308
|
+
sendMessage(errorResponse);
|
|
323
309
|
}
|
|
324
310
|
}
|
|
325
311
|
|
|
@@ -353,7 +339,7 @@ process.stdin.on('data', async (data) => {
|
|
|
353
339
|
const match = /Content-Length:\s*(\d+)/i.exec(header);
|
|
354
340
|
if (!match) {
|
|
355
341
|
// Invalid header; drop up to headerEnd+4
|
|
356
|
-
|
|
342
|
+
logger.error('[QuickMCP] Invalid header, dropping bytes');
|
|
357
343
|
stdinBuffer = Buffer.from(str.slice(headerEnd + 4), 'utf8');
|
|
358
344
|
continue;
|
|
359
345
|
}
|
|
@@ -367,12 +353,12 @@ process.stdin.on('data', async (data) => {
|
|
|
367
353
|
try {
|
|
368
354
|
if (useLspFraming === null) {
|
|
369
355
|
useLspFraming = true;
|
|
370
|
-
|
|
356
|
+
logger.error('[QuickMCP] Detected LSP framing (Content-Length)');
|
|
371
357
|
}
|
|
372
358
|
const message = JSON.parse(body);
|
|
373
359
|
await handleMessage(message);
|
|
374
360
|
} catch (e) {
|
|
375
|
-
|
|
361
|
+
logger.error('[QuickMCP] Error parsing framed JSON:', e && e.message);
|
|
376
362
|
}
|
|
377
363
|
stdinBuffer = stdinBuffer.slice(totalLength);
|
|
378
364
|
continue;
|
|
@@ -386,13 +372,13 @@ process.stdin.on('data', async (data) => {
|
|
|
386
372
|
}
|
|
387
373
|
if (useLspFraming === null) {
|
|
388
374
|
useLspFraming = false;
|
|
389
|
-
|
|
375
|
+
logger.error('[QuickMCP] Detected newline-delimited JSON framing');
|
|
390
376
|
}
|
|
391
377
|
for (const msg of messages) {
|
|
392
378
|
try {
|
|
393
379
|
await handleMessage(msg);
|
|
394
380
|
} catch (e) {
|
|
395
|
-
|
|
381
|
+
logger.error('[QuickMCP] Error handling message:', e && e.message);
|
|
396
382
|
}
|
|
397
383
|
}
|
|
398
384
|
stdinBuffer = Buffer.from(str.slice(consumed), 'utf8');
|
|
@@ -400,22 +386,25 @@ process.stdin.on('data', async (data) => {
|
|
|
400
386
|
});
|
|
401
387
|
|
|
402
388
|
process.stdin.on('end', () => {
|
|
403
|
-
|
|
404
|
-
|
|
389
|
+
logger.error('[QuickMCP] STDIN ended');
|
|
390
|
+
try { executor.close && executor.close(); } catch (_) {}
|
|
391
|
+
try { dataStore.close && dataStore.close(); } catch (_) {}
|
|
405
392
|
process.exit(0);
|
|
406
393
|
});
|
|
407
394
|
|
|
408
395
|
process.on('SIGINT', () => {
|
|
409
|
-
|
|
410
|
-
|
|
396
|
+
logger.error('[QuickMCP] Interrupted');
|
|
397
|
+
try { executor.close && executor.close(); } catch (_) {}
|
|
398
|
+
try { dataStore.close && dataStore.close(); } catch (_) {}
|
|
411
399
|
process.exit(0);
|
|
412
400
|
});
|
|
413
401
|
|
|
414
402
|
process.on('SIGTERM', () => {
|
|
415
|
-
|
|
416
|
-
|
|
403
|
+
logger.error('[QuickMCP] Terminated');
|
|
404
|
+
try { executor.close && executor.close(); } catch (_) {}
|
|
405
|
+
try { dataStore.close && dataStore.close(); } catch (_) {}
|
|
417
406
|
process.exit(0);
|
|
418
407
|
});
|
|
419
408
|
|
|
420
409
|
process.stdin.resume();
|
|
421
|
-
|
|
410
|
+
logger.error('QuickMCP Direct STDIO Server started...');
|