@softtechai/quickmcp 1.0.14 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +245 -163
- 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
|
@@ -1,11 +1,66 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
const path = require('path');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const os = require('os');
|
|
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
|
+
}
|
|
4
33
|
|
|
5
34
|
// Use the current working directory provided by the caller.
|
|
6
35
|
// Do not change directories; keep paths relative to this script.
|
|
7
36
|
|
|
8
|
-
|
|
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
|
+
}
|
|
9
64
|
|
|
10
65
|
// Parse CLI flags for convenience
|
|
11
66
|
// Supported flags:
|
|
@@ -33,38 +88,161 @@ if (dataDirArg) {
|
|
|
33
88
|
if (val) process.env.QUICKMCP_DATA_DIR = val;
|
|
34
89
|
}
|
|
35
90
|
|
|
36
|
-
|
|
37
|
-
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
|
+
}
|
|
38
123
|
|
|
39
124
|
// Optionally start the Web UI (Express) like `npm run dev`
|
|
40
125
|
// Enable by setting QUICKMCP_ENABLE_WEB=1 (and optionally PORT, QUICKMCP_DATA_DIR)
|
|
41
126
|
if (process.env.QUICKMCP_ENABLE_WEB === '1') {
|
|
42
127
|
try {
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
|
|
128
|
+
logger.error('[QuickMCP] QUICKMCP_ENABLE_WEB=1 -> starting Web UI server...');
|
|
129
|
+
// Ensure we run from a writable directory when invoked via npx (CWD may be '/')
|
|
130
|
+
const canWrite = (dir) => {
|
|
131
|
+
try { fs.accessSync(dir, fs.constants.W_OK); return true; } catch { return false; }
|
|
132
|
+
};
|
|
133
|
+
let runDir = process.cwd();
|
|
134
|
+
if (runDir === '/' || !canWrite(runDir)) {
|
|
135
|
+
const home = os.homedir() || os.tmpdir();
|
|
136
|
+
runDir = path.join(home, '.quickmcp');
|
|
137
|
+
try { fs.mkdirSync(runDir, { recursive: true }); } catch {}
|
|
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 {}
|
|
142
|
+
}
|
|
143
|
+
// Prepare uploads directory and expose as env for newer builds
|
|
144
|
+
const uploadsDir = path.join(runDir, 'uploads');
|
|
145
|
+
try { fs.mkdirSync(uploadsDir, { recursive: true }); } catch {}
|
|
146
|
+
if (!process.env.QUICKMCP_UPLOAD_DIR) process.env.QUICKMCP_UPLOAD_DIR = uploadsDir;
|
|
147
|
+
|
|
148
|
+
// Determine preferred port and acquire a simple lock so only one process owns the UI for that port
|
|
149
|
+
const preferredPort = parseInt(process.env.PORT || '3000', 10);
|
|
150
|
+
const lockPath = path.join(runDir, `ui-${preferredPort}.lock`);
|
|
151
|
+
let hasLock = false;
|
|
152
|
+
try {
|
|
153
|
+
const fd = fs.openSync(lockPath, 'wx');
|
|
154
|
+
fs.closeSync(fd);
|
|
155
|
+
hasLock = true;
|
|
156
|
+
const cleanup = () => { try { fs.unlinkSync(lockPath); } catch {} };
|
|
157
|
+
process.once('exit', cleanup);
|
|
158
|
+
process.once('SIGINT', () => { cleanup(); process.exit(0); });
|
|
159
|
+
process.once('SIGTERM', () => { cleanup(); process.exit(0); });
|
|
160
|
+
} catch (e) {
|
|
161
|
+
if (e && e.code !== 'EEXIST') {
|
|
162
|
+
logger.error('[QuickMCP] UI lock error (continuing without UI):', e.message || e);
|
|
163
|
+
}
|
|
164
|
+
// Another process holds the UI lock; skip starting UI in this process
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (!hasLock) {
|
|
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
|
|
179
|
+
safeStartWebServer();
|
|
180
|
+
});
|
|
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
|
+
}
|
|
192
|
+
}
|
|
46
193
|
} catch (e) {
|
|
47
|
-
|
|
194
|
+
logger.error('[QuickMCP] Failed to start Web UI:', e && e.message);
|
|
48
195
|
}
|
|
49
196
|
}
|
|
50
197
|
|
|
198
|
+
// Start the web server but swallow a race-condition EADDRINUSE from Express listen
|
|
199
|
+
function safeStartWebServer() {
|
|
200
|
+
let handled = false;
|
|
201
|
+
const handler = (err) => {
|
|
202
|
+
if (!handled && err && err.code === 'EADDRINUSE' && err.syscall === 'listen') {
|
|
203
|
+
handled = true;
|
|
204
|
+
// Swallow this once so the STDIO server keeps running; another instance already owns :3000
|
|
205
|
+
process.removeListener('uncaughtException', handler);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// Not our case; restore default behavior
|
|
209
|
+
process.removeListener('uncaughtException', handler);
|
|
210
|
+
throw err;
|
|
211
|
+
};
|
|
212
|
+
// Install one-time handler to catch immediate async throw from Express
|
|
213
|
+
process.prependOnceListener('uncaughtException', handler);
|
|
214
|
+
try {
|
|
215
|
+
require('./dist/server/server.js');
|
|
216
|
+
} catch (e) {
|
|
217
|
+
// Synchronous load error
|
|
218
|
+
process.removeListener('uncaughtException', handler);
|
|
219
|
+
logger.error('[QuickMCP] Failed to start Web UI:', e && e.message);
|
|
220
|
+
}
|
|
221
|
+
// Remove handler on next tick if nothing happened, to avoid swallowing unrelated errors later
|
|
222
|
+
setImmediate(() => {
|
|
223
|
+
if (!handled) {
|
|
224
|
+
process.removeListener('uncaughtException', handler);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
51
229
|
// Diagnostics: print environment and mssql details to help debug Claude Desktop
|
|
52
230
|
try {
|
|
53
|
-
const resolvedDynExec = require.resolve('./dist/dynamic-mcp-executor.js');
|
|
231
|
+
const resolvedDynExec = require.resolve('./dist/server/dynamic-mcp-executor.js');
|
|
54
232
|
const mssql = require('mssql');
|
|
55
233
|
const mssqlVersion = require('mssql/package.json').version;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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:', {
|
|
61
239
|
hasDefault: !!mssql.default,
|
|
62
240
|
hasConnect: typeof mssql.connect,
|
|
63
241
|
typeofConnectionPool: typeof (mssql.ConnectionPool),
|
|
64
242
|
keys: Object.keys(mssql).slice(0, 10)
|
|
65
243
|
});
|
|
66
244
|
} catch (e) {
|
|
67
|
-
|
|
245
|
+
logger.error('[QuickMCP] Diagnostic init error:', e && e.message);
|
|
68
246
|
}
|
|
69
247
|
|
|
70
248
|
// Direct STDIO MCP implementation with LSP-style framing support
|
|
@@ -83,150 +261,51 @@ function sendMessage(message) {
|
|
|
83
261
|
process.stdout.write(json + '\n');
|
|
84
262
|
}
|
|
85
263
|
} catch (e) {
|
|
86
|
-
|
|
264
|
+
logger.error('[QuickMCP] Failed to send message:', e && e.message);
|
|
87
265
|
}
|
|
88
266
|
}
|
|
89
267
|
|
|
90
268
|
async function handleMessage(message) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
result: {
|
|
101
|
-
protocolVersion: '2024-11-05',
|
|
102
|
-
serverInfo: { name: 'quickmcp-direct', version: '1.0.0' },
|
|
103
|
-
capabilities: {
|
|
104
|
-
tools: { listChanged: true },
|
|
105
|
-
resources: { listChanged: true },
|
|
106
|
-
prompts: { listChanged: true }
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
break;
|
|
111
|
-
|
|
112
|
-
case 'tools/list':
|
|
113
|
-
try {
|
|
114
|
-
const tools = sqliteManager.getAllTools();
|
|
115
|
-
console.error(`[QuickMCP] Got ${tools.length} tools from SQLite`);
|
|
116
|
-
const formattedTools = tools.map(tool => ({
|
|
117
|
-
name: `${tool.server_id}__${tool.name}`,
|
|
118
|
-
description: `[${tool.server_id}] ${tool.description}`,
|
|
119
|
-
inputSchema: typeof tool.inputSchema === 'string' ? JSON.parse(tool.inputSchema) : tool.inputSchema
|
|
120
|
-
}));
|
|
121
|
-
console.error(`[QuickMCP] Formatted ${formattedTools.length} tools`);
|
|
122
|
-
|
|
123
|
-
response = {
|
|
124
|
-
jsonrpc: '2.0',
|
|
125
|
-
id: message.id,
|
|
126
|
-
result: { tools: formattedTools }
|
|
127
|
-
};
|
|
128
|
-
} catch (error) {
|
|
129
|
-
console.error('[QuickMCP] Error getting tools:', error);
|
|
130
|
-
response = {
|
|
131
|
-
jsonrpc: '2.0',
|
|
132
|
-
id: message.id,
|
|
133
|
-
result: { tools: [] }
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
break;
|
|
137
|
-
|
|
138
|
-
case 'resources/list':
|
|
139
|
-
try {
|
|
140
|
-
const resources = sqliteManager.getAllResources();
|
|
141
|
-
const formattedResources = resources.map(resource => ({
|
|
142
|
-
name: `${resource.server_id}__${resource.name}`,
|
|
143
|
-
description: `[${resource.server_id}] ${resource.description}`,
|
|
144
|
-
uri: resource.uri_template
|
|
145
|
-
}));
|
|
146
|
-
|
|
147
|
-
response = {
|
|
148
|
-
jsonrpc: '2.0',
|
|
149
|
-
id: message.id,
|
|
150
|
-
result: { resources: formattedResources }
|
|
151
|
-
};
|
|
152
|
-
} catch (error) {
|
|
153
|
-
console.error('[QuickMCP] Error getting resources:', error);
|
|
154
|
-
response = {
|
|
155
|
-
jsonrpc: '2.0',
|
|
156
|
-
id: message.id,
|
|
157
|
-
result: { resources: [] }
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
break;
|
|
161
|
-
|
|
162
|
-
case 'prompts/list':
|
|
163
|
-
// Return empty prompts list for now
|
|
164
|
-
response = {
|
|
165
|
-
jsonrpc: '2.0',
|
|
166
|
-
id: message.id,
|
|
167
|
-
result: { prompts: [] }
|
|
168
|
-
};
|
|
169
|
-
break;
|
|
170
|
-
|
|
171
|
-
case 'tools/call':
|
|
172
|
-
try {
|
|
173
|
-
console.error(`[QuickMCP] Executing tool: ${message.params.name}`);
|
|
174
|
-
console.error(`[QuickMCP] Arguments:`, JSON.stringify(message.params.arguments));
|
|
175
|
-
|
|
176
|
-
const { DynamicMCPExecutor } = require('./dist/dynamic-mcp-executor.js');
|
|
177
|
-
const executor = new DynamicMCPExecutor();
|
|
178
|
-
|
|
179
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
180
|
-
setTimeout(() => reject(new Error('Tool execution timeout')), 10000);
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
const toolResult = await Promise.race([
|
|
184
|
-
executor.executeTool(message.params.name, message.params.arguments || {}),
|
|
185
|
-
timeoutPromise
|
|
186
|
-
]);
|
|
187
|
-
|
|
188
|
-
console.error(`[QuickMCP] Tool result:`, JSON.stringify(toolResult, null, 2));
|
|
189
|
-
|
|
190
|
-
response = {
|
|
191
|
-
jsonrpc: '2.0',
|
|
192
|
-
id: message.id,
|
|
193
|
-
result: {
|
|
194
|
-
content: [{
|
|
195
|
-
type: 'text',
|
|
196
|
-
text: JSON.stringify(toolResult, null, 2)
|
|
197
|
-
}]
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
} catch (error) {
|
|
201
|
-
console.error(`[QuickMCP] Tool execution error:`, error);
|
|
202
|
-
response = {
|
|
203
|
-
jsonrpc: '2.0',
|
|
204
|
-
id: message.id,
|
|
205
|
-
error: {
|
|
206
|
-
code: -32603,
|
|
207
|
-
message: `Tool execution failed: ${error.message}`
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
break;
|
|
212
|
-
|
|
213
|
-
case 'notifications/initialized':
|
|
214
|
-
console.error('[QuickMCP] Client initialized');
|
|
215
|
-
break;
|
|
216
|
-
|
|
217
|
-
default:
|
|
218
|
-
if (message.id) {
|
|
219
|
-
response = {
|
|
220
|
-
jsonrpc: '2.0',
|
|
221
|
-
id: message.id,
|
|
222
|
-
error: { code: -32601, message: `Method not found: ${message.method}` }
|
|
223
|
-
};
|
|
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
|
|
224
278
|
}
|
|
279
|
+
};
|
|
280
|
+
logger.error('[QuickMCP] Sending: auth-error');
|
|
281
|
+
sendMessage(authErrorResponse);
|
|
282
|
+
return;
|
|
225
283
|
}
|
|
226
284
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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);
|
|
230
309
|
}
|
|
231
310
|
}
|
|
232
311
|
|
|
@@ -260,7 +339,7 @@ process.stdin.on('data', async (data) => {
|
|
|
260
339
|
const match = /Content-Length:\s*(\d+)/i.exec(header);
|
|
261
340
|
if (!match) {
|
|
262
341
|
// Invalid header; drop up to headerEnd+4
|
|
263
|
-
|
|
342
|
+
logger.error('[QuickMCP] Invalid header, dropping bytes');
|
|
264
343
|
stdinBuffer = Buffer.from(str.slice(headerEnd + 4), 'utf8');
|
|
265
344
|
continue;
|
|
266
345
|
}
|
|
@@ -274,12 +353,12 @@ process.stdin.on('data', async (data) => {
|
|
|
274
353
|
try {
|
|
275
354
|
if (useLspFraming === null) {
|
|
276
355
|
useLspFraming = true;
|
|
277
|
-
|
|
356
|
+
logger.error('[QuickMCP] Detected LSP framing (Content-Length)');
|
|
278
357
|
}
|
|
279
358
|
const message = JSON.parse(body);
|
|
280
359
|
await handleMessage(message);
|
|
281
360
|
} catch (e) {
|
|
282
|
-
|
|
361
|
+
logger.error('[QuickMCP] Error parsing framed JSON:', e && e.message);
|
|
283
362
|
}
|
|
284
363
|
stdinBuffer = stdinBuffer.slice(totalLength);
|
|
285
364
|
continue;
|
|
@@ -293,13 +372,13 @@ process.stdin.on('data', async (data) => {
|
|
|
293
372
|
}
|
|
294
373
|
if (useLspFraming === null) {
|
|
295
374
|
useLspFraming = false;
|
|
296
|
-
|
|
375
|
+
logger.error('[QuickMCP] Detected newline-delimited JSON framing');
|
|
297
376
|
}
|
|
298
377
|
for (const msg of messages) {
|
|
299
378
|
try {
|
|
300
379
|
await handleMessage(msg);
|
|
301
380
|
} catch (e) {
|
|
302
|
-
|
|
381
|
+
logger.error('[QuickMCP] Error handling message:', e && e.message);
|
|
303
382
|
}
|
|
304
383
|
}
|
|
305
384
|
stdinBuffer = Buffer.from(str.slice(consumed), 'utf8');
|
|
@@ -307,22 +386,25 @@ process.stdin.on('data', async (data) => {
|
|
|
307
386
|
});
|
|
308
387
|
|
|
309
388
|
process.stdin.on('end', () => {
|
|
310
|
-
|
|
311
|
-
|
|
389
|
+
logger.error('[QuickMCP] STDIN ended');
|
|
390
|
+
try { executor.close && executor.close(); } catch (_) {}
|
|
391
|
+
try { dataStore.close && dataStore.close(); } catch (_) {}
|
|
312
392
|
process.exit(0);
|
|
313
393
|
});
|
|
314
394
|
|
|
315
395
|
process.on('SIGINT', () => {
|
|
316
|
-
|
|
317
|
-
|
|
396
|
+
logger.error('[QuickMCP] Interrupted');
|
|
397
|
+
try { executor.close && executor.close(); } catch (_) {}
|
|
398
|
+
try { dataStore.close && dataStore.close(); } catch (_) {}
|
|
318
399
|
process.exit(0);
|
|
319
400
|
});
|
|
320
401
|
|
|
321
402
|
process.on('SIGTERM', () => {
|
|
322
|
-
|
|
323
|
-
|
|
403
|
+
logger.error('[QuickMCP] Terminated');
|
|
404
|
+
try { executor.close && executor.close(); } catch (_) {}
|
|
405
|
+
try { dataStore.close && dataStore.close(); } catch (_) {}
|
|
324
406
|
process.exit(0);
|
|
325
407
|
});
|
|
326
408
|
|
|
327
409
|
process.stdin.resume();
|
|
328
|
-
|
|
410
|
+
logger.error('QuickMCP Direct STDIO Server started...');
|