@stacksfinder/mcp-server 1.0.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.
Files changed (65) hide show
  1. package/README.md +262 -0
  2. package/dist/data/compatibility_matrix.json +230 -0
  3. package/dist/data/index.d.ts +109 -0
  4. package/dist/data/index.d.ts.map +1 -0
  5. package/dist/data/index.js +203 -0
  6. package/dist/data/index.js.map +1 -0
  7. package/dist/data/technology_scores.json +1031 -0
  8. package/dist/data/357/200/242/357/200/212cp H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serversrcdatacompatibility_matrix.json H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serverdistdata/357/200/242" +226 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +50 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/server.d.ts +6 -0
  14. package/dist/server.d.ts.map +1 -0
  15. package/dist/server.js +254 -0
  16. package/dist/server.js.map +1 -0
  17. package/dist/tools/analyze.d.ts +45 -0
  18. package/dist/tools/analyze.d.ts.map +1 -0
  19. package/dist/tools/analyze.js +110 -0
  20. package/dist/tools/analyze.js.map +1 -0
  21. package/dist/tools/api-keys.d.ts +78 -0
  22. package/dist/tools/api-keys.d.ts.map +1 -0
  23. package/dist/tools/api-keys.js +238 -0
  24. package/dist/tools/api-keys.js.map +1 -0
  25. package/dist/tools/blueprint.d.ts +129 -0
  26. package/dist/tools/blueprint.d.ts.map +1 -0
  27. package/dist/tools/blueprint.js +320 -0
  28. package/dist/tools/blueprint.js.map +1 -0
  29. package/dist/tools/compare.d.ts +50 -0
  30. package/dist/tools/compare.d.ts.map +1 -0
  31. package/dist/tools/compare.js +168 -0
  32. package/dist/tools/compare.js.map +1 -0
  33. package/dist/tools/list-techs.d.ts +34 -0
  34. package/dist/tools/list-techs.d.ts.map +1 -0
  35. package/dist/tools/list-techs.js +70 -0
  36. package/dist/tools/list-techs.js.map +1 -0
  37. package/dist/tools/recommend-demo.d.ts +46 -0
  38. package/dist/tools/recommend-demo.d.ts.map +1 -0
  39. package/dist/tools/recommend-demo.js +202 -0
  40. package/dist/tools/recommend-demo.js.map +1 -0
  41. package/dist/tools/recommend.d.ts +68 -0
  42. package/dist/tools/recommend.d.ts.map +1 -0
  43. package/dist/tools/recommend.js +135 -0
  44. package/dist/tools/recommend.js.map +1 -0
  45. package/dist/utils/api-client.d.ts +80 -0
  46. package/dist/utils/api-client.d.ts.map +1 -0
  47. package/dist/utils/api-client.js +197 -0
  48. package/dist/utils/api-client.js.map +1 -0
  49. package/dist/utils/config.d.ts +35 -0
  50. package/dist/utils/config.d.ts.map +1 -0
  51. package/dist/utils/config.js +45 -0
  52. package/dist/utils/config.js.map +1 -0
  53. package/dist/utils/device-id.d.ts +21 -0
  54. package/dist/utils/device-id.d.ts.map +1 -0
  55. package/dist/utils/device-id.js +101 -0
  56. package/dist/utils/device-id.js.map +1 -0
  57. package/dist/utils/errors.d.ts +46 -0
  58. package/dist/utils/errors.d.ts.map +1 -0
  59. package/dist/utils/errors.js +125 -0
  60. package/dist/utils/errors.js.map +1 -0
  61. package/dist/utils/logger.d.ts +37 -0
  62. package/dist/utils/logger.d.ts.map +1 -0
  63. package/dist/utils/logger.js +73 -0
  64. package/dist/utils/logger.js.map +1 -0
  65. package/package.json +63 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * stderr-only logger for MCP server.
