mcp-rubber-duck 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.
Files changed (184) hide show
  1. package/.dockerignore +19 -0
  2. package/.env.desktop.example +145 -0
  3. package/.env.example +45 -0
  4. package/.env.pi.example +106 -0
  5. package/.env.template +165 -0
  6. package/.eslintrc.json +40 -0
  7. package/.github/ISSUE_TEMPLATE/bug_report.md +65 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.md +58 -0
  9. package/.github/ISSUE_TEMPLATE/question.md +67 -0
  10. package/.github/pull_request_template.md +111 -0
  11. package/.github/workflows/docker-build.yml +138 -0
  12. package/.github/workflows/release.yml +182 -0
  13. package/.github/workflows/security.yml +141 -0
  14. package/.github/workflows/semantic-release.yml +89 -0
  15. package/.prettierrc +10 -0
  16. package/.releaserc.json +66 -0
  17. package/CHANGELOG.md +95 -0
  18. package/CONTRIBUTING.md +242 -0
  19. package/Dockerfile +62 -0
  20. package/LICENSE +21 -0
  21. package/README.md +803 -0
  22. package/audit-ci.json +8 -0
  23. package/config/claude_desktop.json +14 -0
  24. package/config/config.example.json +91 -0
  25. package/dist/config/config.d.ts +51 -0
  26. package/dist/config/config.d.ts.map +1 -0
  27. package/dist/config/config.js +301 -0
  28. package/dist/config/config.js.map +1 -0
  29. package/dist/config/types.d.ts +356 -0
  30. package/dist/config/types.d.ts.map +1 -0
  31. package/dist/config/types.js +41 -0
  32. package/dist/config/types.js.map +1 -0
  33. package/dist/index.d.ts +3 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +109 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/providers/duck-provider-enhanced.d.ts +29 -0
  38. package/dist/providers/duck-provider-enhanced.d.ts.map +1 -0
  39. package/dist/providers/duck-provider-enhanced.js +230 -0
  40. package/dist/providers/duck-provider-enhanced.js.map +1 -0
  41. package/dist/providers/enhanced-manager.d.ts +54 -0
  42. package/dist/providers/enhanced-manager.d.ts.map +1 -0
  43. package/dist/providers/enhanced-manager.js +217 -0
  44. package/dist/providers/enhanced-manager.js.map +1 -0
  45. package/dist/providers/manager.d.ts +28 -0
  46. package/dist/providers/manager.d.ts.map +1 -0
  47. package/dist/providers/manager.js +204 -0
  48. package/dist/providers/manager.js.map +1 -0
  49. package/dist/providers/provider.d.ts +29 -0
  50. package/dist/providers/provider.d.ts.map +1 -0
  51. package/dist/providers/provider.js +179 -0
  52. package/dist/providers/provider.js.map +1 -0
  53. package/dist/providers/types.d.ts +69 -0
  54. package/dist/providers/types.d.ts.map +1 -0
  55. package/dist/providers/types.js +2 -0
  56. package/dist/providers/types.js.map +1 -0
  57. package/dist/server.d.ts +24 -0
  58. package/dist/server.d.ts.map +1 -0
  59. package/dist/server.js +501 -0
  60. package/dist/server.js.map +1 -0
  61. package/dist/services/approval.d.ts +44 -0
  62. package/dist/services/approval.d.ts.map +1 -0
  63. package/dist/services/approval.js +159 -0
  64. package/dist/services/approval.js.map +1 -0
  65. package/dist/services/cache.d.ts +21 -0
  66. package/dist/services/cache.d.ts.map +1 -0
  67. package/dist/services/cache.js +63 -0
  68. package/dist/services/cache.js.map +1 -0
  69. package/dist/services/conversation.d.ts +24 -0
  70. package/dist/services/conversation.d.ts.map +1 -0
  71. package/dist/services/conversation.js +108 -0
  72. package/dist/services/conversation.js.map +1 -0
  73. package/dist/services/function-bridge.d.ts +41 -0
  74. package/dist/services/function-bridge.d.ts.map +1 -0
  75. package/dist/services/function-bridge.js +259 -0
  76. package/dist/services/function-bridge.js.map +1 -0
  77. package/dist/services/health.d.ts +17 -0
  78. package/dist/services/health.d.ts.map +1 -0
  79. package/dist/services/health.js +77 -0
  80. package/dist/services/health.js.map +1 -0
  81. package/dist/services/mcp-client-manager.d.ts +49 -0
  82. package/dist/services/mcp-client-manager.d.ts.map +1 -0
  83. package/dist/services/mcp-client-manager.js +279 -0
  84. package/dist/services/mcp-client-manager.js.map +1 -0
  85. package/dist/tools/approve-mcp-request.d.ts +9 -0
  86. package/dist/tools/approve-mcp-request.d.ts.map +1 -0
  87. package/dist/tools/approve-mcp-request.js +111 -0
  88. package/dist/tools/approve-mcp-request.js.map +1 -0
  89. package/dist/tools/ask-duck.d.ts +9 -0
  90. package/dist/tools/ask-duck.d.ts.map +1 -0
  91. package/dist/tools/ask-duck.js +43 -0
  92. package/dist/tools/ask-duck.js.map +1 -0
  93. package/dist/tools/chat-duck.d.ts +9 -0
  94. package/dist/tools/chat-duck.d.ts.map +1 -0
  95. package/dist/tools/chat-duck.js +57 -0
  96. package/dist/tools/chat-duck.js.map +1 -0
  97. package/dist/tools/clear-conversations.d.ts +8 -0
  98. package/dist/tools/clear-conversations.d.ts.map +1 -0
  99. package/dist/tools/clear-conversations.js +17 -0
  100. package/dist/tools/clear-conversations.js.map +1 -0
  101. package/dist/tools/compare-ducks.d.ts +8 -0
  102. package/dist/tools/compare-ducks.d.ts.map +1 -0
  103. package/dist/tools/compare-ducks.js +49 -0
  104. package/dist/tools/compare-ducks.js.map +1 -0
  105. package/dist/tools/duck-council.d.ts +8 -0
  106. package/dist/tools/duck-council.d.ts.map +1 -0
  107. package/dist/tools/duck-council.js +69 -0
  108. package/dist/tools/duck-council.js.map +1 -0
  109. package/dist/tools/get-pending-approvals.d.ts +15 -0
  110. package/dist/tools/get-pending-approvals.d.ts.map +1 -0
  111. package/dist/tools/get-pending-approvals.js +74 -0
  112. package/dist/tools/get-pending-approvals.js.map +1 -0
  113. package/dist/tools/list-ducks.d.ts +9 -0
  114. package/dist/tools/list-ducks.d.ts.map +1 -0
  115. package/dist/tools/list-ducks.js +47 -0
  116. package/dist/tools/list-ducks.js.map +1 -0
  117. package/dist/tools/list-models.d.ts +8 -0
  118. package/dist/tools/list-models.d.ts.map +1 -0
  119. package/dist/tools/list-models.js +72 -0
  120. package/dist/tools/list-models.js.map +1 -0
  121. package/dist/tools/mcp-status.d.ts +17 -0
  122. package/dist/tools/mcp-status.d.ts.map +1 -0
  123. package/dist/tools/mcp-status.js +100 -0
  124. package/dist/tools/mcp-status.js.map +1 -0
  125. package/dist/utils/ascii-art.d.ts +19 -0
  126. package/dist/utils/ascii-art.d.ts.map +1 -0
  127. package/dist/utils/ascii-art.js +73 -0
  128. package/dist/utils/ascii-art.js.map +1 -0
  129. package/dist/utils/logger.d.ts +3 -0
  130. package/dist/utils/logger.d.ts.map +1 -0
  131. package/dist/utils/logger.js +86 -0
  132. package/dist/utils/logger.js.map +1 -0
  133. package/dist/utils/safe-logger.d.ts +23 -0
  134. package/dist/utils/safe-logger.d.ts.map +1 -0
  135. package/dist/utils/safe-logger.js +145 -0
  136. package/dist/utils/safe-logger.js.map +1 -0
  137. package/docker-compose.yml +161 -0
  138. package/jest.config.js +26 -0
  139. package/package.json +65 -0
  140. package/scripts/build-multiarch.sh +290 -0
  141. package/scripts/deploy-raspbian.sh +410 -0
  142. package/scripts/deploy.sh +322 -0
  143. package/scripts/gh-deploy.sh +343 -0
  144. package/scripts/setup-docker-raspbian.sh +530 -0
  145. package/server.json +8 -0
  146. package/src/config/config.ts +357 -0
  147. package/src/config/types.ts +89 -0
  148. package/src/index.ts +114 -0
  149. package/src/providers/duck-provider-enhanced.ts +294 -0
  150. package/src/providers/enhanced-manager.ts +290 -0
  151. package/src/providers/manager.ts +257 -0
  152. package/src/providers/provider.ts +207 -0
  153. package/src/providers/types.ts +78 -0
  154. package/src/server.ts +603 -0
  155. package/src/services/approval.ts +225 -0
  156. package/src/services/cache.ts +79 -0
  157. package/src/services/conversation.ts +146 -0
  158. package/src/services/function-bridge.ts +329 -0
  159. package/src/services/health.ts +107 -0
  160. package/src/services/mcp-client-manager.ts +362 -0
  161. package/src/tools/approve-mcp-request.ts +126 -0
  162. package/src/tools/ask-duck.ts +74 -0
  163. package/src/tools/chat-duck.ts +82 -0
  164. package/src/tools/clear-conversations.ts +24 -0
  165. package/src/tools/compare-ducks.ts +67 -0
  166. package/src/tools/duck-council.ts +88 -0
  167. package/src/tools/get-pending-approvals.ts +90 -0
  168. package/src/tools/list-ducks.ts +65 -0
  169. package/src/tools/list-models.ts +101 -0
  170. package/src/tools/mcp-status.ts +117 -0
  171. package/src/utils/ascii-art.ts +85 -0
  172. package/src/utils/logger.ts +116 -0
  173. package/src/utils/safe-logger.ts +165 -0
  174. package/systemd/mcp-rubber-duck-with-ollama.service +55 -0
  175. package/systemd/mcp-rubber-duck.service +58 -0
  176. package/test-functionality.js +147 -0
  177. package/test-mcp-interface.js +221 -0
  178. package/tests/ascii-art.test.ts +36 -0
  179. package/tests/config.test.ts +239 -0
  180. package/tests/conversation.test.ts +308 -0
  181. package/tests/mcp-bridge.test.ts +291 -0
  182. package/tests/providers.test.ts +269 -0
  183. package/tests/tools/clear-conversations.test.ts +163 -0
  184. package/tsconfig.json +26 -0
