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