3
+ * stdout is reserved for the MCP protocol (stdio transport).
4
+ */
5
+ let debugEnabled = false;
6
+ /**
7
+ * Enable or disable debug logging.
8
+ */
9
+ export function setDebug(enabled) {
10
+ debugEnabled = enabled;
11
+ }
12
+ /**
13
+ * Check if debug logging is enabled.
14
+ */
15
+ export function isDebugEnabled() {
16
+ return debugEnabled;
17
+ }
18
+ /**
19
+ * Log a debug message to stderr (only if debug is enabled).
20
+ */
21
+ export function debug(message, data) {
22
+ if (!debugEnabled)
23
+ return;
24
+ const timestamp = new Date().toISOString();
25
+ if (data !== undefined) {
26
+ console.error(`[${timestamp}] [DEBUG] ${message}`, JSON.stringify(data));
27
+ }
28
+ else {
29
+ console.error(`[${timestamp}] [DEBUG] ${message}`);
30
+ }
31
+ }
32
+ /**
33
+ * Log an info message to stderr.
34
+ */
35
+ export function info(message) {
36
+ const timestamp = new Date().toISOString();
37
+ console.error(`[${timestamp}] [INFO] ${message}`);
38
+ }
39
+ /**
40
+ * Log a warning message to stderr.
41
+ */
42
+ export function warn(message, err) {
43
+ const timestamp = new Date().toISOString();
44
+ if (err instanceof Error) {
45
+ console.error(`[${timestamp}] [WARN] ${message}: ${err.message}`);
46
+ }
47
+ else if (err !== undefined) {
48
+ console.error(`[${timestamp}] [WARN] ${message}:`, err);
49
+ }
50
+ else {
51
+ console.error(`[${timestamp}] [WARN] ${message}`);
52
+ }
53
+ }
54
+ /**
55
+ * Log an error message to stderr.
56
+ */
57
+ export function error(message, err) {
58
+ const timestamp = new Date().toISOString();
59
+ if (err instanceof Error) {
60
+ console.error(`[${timestamp}] [ERROR] ${message}: ${err.message}`);
61
+ if (debugEnabled && err.stack) {
62
+ console.error(err.stack);
63
+ }
64
+ }
65
+ else if (err !== undefined) {
66
+ console.error(`[${timestamp}] [ERROR] ${message}:`, err);
67
+ }
68
+ else {
69
+ console.error(`[${timestamp}] [ERROR] ${message}`);
70
+ }
71
+ }
72
+ export const log = { debug, info, warn, error, setDebug, isDebugEnabled };
73
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACxC,YAAY,GAAG,OAAO,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,YAAY,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,IAAc;IACpD,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IACnC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,YAAY,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAAa;IAClD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,YAAY,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,YAAY,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,YAAY,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAAa;IACnD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,IAAI,YAAY,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@stacksfinder/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for StacksFinder - tech stack recommendations for LLM clients",
5
+ "type": "module",
6
+ "bin": {
7
+ "stacksfinder-mcp": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": ["dist", "README.md"],
18
+ "scripts": {
19
+ "build": "tsc && npm run copy-data",
20
+ "copy-data": "node -e \"const fs=require('fs');['technology_scores.json','compatibility_matrix.json'].forEach(f=>fs.copyFileSync('src/data/'+f,'dist/data/'+f))\"",
21
+ "dev": "tsx watch src/index.ts",
22
+ "start": "node dist/index.js",
23
+ "test": "vitest",
24
+ "test:run": "vitest run",
25
+ "check-data-sync": "tsx scripts/check-data-sync.ts"
26
+ },
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.25.1",
29
+ "zod": "^3.23.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.0.0",
33
+ "tsx": "^4.0.0",
34
+ "typescript": "^5.4.0",
35
+ "vitest": "^2.0.0"
36
+ },
37
+ "keywords": [
38
+ "mcp",
39
+ "model-context-protocol",
40
+ "stacksfinder",
41
+ "tech-stack",
42
+ "llm",
43
+ "claude",
44
+ "cursor"
45
+ ],
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/hoklims/stacksmith",
49
+ "directory": "packages/mcp-server"
50
+ },
51
+ "homepage": "https://stacksfinder.com",
52
+ "bugs": {
53
+ "url": "https://github.com/hoklims/stacksmith/issues"
54
+ },
55
+ "author": "StacksFinder <hello@stacksfinder.com>",
56
+ "publishConfig": {
57
+ "access": "public"
58
+ },
59
+ "license": "MIT",
60
+ "engines": {
61
+ "node": ">=18.0.0"
62
+ }
63
+ }