package/.dockerignore ADDED
@@ -0,0 +1,19 @@
1
+ node_modules
2
+ dist
3
+ coverage
4
+ .git
5
+ .gitignore
6
+ .env
7
+ .env.*
8
+ *.log
9
+ .DS_Store
10
+ tests
11
+ *.test.ts
12
+ jest.config.js
13
+ .vscode
14
+ .idea
15
+ README.md
16
+ LICENSE
17
+ docker-compose.yml
18
+ Dockerfile
19
+ .dockerignore
@@ -0,0 +1,145 @@
1
+ # MCP Rubber Duck - Desktop/Server Configuration Example
2
+ # Optimized for high-performance systems (macOS, Linux, Windows)
3
+ # Copy this file to .env and add your API keys
4
+
5
+ # =============================================================================
6
+ # BASIC CONFIGURATION
7
+ # =============================================================================
8
+
9
+ # Docker image (multi-platform)
10
+ DOCKER_IMAGE=ghcr.io/nesquikm/mcp-rubber-duck:latest
11
+
12
+ # Default provider and settings
13
+ DEFAULT_PROVIDER=openai
14
+ DEFAULT_TEMPERATURE=0.7
15
+ LOG_LEVEL=info
16
+
17
+ # =============================================================================
18
+ # DESKTOP/SERVER OPTIMIZATIONS
19
+ # =============================================================================
20
+
21
+ # Resource limits for powerful systems
22
+ DOCKER_CPU_LIMIT=4.0
23
+ DOCKER_MEMORY_LIMIT=2G
24
+ DOCKER_MEMORY_RESERVATION=1G
25
+
26
+ # Node.js memory optimization for desktop
27
+ NODE_OPTIONS=--max-old-space-size=1024
28
+ NODE_ENV=production
29
+
30
+ # =============================================================================
31
+ # MCP SERVER CONFIGURATION
32
+ # =============================================================================
33
+
34
+ # Enable MCP server mode
35
+ MCP_SERVER=true
36
+
37
+ # =============================================================================
38
+ # AI PROVIDER API KEYS
39
+ # =============================================================================
40
+
41
+ # OpenAI (required - get from https://platform.openai.com/api-keys)
42
+ OPENAI_API_KEY=sk-your-openai-key-here
43
+ OPENAI_DEFAULT_MODEL=gpt-4o
44
+
45
+ # Google Gemini (optional - get from https://aistudio.google.com/apikey)
46
+ GEMINI_API_KEY=your-gemini-key-here
47
+ GEMINI_DEFAULT_MODEL=gemini-2.5-pro
48
+
49
+ # Groq (optional - fast inference - get from https://console.groq.com/keys)
50
+ GROQ_API_KEY=gsk_your-groq-key-here
51
+ GROQ_DEFAULT_MODEL=llama-3.3-70b-versatile
52
+
53
+ # Together AI (optional - get from https://api.together.xyz/)
54
+ TOGETHER_API_KEY=your-together-key-here
55
+
56
+ # Perplexity AI (optional - get from https://perplexity.ai/)
57
+ PERPLEXITY_API_KEY=your-perplexity-key-here
58
+
59
+ # Anyscale (optional - get from https://app.endpoints.anyscale.com/)
60
+ # ANYSCALE_API_KEY=your-anyscale-key-here
61
+
62
+ # Azure OpenAI (optional)
63
+ # AZURE_OPENAI_API_KEY=your-azure-key-here
64
+ # AZURE_OPENAI_ENDPOINT=your-resource-name.openai.azure.com
65
+
66
+ # =============================================================================
67
+ # LOCAL AI (RECOMMENDED FOR DESKTOP)
68
+ # =============================================================================
69
+
70
+ # Ollama (local AI - enable with --profile with-ollama)
71
+ # Desktop systems can handle larger models
72
+ OLLAMA_BASE_URL=http://ollama:11434/v1
73
+ OLLAMA_DEFAULT_MODEL=llama3.1:8b
74
+
75
+ # Ollama resource limits for desktop
76
+ OLLAMA_CPU_LIMIT=4.0
77
+ OLLAMA_MEMORY_LIMIT=4G
78
+ OLLAMA_MEMORY_RESERVATION=2G
79
+
80
+ # LM Studio (alternative local AI)
81
+ # LMSTUDIO_BASE_URL=http://localhost:1234/v1
82
+ # LMSTUDIO_DEFAULT_MODEL=local-model
83
+
84
+ # =============================================================================
85
+ # CUSTOM PROVIDERS
86
+ # =============================================================================
87
+
88
+ # Example: Custom OpenAI-compatible API
89
+ # CUSTOM_API_KEY=your-custom-key
90
+ # CUSTOM_BASE_URL=https://api.example.com/v1
91
+ # CUSTOM_DEFAULT_MODEL=custom-model
92
+ # CUSTOM_NICKNAME=My Custom Duck
93
+
94
+ # Example: Additional custom provider
95
+ # CUSTOM_MYAPI_API_KEY=your-custom-key
96
+ # CUSTOM_MYAPI_BASE_URL=https://api.example.com/v1
97
+ # CUSTOM_MYAPI_DEFAULT_MODEL=custom-model
98
+ # CUSTOM_MYAPI_NICKNAME=My API Duck
99
+
100
+ # =============================================================================
101
+ # MCP BRIDGE CONFIGURATION (ADVANCED)
102
+ # =============================================================================
103
+
104
+ # Enable MCP Bridge (allows ducks to use external MCP tools)
105
+ MCP_BRIDGE_ENABLED=true
106
+
107
+ # Approval mode: always, trusted, or never
108
+ MCP_APPROVAL_MODE=trusted
109
+ MCP_APPROVAL_TIMEOUT=300
110
+
111
+ # Example: Context7 Documentation Server
112
+ MCP_SERVER_CONTEXT7_TYPE=http
113
+ MCP_SERVER_CONTEXT7_URL=https://mcp.context7.com/mcp
114
+ MCP_SERVER_CONTEXT7_ENABLED=true
115
+ MCP_TRUSTED_TOOLS_CONTEXT7=*
116
+
117
+ # =============================================================================
118
+ # PERFORMANCE TUNING FOR DESKTOP
119
+ # =============================================================================
120
+
121
+ # Cache settings (higher for desktop)
122
+ CACHE_TTL=600
123
+
124
+ # Network settings
125
+ ENABLE_FAILOVER=true
126
+ MAX_RETRIES=3
127
+ REQUEST_TIMEOUT=60000
128
+
129
+ # Monitoring (enable for development/debugging)
130
+ ENABLE_PERFORMANCE_MONITORING=true
131
+ ENABLE_REQUEST_LOGGING=false
132
+ ENABLE_MEMORY_REPORTING=true
133
+
134
+ # =============================================================================
135
+ # DEVELOPMENT SETTINGS
136
+ # =============================================================================
137
+
138
+ # Enable debug mode for development
139
+ # LOG_LEVEL=debug
140
+
141
+ # Duck nicknames (optional fun customization)
142
+ # OPENAI_NICKNAME=DUCK-4
143
+ # GEMINI_NICKNAME=Duckmini
144
+ # GROQ_NICKNAME=Quackers
145
+ # OLLAMA_NICKNAME=Local Quacker
package/.env.example ADDED
@@ -0,0 +1,45 @@
1
+ # OpenAI Provider
2
+ OPENAI_API_KEY=sk-...
3
+
4
+ # Google Gemini Provider
5
+ GEMINI_API_KEY=...
6
+
7
+ # Groq Provider
8
+ GROQ_API_KEY=gsk_...
9
+
10
+ # Together AI Provider
11
+ TOGETHER_API_KEY=...
12
+
13
+ # Perplexity Provider
14
+ PERPLEXITY_API_KEY=pplx-...
15
+
16
+ # Custom Providers (you can add multiple)
17
+ # Format: CUSTOM_{NAME}_* where NAME becomes the provider key (lowercase)
18
+ # Required: API_KEY and BASE_URL. Optional: MODELS, DEFAULT_MODEL, NICKNAME
19
+
20
+ # Example 1: Custom provider "MYAPI" (becomes provider key "myapi")
21
+ # CUSTOM_MYAPI_API_KEY=sk-...
22
+ # CUSTOM_MYAPI_BASE_URL=https://my-api.com/v1
23
+ # CUSTOM_MYAPI_MODELS=model1,model2,model3
24
+ # CUSTOM_MYAPI_DEFAULT_MODEL=model1
25
+ # CUSTOM_MYAPI_NICKNAME=My API Duck
26
+
27
+ # Example 2: Custom provider "AZURE" (becomes provider key "azure")
28
+ # CUSTOM_AZURE_API_KEY=...
29
+ # CUSTOM_AZURE_BASE_URL=https://myazure.openai.azure.com/v1
30
+ # CUSTOM_AZURE_NICKNAME=Azure Duck
31
+
32
+ # Optional: Default settings
33
+ DEFAULT_PROVIDER=openai
34
+ DEFAULT_TEMPERATURE=0.7
35
+
36
+ # Optional: Logging
37
+ LOG_LEVEL=info
38
+
39
+ # Optional: Custom Duck Nicknames (Have fun with these!)
40
+ # OPENAI_NICKNAME="DUCK-4"
41
+ # GEMINI_NICKNAME="Duckmini"
42
+ # GROQ_NICKNAME="Quackers"
43
+ # TOGETHER_NICKNAME="Speedy Duck"
44
+ # PERPLEXITY_NICKNAME="Search Duck"
45
+ # OLLAMA_NICKNAME="Local Duck"
@@ -0,0 +1,106 @@
1
+ # MCP Rubber Duck - Raspberry Pi Configuration Example
2
+ # Optimized for low-memory devices (Pi 3+)
3
+ # Copy this file to .env and add your API keys
4
+
5
+ # =============================================================================
6
+ # BASIC CONFIGURATION
7
+ # =============================================================================
8
+
9
+ # Docker image (multi-platform)
10
+ DOCKER_IMAGE=ghcr.io/nesquikm/mcp-rubber-duck:latest
11
+
12
+ # Default provider and settings
13
+ DEFAULT_PROVIDER=openai
14
+ DEFAULT_TEMPERATURE=0.7
15
+ LOG_LEVEL=info
16
+
17
+ # =============================================================================
18
+ # RASPBERRY PI OPTIMIZATIONS
19
+ # =============================================================================
20
+
21
+ # Resource limits optimized for Pi
22
+ DOCKER_CPU_LIMIT=1.5
23
+ DOCKER_MEMORY_LIMIT=512M
24
+ DOCKER_MEMORY_RESERVATION=256M
25
+
26
+ # Node.js memory optimization for Pi
27
+ NODE_OPTIONS=--max-old-space-size=256
28
+ NODE_ENV=production
29
+
30
+ # =============================================================================
31
+ # MCP SERVER CONFIGURATION
32
+ # =============================================================================
33
+
34
+ # Enable MCP server mode
35
+ MCP_SERVER=true
36
+
37
+ # =============================================================================
38
+ # AI PROVIDER API KEYS
39
+ # =============================================================================
40
+
41
+ # OpenAI (required - get from https://platform.openai.com/api-keys)
42
+ OPENAI_API_KEY=sk-your-openai-key-here
43
+ OPENAI_DEFAULT_MODEL=gpt-4o-mini
44
+
45
+ # Google Gemini (optional - get from https://aistudio.google.com/apikey)
46
+ GEMINI_API_KEY=your-gemini-key-here
47
+ GEMINI_DEFAULT_MODEL=gemini-2.5-flash
48
+
49
+ # Groq (optional - fast inference - get from https://console.groq.com/keys)
50
+ GROQ_API_KEY=gsk_your-groq-key-here
51
+ GROQ_DEFAULT_MODEL=llama-3.3-70b-versatile
52
+
53
+ # Other providers (optional)
54
+ # TOGETHER_API_KEY=your-together-key-here
55
+ # PERPLEXITY_API_KEY=your-perplexity-key-here
56
+
57
+ # =============================================================================
58
+ # LOCAL AI (OPTIONAL)
59
+ # =============================================================================
60
+
61
+ # Ollama (local AI - enable with --profile with-ollama)
62
+ # Warning: Ollama requires significant RAM on Pi
63
+ # OLLAMA_BASE_URL=http://ollama:11434/v1
64
+ # OLLAMA_DEFAULT_MODEL=llama3.2
65
+
66
+ # Ollama resource limits for Pi (if enabled)
67
+ OLLAMA_CPU_LIMIT=2.0
68
+ OLLAMA_MEMORY_LIMIT=1G
69
+ OLLAMA_MEMORY_RESERVATION=512M
70
+
71
+ # =============================================================================
72
+ # CUSTOM PROVIDERS
73
+ # =============================================================================
74
+
75
+ # Example: Custom OpenAI-compatible API
76
+ # CUSTOM_API_KEY=your-custom-key
77
+ # CUSTOM_BASE_URL=https://api.example.com/v1
78
+ # CUSTOM_DEFAULT_MODEL=custom-model
79
+
80
+ # =============================================================================
81
+ # MCP BRIDGE CONFIGURATION (OPTIONAL)
82
+ # =============================================================================
83
+
84
+ # Enable MCP Bridge (allows ducks to use external MCP tools)
85
+ MCP_BRIDGE_ENABLED=false
86
+
87
+ # Approval mode: always, trusted, or never
88
+ MCP_APPROVAL_MODE=trusted
89
+ MCP_APPROVAL_TIMEOUT=300
90
+
91
+ # =============================================================================
92
+ # PERFORMANCE TUNING FOR PI
93
+ # =============================================================================
94
+
95
+ # Cache settings (lower for Pi)
96
+ CACHE_TTL=300
97
+
98
+ # Network settings
99
+ ENABLE_FAILOVER=true
100
+ MAX_RETRIES=3
101
+ REQUEST_TIMEOUT=30000
102
+
103
+ # Monitoring (disable to save resources)
104
+ ENABLE_PERFORMANCE_MONITORING=false
105
+ ENABLE_REQUEST_LOGGING=false
106
+ ENABLE_MEMORY_REPORTING=true
package/.env.template ADDED
@@ -0,0 +1,165 @@
1
+ # MCP Rubber Duck - Universal Configuration Template
2
+ # Copy this file to .env and fill in your API keys
3
+ # For platform-specific examples, see .env.pi.example or .env.desktop.example
4
+
5
+ # =============================================================================
6
+ # BASIC CONFIGURATION
7
+ # =============================================================================
8
+
9
+ # Docker image to use (multi-platform: AMD64, ARM64)
10
+ # Works on: macOS, Linux, Windows, Raspberry Pi 3+
11
+ DOCKER_IMAGE=ghcr.io/nesquikm/mcp-rubber-duck:latest
12
+
13
+ # Default provider to use when none specified
14
+ DEFAULT_PROVIDER=openai
15
+
16
+ # Default temperature for LLM responses (0.0 - 2.0)
17
+ DEFAULT_TEMPERATURE=0.7
18
+
19
+ # Logging level (error, warn, info, debug)
20
+ LOG_LEVEL=info
21
+
22
+ # =============================================================================
23
+ # NODE.JS & SYSTEM OPTIMIZATION
24
+ # =============================================================================
25
+
26
+ # Node.js memory optimization for Raspberry Pi (in MB)
27
+ # Adjust based on your Pi model:
28
+ # - Pi 3 (1GB RAM): --max-old-space-size=256
29
+ # - Pi 4 (2GB RAM): --max-old-space-size=512
30
+ # - Pi 4 (4GB+): --max-old-space-size=1024
31
+ NODE_OPTIONS=--max-old-space-size=256
32
+
33
+ # Node environment
34
+ NODE_ENV=production
35
+
36
+ # =============================================================================
37
+ # MCP SERVER CONFIGURATION
38
+ # =============================================================================
39
+
40
+ # Enable MCP server mode (required for Claude Desktop integration)
41
+ MCP_SERVER=true
42
+
43
+ # =============================================================================
44
+ # AI PROVIDER API KEYS
45
+ # Replace the placeholder values with your actual API keys
46
+ # =============================================================================
47
+
48
+ # OpenAI (https://platform.openai.com/api-keys)
49
+ # Get your API key from: https://platform.openai.com/account/api-keys
50
+ OPENAI_API_KEY=sk-your-openai-key-here
51
+ OPENAI_DEFAULT_MODEL=gpt-4o-mini
52
+
53
+ # Google Gemini (https://aistudio.google.com/apikey)
54
+ # Get your API key from: https://aistudio.google.com/apikey
55
+ GEMINI_API_KEY=your-gemini-key-here
56
+ GEMINI_DEFAULT_MODEL=gemini-2.5-flash
57
+
58
+ # Groq (https://console.groq.com/keys)
59
+ # Get your API key from: https://console.groq.com/keys
60
+ GROQ_API_KEY=gsk_your-groq-key-here
61
+ GROQ_DEFAULT_MODEL=llama-3.3-70b-versatile
62
+
63
+ # Together AI (https://api.together.xyz/)
64
+ # Uncomment and fill if you have a Together AI account
65
+ # TOGETHER_API_KEY=your-together-key-here
66
+
67
+ # Perplexity AI (https://perplexity.ai/)
68
+ # Uncomment and fill if you have a Perplexity account
69
+ # PERPLEXITY_API_KEY=your-perplexity-key-here
70
+
71
+ # Anyscale (https://app.endpoints.anyscale.com/)
72
+ # Uncomment and fill if you have an Anyscale account
73
+ # ANYSCALE_API_KEY=your-anyscale-key-here
74
+
75
+ # Azure OpenAI (https://azure.microsoft.com/en-us/products/cognitive-services/openai-service/)
76
+ # Uncomment and fill if you have Azure OpenAI
77
+ # AZURE_OPENAI_API_KEY=your-azure-key-here
78
+ # AZURE_OPENAI_ENDPOINT=your-resource-name.openai.azure.com
79
+
80
+ # =============================================================================
81
+ # LOCAL AI PROVIDERS (RASPBERRY PI)
82
+ # =============================================================================
83
+
84
+ # Ollama (Local AI on Raspberry Pi)
85
+ # Only enable if you're running Ollama locally or in Docker
86
+ # OLLAMA_BASE_URL=http://localhost:11434/v1
87
+ # OLLAMA_DEFAULT_MODEL=llama3.2
88
+
89
+ # LM Studio (Local AI)
90
+ # Only enable if you're running LM Studio locally
91
+ # LMSTUDIO_BASE_URL=http://localhost:1234/v1
92
+ # LMSTUDIO_DEFAULT_MODEL=local-model
93
+
94
+ # =============================================================================
95
+ # CUSTOM PROVIDERS
96
+ # You can add multiple custom providers using CUSTOM_{NAME}_* format
97
+ # =============================================================================
98
+
99
+ # Example: Custom OpenAI-compatible API
100
+ # CUSTOM_MYAPI_API_KEY=your-custom-key
101
+ # CUSTOM_MYAPI_BASE_URL=https://api.example.com/v1
102
+ # CUSTOM_MYAPI_DEFAULT_MODEL=custom-model
103
+ # CUSTOM_MYAPI_NICKNAME=My Custom Duck
104
+
105
+ # =============================================================================
106
+ # MCP BRIDGE CONFIGURATION (Advanced)
107
+ # Allows ducks to access external MCP servers
108
+ # =============================================================================
109
+
110
+ # Enable MCP Bridge (allows ducks to use external MCP tools)
111
+ MCP_BRIDGE_ENABLED=false
112
+
113
+ # Approval mode for MCP tool usage: always, trusted, or never
114
+ MCP_APPROVAL_MODE=trusted
115
+
116
+ # Timeout for approval requests (seconds)
117
+ MCP_APPROVAL_TIMEOUT=300
118
+
119
+ # Example: Context7 Documentation Server
120
+ # Uncomment to enable Context7 MCP server integration
121
+ # MCP_SERVER_CONTEXT7_TYPE=http
122
+ # MCP_SERVER_CONTEXT7_URL=https://mcp.context7.com/mcp
123
+ # MCP_SERVER_CONTEXT7_ENABLED=true
124
+ # MCP_TRUSTED_TOOLS_CONTEXT7=*
125
+
126
+ # =============================================================================
127
+ # DUCK NICKNAMES (Optional Fun Customization)
128
+ # =============================================================================
129
+
130
+ # Customize your duck names (optional)
131
+ # OPENAI_NICKNAME=DUCK-4
132
+ # GEMINI_NICKNAME=Duckmini
133
+ # GROQ_NICKNAME=Quackers
134
+ # OLLAMA_NICKNAME=Local Quacker
135
+
136
+ # =============================================================================
137
+ # RASPBERRY PI SPECIFIC SETTINGS
138
+ # =============================================================================
139
+
140
+ # Cache TTL for responses (seconds)
141
+ # Lower values use less memory but more API calls
142
+ CACHE_TTL=300
143
+
144
+ # Enable automatic failover to other providers
145
+ ENABLE_FAILOVER=true
146
+
147
+ # Maximum retries for failed API calls
148
+ MAX_RETRIES=3
149
+
150
+ # Request timeout (milliseconds)
151
+ # Increase for slower internet connections
152
+ REQUEST_TIMEOUT=30000
153
+
154
+ # =============================================================================
155
+ # MONITORING & DEBUGGING
156
+ # =============================================================================
157
+
158
+ # Enable performance monitoring
159
+ ENABLE_PERFORMANCE_MONITORING=false
160
+
161
+ # Enable detailed request logging (increases log size)
162
+ ENABLE_REQUEST_LOGGING=false
163
+
164
+ # Enable memory usage reporting
165
+ ENABLE_MEMORY_REPORTING=true
package/.eslintrc.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "root": true,
3
+ "parser": "@typescript-eslint/parser",
4
+ "parserOptions": {
5
+ "ecmaVersion": 2022,
6
+ "sourceType": "module",
7
+ "project": "./tsconfig.json"
8
+ },
9
+ "plugins": [
10
+ "@typescript-eslint"
11
+ ],
12
+ "extends": [
13
+ "eslint:recommended",
14
+ "plugin:@typescript-eslint/recommended",
15
+ "plugin:@typescript-eslint/recommended-requiring-type-checking"
16
+ ],
17
+ "rules": {
18
+ "@typescript-eslint/no-unused-vars": [
19
+ "error",
20
+ {
21
+ "argsIgnorePattern": "^_",
22
+ "varsIgnorePattern": "^_"
23
+ }
24
+ ],
25
+ "@typescript-eslint/explicit-function-return-type": "off",
26
+ "@typescript-eslint/explicit-module-boundary-types": "off",
27
+ "no-console": [
28
+ "warn",
29
+ {
30
+ "allow": ["warn", "error"]
31
+ }
32
+ ]
33
+ },
34
+ "ignorePatterns": [
35
+ "dist/",
36
+ "node_modules/",
37
+ "coverage/",
38
+ "*.config.js"
39
+ ]
40
+ }
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: 🐛 Bug Report
3
+ about: Found a bug? Help us debug the duck!
4
+ title: 'bug: '
5
+ labels: ['bug', '🐛 needs triage']
6
+ assignees: ''
7
+ ---
8
+
9
+ ## 🦆 Duck Debugging Report
10
+
11
+ Thanks for helping us squash bugs! Even rubber ducks need debugging sometimes. 🔧
12
+
13
+ ```
14
+ __
15
+ <(o )___
16
+ ( ._> / "Quack! Something's not right here..."
17
+ `---'
18
+ ```
19
+
20
+ ### 🐛 What's Wrong?
21
+ **Describe the bug clearly:**
22
+ <!-- A clear and concise description of what the bug is -->
23
+
24
+ ### 🔄 How to Reproduce
25
+ **Steps to make the bug happen:**
26
+ 1. Go to '...'
27
+ 2. Click on '...'
28
+ 3. Enter '...'
29
+ 4. See error
30
+
31
+ ### 🎯 Expected Behavior
32
+ **What should have happened:**
33
+ <!-- A clear description of what you expected to happen -->
34
+
35
+ ### 📷 Screenshots
36
+ **If applicable, add screenshots to help explain your problem:**
37
+ <!-- Drag and drop images here -->
38
+
39
+ ### 🌍 Your Duck Pond Environment
40
+ **Please complete the following information:**
41
+ - **OS:** [e.g., macOS 14.0, Ubuntu 22.04, Windows 11]
42
+ - **Node.js version:** [e.g., 20.5.0]
43
+ - **MCP Rubber Duck version:** [e.g., 1.2.0]
44
+ - **Installation method:** [e.g., npm, Docker, source]
45
+ - **LLM providers configured:** [e.g., OpenAI, Gemini, Groq]
46
+
47
+ ### 🔍 Error Details
48
+ **Console output or error messages:**
49
+ ```
50
+ Paste any error messages or logs here
51
+ ```
52
+
53
+ ### 📋 Additional Context
54
+ **Anything else that might help:**
55
+ <!-- Add any other context about the problem here -->
56
+
57
+ ### ✅ Checklist
58
+ - [ ] I searched existing issues to make sure this isn't a duplicate
59
+ - [ ] I included all the information requested above
60
+ - [ ] I can reproduce this bug consistently
61
+ - [ ] I'm using a supported version of Node.js (20+)
62
+
63
+ ---
64
+
65
+ *"The best way to debug code is to explain it to a rubber duck. Thanks for explaining this bug to us!" 🦆*
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: ✨ Feature Request
3
+ about: Suggest an idea to make our ducks even more awesome!
4
+ title: 'feat: '
5
+ labels: ['enhancement', '✨ feature request']
6
+ assignees: ''
7
+ ---
8
+
9
+ ## 🦆 Duck Enhancement Proposal
10
+
11
+ Got an idea that would make our duck pond even better? We're all ears! (Do ducks have ears? 🤔)
12
+
13
+ ```
14
+ __
15
+ <(o )___
16
+ ( ._> / "Quack! Tell me about your brilliant idea!"
17
+ `---'
18
+ ```
19
+
20
+ ### 💡 The Problem
21
+ **What problem would this feature solve?**
22
+ <!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
23
+
24
+ ### 🚀 Proposed Solution
25
+ **What would you like to happen?**
26
+ <!-- A clear and concise description of what you want to happen -->
27
+
28
+ ### 🦆 Duck Use Cases
29
+ **How would this make our ducks better?**
30
+ <!-- Describe specific scenarios where this feature would be useful -->
31
+ - **Example 1:** When using the duck council feature, users could...
32
+ - **Example 2:** When configuring providers, it would help to...
33
+
34
+ ### 🎯 Alternatives Considered
35
+ **What other solutions did you think about?**
36
+ <!-- A clear and concise description of any alternative solutions or features you've considered -->
37
+
38
+ ### 📋 Implementation Ideas
39
+ **Any thoughts on how this could work?** *(optional)*
40
+ <!-- If you have ideas about implementation, share them! No pressure though. -->
41
+
42
+ ### 🌟 Additional Context
43
+ **Anything else that would help?**
44
+ <!-- Add any other context, screenshots, mockups, or examples about the feature request here -->
45
+
46
+ ### 🔗 Related Issues
47
+ **Are there any related issues or discussions?**
48
+ <!-- Link to any related issues or discussions -->
49
+
50
+ ### ✅ Checklist
51
+ - [ ] I searched existing issues to make sure this isn't a duplicate
52
+ - [ ] I described the problem this feature would solve
53
+ - [ ] I explained how this would benefit users
54
+ - [ ] I considered alternative approaches
55
+
56
+ ---
57
+
58
+ *"Every great feature starts with a great idea. Thanks for sharing yours with our duck pond!" 🦆✨*