mcp-rubber-duck 1.7.0 → 1.9.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 (169) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +274 -2
  3. package/audit-ci.json +2 -1
  4. package/dist/config/config.d.ts +2 -0
  5. package/dist/config/config.d.ts.map +1 -1
  6. package/dist/config/config.js +144 -1
  7. package/dist/config/config.js.map +1 -1
  8. package/dist/config/types.d.ts +1084 -2
  9. package/dist/config/types.d.ts.map +1 -1
  10. package/dist/config/types.js +59 -0
  11. package/dist/config/types.js.map +1 -1
  12. package/dist/guardrails/context.d.ts +10 -0
  13. package/dist/guardrails/context.d.ts.map +1 -0
  14. package/dist/guardrails/context.js +35 -0
  15. package/dist/guardrails/context.js.map +1 -0
  16. package/dist/guardrails/errors.d.ts +26 -0
  17. package/dist/guardrails/errors.d.ts.map +1 -0
  18. package/dist/guardrails/errors.js +42 -0
  19. package/dist/guardrails/errors.js.map +1 -0
  20. package/dist/guardrails/index.d.ts +6 -0
  21. package/dist/guardrails/index.d.ts.map +1 -0
  22. package/dist/guardrails/index.js +11 -0
  23. package/dist/guardrails/index.js.map +1 -0
  24. package/dist/guardrails/plugins/base-plugin.d.ts +35 -0
  25. package/dist/guardrails/plugins/base-plugin.d.ts.map +1 -0
  26. package/dist/guardrails/plugins/base-plugin.js +70 -0
  27. package/dist/guardrails/plugins/base-plugin.js.map +1 -0
  28. package/dist/guardrails/plugins/index.d.ts +6 -0
  29. package/dist/guardrails/plugins/index.d.ts.map +1 -0
  30. package/dist/guardrails/plugins/index.js +6 -0
  31. package/dist/guardrails/plugins/index.js.map +1 -0
  32. package/dist/guardrails/plugins/pattern-blocker.d.ts +27 -0
  33. package/dist/guardrails/plugins/pattern-blocker.d.ts.map +1 -0
  34. package/dist/guardrails/plugins/pattern-blocker.js +140 -0
  35. package/dist/guardrails/plugins/pattern-blocker.js.map +1 -0
  36. package/dist/guardrails/plugins/pii-redactor/detectors.d.ts +40 -0
  37. package/dist/guardrails/plugins/pii-redactor/detectors.d.ts.map +1 -0
  38. package/dist/guardrails/plugins/pii-redactor/detectors.js +134 -0
  39. package/dist/guardrails/plugins/pii-redactor/detectors.js.map +1 -0
  40. package/dist/guardrails/plugins/pii-redactor/index.d.ts +28 -0
  41. package/dist/guardrails/plugins/pii-redactor/index.d.ts.map +1 -0
  42. package/dist/guardrails/plugins/pii-redactor/index.js +157 -0
  43. package/dist/guardrails/plugins/pii-redactor/index.js.map +1 -0
  44. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.d.ts +33 -0
  45. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.d.ts.map +1 -0
  46. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.js +70 -0
  47. package/dist/guardrails/plugins/pii-redactor/pseudonymizer.js.map +1 -0
  48. package/dist/guardrails/plugins/rate-limiter.d.ts +28 -0
  49. package/dist/guardrails/plugins/rate-limiter.d.ts.map +1 -0
  50. package/dist/guardrails/plugins/rate-limiter.js +91 -0
  51. package/dist/guardrails/plugins/rate-limiter.js.map +1 -0
  52. package/dist/guardrails/plugins/token-limiter.d.ts +30 -0
  53. package/dist/guardrails/plugins/token-limiter.d.ts.map +1 -0
  54. package/dist/guardrails/plugins/token-limiter.js +98 -0
  55. package/dist/guardrails/plugins/token-limiter.js.map +1 -0
  56. package/dist/guardrails/service.d.ts +38 -0
  57. package/dist/guardrails/service.d.ts.map +1 -0
  58. package/dist/guardrails/service.js +183 -0
  59. package/dist/guardrails/service.js.map +1 -0
  60. package/dist/guardrails/types.d.ts +96 -0
  61. package/dist/guardrails/types.d.ts.map +1 -0
  62. package/dist/guardrails/types.js +2 -0
  63. package/dist/guardrails/types.js.map +1 -0
  64. package/dist/prompts/architecture.d.ts +6 -0
  65. package/dist/prompts/architecture.d.ts.map +1 -0
  66. package/dist/prompts/architecture.js +103 -0
  67. package/dist/prompts/architecture.js.map +1 -0
  68. package/dist/prompts/assumptions.d.ts +6 -0
  69. package/dist/prompts/assumptions.d.ts.map +1 -0
  70. package/dist/prompts/assumptions.js +72 -0
  71. package/dist/prompts/assumptions.js.map +1 -0
  72. package/dist/prompts/blindspots.d.ts +6 -0
  73. package/dist/prompts/blindspots.d.ts.map +1 -0
  74. package/dist/prompts/blindspots.js +71 -0
  75. package/dist/prompts/blindspots.js.map +1 -0
  76. package/dist/prompts/diverge-converge.d.ts +6 -0
  77. package/dist/prompts/diverge-converge.d.ts.map +1 -0
  78. package/dist/prompts/diverge-converge.js +85 -0
  79. package/dist/prompts/diverge-converge.js.map +1 -0
  80. package/dist/prompts/index.d.ts +22 -0
  81. package/dist/prompts/index.d.ts.map +1 -0
  82. package/dist/prompts/index.js +57 -0
  83. package/dist/prompts/index.js.map +1 -0
  84. package/dist/prompts/perspectives.d.ts +7 -0
  85. package/dist/prompts/perspectives.d.ts.map +1 -0
  86. package/dist/prompts/perspectives.js +65 -0
  87. package/dist/prompts/perspectives.js.map +1 -0
  88. package/dist/prompts/red-team.d.ts +6 -0
  89. package/dist/prompts/red-team.d.ts.map +1 -0
  90. package/dist/prompts/red-team.js +83 -0
  91. package/dist/prompts/red-team.js.map +1 -0
  92. package/dist/prompts/reframe.d.ts +6 -0
  93. package/dist/prompts/reframe.d.ts.map +1 -0
  94. package/dist/prompts/reframe.js +71 -0
  95. package/dist/prompts/reframe.js.map +1 -0
  96. package/dist/prompts/tradeoffs.d.ts +6 -0
  97. package/dist/prompts/tradeoffs.d.ts.map +1 -0
  98. package/dist/prompts/tradeoffs.js +87 -0
  99. package/dist/prompts/tradeoffs.js.map +1 -0
  100. package/dist/prompts/types.d.ts +14 -0
  101. package/dist/prompts/types.d.ts.map +1 -0
  102. package/dist/prompts/types.js +2 -0
  103. package/dist/prompts/types.js.map +1 -0
  104. package/dist/providers/duck-provider-enhanced.d.ts +2 -1
  105. package/dist/providers/duck-provider-enhanced.d.ts.map +1 -1
  106. package/dist/providers/duck-provider-enhanced.js +55 -6
  107. package/dist/providers/duck-provider-enhanced.js.map +1 -1
  108. package/dist/providers/enhanced-manager.d.ts +2 -1
  109. package/dist/providers/enhanced-manager.d.ts.map +1 -1
  110. package/dist/providers/enhanced-manager.js +3 -3
  111. package/dist/providers/enhanced-manager.js.map +1 -1
  112. package/dist/providers/manager.d.ts +3 -1
  113. package/dist/providers/manager.d.ts.map +1 -1
  114. package/dist/providers/manager.js +4 -2
  115. package/dist/providers/manager.js.map +1 -1
  116. package/dist/providers/provider.d.ts +3 -1
  117. package/dist/providers/provider.d.ts.map +1 -1
  118. package/dist/providers/provider.js +43 -3
  119. package/dist/providers/provider.js.map +1 -1
  120. package/dist/server.d.ts +1 -0
  121. package/dist/server.d.ts.map +1 -1
  122. package/dist/server.js +48 -7
  123. package/dist/server.js.map +1 -1
  124. package/dist/services/function-bridge.d.ts +3 -1
  125. package/dist/services/function-bridge.d.ts.map +1 -1
  126. package/dist/services/function-bridge.js +40 -1
  127. package/dist/services/function-bridge.js.map +1 -1
  128. package/package.json +1 -1
  129. package/src/config/config.ts +187 -1
  130. package/src/config/types.ts +73 -0
  131. package/src/guardrails/context.ts +37 -0
  132. package/src/guardrails/errors.ts +46 -0
  133. package/src/guardrails/index.ts +20 -0
  134. package/src/guardrails/plugins/base-plugin.ts +103 -0
  135. package/src/guardrails/plugins/index.ts +5 -0
  136. package/src/guardrails/plugins/pattern-blocker.ts +190 -0
  137. package/src/guardrails/plugins/pii-redactor/detectors.ts +200 -0
  138. package/src/guardrails/plugins/pii-redactor/index.ts +203 -0
  139. package/src/guardrails/plugins/pii-redactor/pseudonymizer.ts +91 -0
  140. package/src/guardrails/plugins/rate-limiter.ts +142 -0
  141. package/src/guardrails/plugins/token-limiter.ts +155 -0
  142. package/src/guardrails/service.ts +209 -0
  143. package/src/guardrails/types.ts +120 -0
  144. package/src/prompts/architecture.ts +111 -0
  145. package/src/prompts/assumptions.ts +80 -0
  146. package/src/prompts/blindspots.ts +79 -0
  147. package/src/prompts/diverge-converge.ts +92 -0
  148. package/src/prompts/index.ts +63 -0
  149. package/src/prompts/perspectives.ts +73 -0
  150. package/src/prompts/red-team.ts +91 -0
  151. package/src/prompts/reframe.ts +78 -0
  152. package/src/prompts/tradeoffs.ts +95 -0
  153. package/src/prompts/types.ts +14 -0
  154. package/src/providers/duck-provider-enhanced.ts +76 -7
  155. package/src/providers/enhanced-manager.ts +5 -3
  156. package/src/providers/manager.ts +6 -3
  157. package/src/providers/provider.ts +57 -6
  158. package/src/server.ts +55 -6
  159. package/src/services/function-bridge.ts +53 -2
  160. package/tests/guardrails/config.test.ts +267 -0
  161. package/tests/guardrails/errors.test.ts +109 -0
  162. package/tests/guardrails/plugins/pattern-blocker.test.ts +309 -0
  163. package/tests/guardrails/plugins/pii-redactor.test.ts +1004 -0
  164. package/tests/guardrails/plugins/rate-limiter.test.ts +310 -0
  165. package/tests/guardrails/plugins/token-limiter.test.ts +216 -0
  166. package/tests/guardrails/service.test.ts +911 -0
  167. package/tests/mcp-bridge.test.ts +248 -0
  168. package/tests/prompts.test.ts +314 -0
  169. package/tests/providers.test.ts +739 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [1.9.0](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.8.0...v1.9.0) (2026-01-15)
2
+
3
+
4
+ ### Features
5
+
6
+ * add pluggable guardrails system for LLM request/response interception ([8e86d5b](https://github.com/nesquikm/mcp-rubber-duck/commit/8e86d5b8853cc95e6c5efe9e75af7d0ce2bb1ac0))
7
+ * implement max_output_tokens, fix modify action, add tests and docs ([27457d7](https://github.com/nesquikm/mcp-rubber-duck/commit/27457d79ab68377921996e0c0336cf7e84e0ea8b))
8
+
9
+ # [1.8.0](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.7.0...v1.8.0) (2026-01-14)
10
+
11
+
12
+ ### Features
13
+
14
+ * add MCP prompts capability with 8 multi-LLM focused templates ([e62bfc1](https://github.com/nesquikm/mcp-rubber-duck/commit/e62bfc10dc3302ef8ea254684fb2bcaec1ac7fdd)), closes [#23](https://github.com/nesquikm/mcp-rubber-duck/issues/23)
15
+
1
16
  # [1.7.0](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.6.1...v1.7.0) (2026-01-13)
2
17
 
3
18
 
package/README.md CHANGED
@@ -19,10 +19,14 @@ An MCP (Model Context Protocol) server that acts as a bridge to query multiple O
19
19
  - [Configuration](#configuration)
20
20
  - [Claude Desktop Configuration](#claude-desktop-configuration)
21
21
  - [MCP Bridge](#mcp-bridge---connect-to-other-mcp-servers)
22
+ - [Guardrails](#guardrails---safety--compliance-layer)
22
23
  - [Available Tools](#available-tools)
23
24
  - [Basic Tools](#basic-tools)
24
25
  - [Multi-Agent Tools](#multi-agent-consensus--debate-tools)
25
26
  - [MCP Bridge Tools](#mcp-bridge-tools)
27
+ - [Available Prompts](#available-prompts)
28
+ - [Known Limitations (Claude Code)](#known-limitations-claude-code)
29
+ - [Recommended: Use Prompts as Templates](#recommended-use-prompts-as-templates)
26
30
  - [Usage Examples](#usage-examples)
27
31
  - [Provider-Specific Setup](#provider-specific-setup)
28
32
  - [Docker Support](#docker-support)
@@ -40,12 +44,15 @@ An MCP (Model Context Protocol) server that acts as a bridge to query multiple O
40
44
  - ⚖️ **LLM-as-Judge**: Have ducks evaluate and rank each other's responses
41
45
  - 🔄 **Iterative Refinement**: Two ducks collaboratively improve responses
42
46
  - 🎓 **Structured Debates**: Oxford, Socratic, and adversarial debate formats
47
+ - 📝 **MCP Prompts**: 8 reusable prompt templates for multi-LLM workflows (via `/` commands)
43
48
  - 💾 **Response Caching**: Avoid duplicate API calls with intelligent caching
44
49
  - 🔁 **Automatic Failover**: Falls back to other providers if primary fails
45
50
  - 📊 **Health Monitoring**: Real-time health checks for all providers
46
51
  - 💰 **Usage Tracking**: Track requests, tokens, and estimated costs per provider
47
52
  - 🔗 **MCP Bridge**: Connect ducks to other MCP servers for extended functionality
48
- - 🛡️ **Granular Security**: Per-server approval controls with session-based approvals
53
+ - 🛡️ **Guardrails**: Pluggable safety layer with rate limiting, token limits, pattern blocking, and PII redaction
54
+ - 🔐 **Granular Security**: Per-server approval controls with session-based approvals
55
+ - 🏷️ **Tool Annotations**: MCP-compliant hints for tool behavior (read-only, destructive, etc.)
49
56
  - 🎨 **Fun Duck Theme**: Rubber duck debugging with personality!
50
57
 
51
58
  ## Supported Providers
@@ -288,7 +295,7 @@ Use the compare_ducks tool with prompt: "Explain async/await in JavaScript"
288
295
 
289
296
  #### Test Specific Models
290
297
  ```
291
- Use the ask_duck tool with prompt: "Hello", provider: "openai", model: "gpt-4"
298
+ Use the ask_duck tool with prompt: "Hello", provider: "openai", model: "gpt-4o"
292
299
  ```
293
300
 
294
301
  ### Troubleshooting Claude Desktop Setup
@@ -438,6 +445,161 @@ When using `always` mode, the system remembers your approvals:
438
445
 
439
446
  This eliminates approval fatigue while maintaining security!
440
447
 
448
+ ## Guardrails - Safety & Compliance Layer
449
+
450
+ Guardrails provide a pluggable safety and compliance layer that intercepts LLM requests and responses. Protect against rate abuse, limit token usage, block sensitive patterns, and automatically redact PII.
451
+
452
+ ### Quick Setup
453
+
454
+ ```bash
455
+ # Enable guardrails with PII protection
456
+ GUARDRAILS_ENABLED="true"
457
+ GUARDRAILS_PII_REDACTOR_ENABLED="true"
458
+ GUARDRAILS_PII_REDACTOR_ALLOWLIST_DOMAINS="mycompany.com"
459
+ ```
460
+
461
+ ### Global Settings
462
+
463
+ | Variable | Type | Default | Description |
464
+ |----------|------|---------|-------------|
465
+ | `GUARDRAILS_ENABLED` | boolean | `false` | Master switch for guardrails system |
466
+ | `GUARDRAILS_LOG_VIOLATIONS` | boolean | `false` | Log when guardrails detect violations |
467
+ | `GUARDRAILS_LOG_MODIFICATIONS` | boolean | `false` | Log when guardrails modify content |
468
+ | `GUARDRAILS_FAIL_OPEN` | boolean | `false` | If `true`, allow requests when guardrails error; if `false`, block on error |
469
+
470
+ ### Rate Limiter
471
+
472
+ Prevent API abuse by limiting request frequency.
473
+
474
+ ```bash
475
+ GUARDRAILS_RATE_LIMITER_ENABLED="true"
476
+ GUARDRAILS_RATE_LIMITER_REQUESTS_PER_MINUTE="60"
477
+ GUARDRAILS_RATE_LIMITER_REQUESTS_PER_HOUR="500"
478
+ GUARDRAILS_RATE_LIMITER_PER_PROVIDER="true" # Track limits per provider
479
+ GUARDRAILS_RATE_LIMITER_BURST_ALLOWANCE="5" # Extra requests for short bursts
480
+ ```
481
+
482
+ | Variable | Type | Default | Description |
483
+ |----------|------|---------|-------------|
484
+ | `GUARDRAILS_RATE_LIMITER_ENABLED` | boolean | `false` | Enable rate limiting |
485
+ | `GUARDRAILS_RATE_LIMITER_REQUESTS_PER_MINUTE` | number | `60` | Max requests per minute |
486
+ | `GUARDRAILS_RATE_LIMITER_REQUESTS_PER_HOUR` | number | `1000` | Max requests per hour |
487
+ | `GUARDRAILS_RATE_LIMITER_PER_PROVIDER` | boolean | `false` | Track limits per provider vs global |
488
+ | `GUARDRAILS_RATE_LIMITER_BURST_ALLOWANCE` | number | `5` | Extra requests allowed for bursts |
489
+
490
+ ### Token Limiter
491
+
492
+ Control token usage for cost management.
493
+
494
+ ```bash
495
+ GUARDRAILS_TOKEN_LIMITER_ENABLED="true"
496
+ GUARDRAILS_TOKEN_LIMITER_MAX_INPUT_TOKENS="100000"
497
+ GUARDRAILS_TOKEN_LIMITER_MAX_OUTPUT_TOKENS="16000"
498
+ GUARDRAILS_TOKEN_LIMITER_WARN_AT_PERCENTAGE="80"
499
+ ```
500
+
501
+ | Variable | Type | Default | Description |
502
+ |----------|------|---------|-------------|
503
+ | `GUARDRAILS_TOKEN_LIMITER_ENABLED` | boolean | `false` | Enable token limiting |
504
+ | `GUARDRAILS_TOKEN_LIMITER_MAX_INPUT_TOKENS` | number | `8192` | Max tokens in input prompt |
505
+ | `GUARDRAILS_TOKEN_LIMITER_MAX_OUTPUT_TOKENS` | number | - | Max tokens in response |
506
+ | `GUARDRAILS_TOKEN_LIMITER_WARN_AT_PERCENTAGE` | number | `80` | Warn when usage hits this % |
507
+
508
+ ### Pattern Blocker
509
+
510
+ Block or redact sensitive patterns in requests.
511
+
512
+ ```bash
513
+ GUARDRAILS_PATTERN_BLOCKER_ENABLED="true"
514
+ GUARDRAILS_PATTERN_BLOCKER_PATTERNS="confidential,internal-only"
515
+ GUARDRAILS_PATTERN_BLOCKER_PATTERNS_REGEX="secret-\\d{4}"
516
+ GUARDRAILS_PATTERN_BLOCKER_CASE_SENSITIVE="false"
517
+ GUARDRAILS_PATTERN_BLOCKER_ACTION="block" # block, warn, or redact
518
+ ```
519
+
520
+ | Variable | Type | Default | Description |
521
+ |----------|------|---------|-------------|
522
+ | `GUARDRAILS_PATTERN_BLOCKER_ENABLED` | boolean | `false` | Enable pattern blocking |
523
+ | `GUARDRAILS_PATTERN_BLOCKER_PATTERNS` | string | - | Comma-separated literal patterns |
524
+ | `GUARDRAILS_PATTERN_BLOCKER_PATTERNS_REGEX` | string | - | Comma-separated regex patterns |
525
+ | `GUARDRAILS_PATTERN_BLOCKER_CASE_SENSITIVE` | boolean | `false` | Case-sensitive matching |
526
+ | `GUARDRAILS_PATTERN_BLOCKER_ACTION` | string | `block` | Action: `block`, `warn`, or `redact` |
527
+
528
+ ### PII Redactor
529
+
530
+ Automatically detect and redact personally identifiable information.
531
+
532
+ ```bash
533
+ GUARDRAILS_PII_REDACTOR_ENABLED="true"
534
+ GUARDRAILS_PII_REDACTOR_DETECT_EMAILS="true"
535
+ GUARDRAILS_PII_REDACTOR_DETECT_PHONES="true"
536
+ GUARDRAILS_PII_REDACTOR_DETECT_SSN="true"
537
+ GUARDRAILS_PII_REDACTOR_DETECT_API_KEYS="true"
538
+ GUARDRAILS_PII_REDACTOR_DETECT_CREDIT_CARDS="true"
539
+ GUARDRAILS_PII_REDACTOR_DETECT_IP_ADDRESSES="true"
540
+ GUARDRAILS_PII_REDACTOR_ALLOWLIST_DOMAINS="gmail.com,company.com"
541
+ GUARDRAILS_PII_REDACTOR_RESTORE_ON_RESPONSE="true"
542
+ ```
543
+
544
+ | Variable | Type | Default | Description |
545
+ |----------|------|---------|-------------|
546
+ | `GUARDRAILS_PII_REDACTOR_ENABLED` | boolean | `false` | Enable PII detection/redaction |
547
+ | `GUARDRAILS_PII_REDACTOR_DETECT_EMAILS` | boolean | `true` | Detect email addresses |
548
+ | `GUARDRAILS_PII_REDACTOR_DETECT_PHONES` | boolean | `true` | Detect phone numbers |
549
+ | `GUARDRAILS_PII_REDACTOR_DETECT_SSN` | boolean | `true` | Detect US Social Security Numbers |
550
+ | `GUARDRAILS_PII_REDACTOR_DETECT_API_KEYS` | boolean | `true` | Detect API keys (sk-*, gsk_*, etc.) |
551
+ | `GUARDRAILS_PII_REDACTOR_DETECT_CREDIT_CARDS` | boolean | `true` | Detect credit card numbers |
552
+ | `GUARDRAILS_PII_REDACTOR_DETECT_IP_ADDRESSES` | boolean | `false` | Detect IPv4 addresses |
553
+ | `GUARDRAILS_PII_REDACTOR_ALLOWLIST` | string | - | Comma-separated exact values to skip |
554
+ | `GUARDRAILS_PII_REDACTOR_ALLOWLIST_DOMAINS` | string | - | Comma-separated email domains to skip |
555
+ | `GUARDRAILS_PII_REDACTOR_RESTORE_ON_RESPONSE` | boolean | `false` | Restore original PII in responses |
556
+ | `GUARDRAILS_PII_REDACTOR_LOG_DETECTIONS` | boolean | `false` | Log when PII is detected |
557
+
558
+ **How PII Redaction Works:**
559
+ 1. User sends: `"Contact john@secret.com for details"`
560
+ 2. Pre-request: Redacted to `"Contact [EMAIL_1] for details"`
561
+ 3. LLM processes the redacted text
562
+ 4. Post-response: If `restore_on_response=true`, `[EMAIL_1]` → `john@secret.com`
563
+
564
+ ### Example: Full Production Config
565
+
566
+ ```bash
567
+ # Enable guardrails
568
+ GUARDRAILS_ENABLED="true"
569
+ GUARDRAILS_LOG_VIOLATIONS="true"
570
+
571
+ # Rate limiting
572
+ GUARDRAILS_RATE_LIMITER_ENABLED="true"
573
+ GUARDRAILS_RATE_LIMITER_REQUESTS_PER_MINUTE="60"
574
+ GUARDRAILS_RATE_LIMITER_REQUESTS_PER_HOUR="500"
575
+
576
+ # Token limits
577
+ GUARDRAILS_TOKEN_LIMITER_ENABLED="true"
578
+ GUARDRAILS_TOKEN_LIMITER_MAX_INPUT_TOKENS="100000"
579
+ GUARDRAILS_TOKEN_LIMITER_MAX_OUTPUT_TOKENS="16000"
580
+
581
+ # Block sensitive patterns
582
+ GUARDRAILS_PATTERN_BLOCKER_ENABLED="true"
583
+ GUARDRAILS_PATTERN_BLOCKER_PATTERNS="confidential,internal-only"
584
+ GUARDRAILS_PATTERN_BLOCKER_ACTION="warn"
585
+
586
+ # PII protection
587
+ GUARDRAILS_PII_REDACTOR_ENABLED="true"
588
+ GUARDRAILS_PII_REDACTOR_ALLOWLIST_DOMAINS="gmail.com,company.com"
589
+ GUARDRAILS_PII_REDACTOR_RESTORE_ON_RESPONSE="true"
590
+ ```
591
+
592
+ ### Guardrail Phases
593
+
594
+ Guardrails intercept at multiple points in the request lifecycle:
595
+
596
+ | Phase | Description | Plugins |
597
+ |-------|-------------|---------|
598
+ | `pre_request` | Before sending to LLM | Rate limiter, Token limiter, Pattern blocker, PII redactor |
599
+ | `post_response` | After receiving from LLM | Token limiter, PII redactor (restore) |
600
+ | `pre_tool_input` | Before MCP tool execution | PII redactor |
601
+ | `post_tool_output` | After MCP tool returns | PII redactor (restore) |
602
+
441
603
  ## Available Tools
442
604
 
443
605
  ### Basic Tools
@@ -621,6 +783,102 @@ Approve or deny a duck's MCP tool request.
621
783
  }
622
784
  ```
623
785
 
786
+ ## Available Prompts
787
+
788
+ MCP Prompts are reusable templates that help you structure questions for multi-LLM analysis. Access them via `/` commands in Claude Desktop or other MCP clients.
789
+
790
+ **Key Concept**: Unlike tools (which execute actions), prompts help you *frame your questions* to get better multi-perspective responses from multiple LLMs.
791
+
792
+ | Prompt | Purpose | Required Arguments |
793
+ |--------|---------|-------------------|
794
+ | 📊 `perspectives` | Multi-angle analysis with assigned lenses | `problem`, `perspectives` |
795
+ | 🔍 `assumptions` | Surface hidden assumptions in plans | `plan` |
796
+ | 👁️ `blindspots` | Hunt for overlooked risks and gaps | `proposal` |
797
+ | ⚖️ `tradeoffs` | Structured option comparison | `options`, `criteria` |
798
+ | 🛡️ `red_team` | Security/risk analysis from multiple angles | `target` |
799
+ | 🔄 `reframe` | Problem reframing at different levels | `problem` |
800
+ | 🏗️ `architecture` | Design review across concerns | `design`, `workloads`, `priorities` |
801
+ | 💡 `diverge_converge` | Divergent exploration then convergence | `challenge` |
802
+
803
+ ### Example: Using `perspectives` with Duck Council
804
+
805
+ The most reliable way to use prompts is as templates with duck tools:
806
+
807
+ ```
808
+ Use duck_council with this prompt:
809
+
810
+ "Analyze this problem from multiple perspectives:
811
+
812
+ **PROBLEM:** Review this authentication middleware for our API
813
+
814
+ **PERSPECTIVES:** security, performance, maintainability, error handling
815
+
816
+ **CONTEXT:** [paste your code here]
817
+
818
+ Each LLM should adopt ONE lens and provide targeted analysis from that viewpoint."
819
+ ```
820
+
821
+ ### Example: Using `tradeoffs` with Compare Ducks
822
+
823
+ ```
824
+ Use compare_ducks with this prompt:
825
+
826
+ "Analyze these technical options:
827
+
828
+ **OPTIONS:** PostgreSQL, MongoDB, Redis
829
+
830
+ **CRITERIA:** scalability, query flexibility, operational complexity, cost
831
+
832
+ **CONTEXT:** Real-time analytics dashboard with 10k concurrent users
833
+
834
+ Score each option against each criterion (1-5) and identify the biggest trade-off."
835
+ ```
836
+
837
+ This approach works reliably and leverages multi-LLM analysis.
838
+
839
+ ### Known Limitations (Claude Code)
840
+
841
+ MCP prompts are correctly implemented per the [MCP specification](https://modelcontextprotocol.io/specification/2025-06-18/server/prompts), but Claude Code's support for MCP prompts has limitations:
842
+
843
+ | Issue | Status | Workaround |
844
+ |-------|--------|------------|
845
+ | Must type `(MCP)` suffix | Required | Use `/rubber-duck:reframe (MCP)` not `/rubber-duck:reframe` |
846
+ | Arguments with spaces broken | [Won't fix](https://github.com/anthropics/claude-code/issues/6657) | Use single words: `problem="checkout-abandonment"` |
847
+ | Argument hints not shown | Missing | See table above for required arguments |
848
+ | Optional-only prompts need input | [Won't fix](https://github.com/anthropics/claude-code/issues/5597) | Type at least one character |
849
+
850
+ **Example that works:**
851
+ ```
852
+ /rubber-duck:reframe (MCP) problem="slow-api-responses"
853
+ ```
854
+
855
+ **Example that fails:**
856
+ ```
857
+ /rubber-duck:reframe (MCP) problem="Users abandon checkout at payment"
858
+ ↑ spaces break argument parsing
859
+ ```
860
+
861
+ ### Recommended: Use Prompts as Templates
862
+
863
+ For the best experience, use prompts as templates with duck tools directly. Copy the prompt structure and send to `duck_council`, `compare_ducks`, or `ask_duck`:
864
+
865
+ ```
866
+ Use duck_council with this prompt:
867
+
868
+ "Analyze this problem from multiple perspectives:
869
+
870
+ **PROBLEM:** Users abandon checkout at payment step
871
+
872
+ **PERSPECTIVES:** security, UX, performance, reliability
873
+
874
+ Each LLM should adopt ONE lens and provide targeted analysis."
875
+ ```
876
+
877
+ This approach:
878
+ - ✅ Works reliably with full argument text
879
+ - ✅ Leverages multi-LLM tools (council, compare, vote)
880
+ - ✅ No Claude Code parsing issues
881
+
624
882
  ## Usage Examples
625
883
 
626
884
  ### Basic Query
@@ -961,12 +1219,26 @@ mcp-rubber-duck/
961
1219
  │ ├── config/ # Configuration management
962
1220
  │ ├── providers/ # OpenAI client wrapper
963
1221
  │ ├── tools/ # MCP tool implementations
1222
+ │ ├── prompts/ # MCP prompt templates
964
1223
  │ ├── services/ # Health, cache, conversations
965
1224
  │ └── utils/ # Logging, ASCII art
966
1225
  ├── config/ # Configuration examples
967
1226
  └── tests/ # Test suites
968
1227
  ```
969
1228
 
1229
+ ### Tool Annotations
1230
+
1231
+ All tools include MCP-compliant annotations that describe their behavioral characteristics:
1232
+
1233
+ | Annotation | Meaning |
1234
+ |------------|---------|
1235
+ | `readOnlyHint` | Tool doesn't modify any state |
1236
+ | `destructiveHint` | Tool performs irreversible operations |
1237
+ | `idempotentHint` | Tool is safe to retry multiple times |
1238
+ | `openWorldHint` | Tool accesses external systems (APIs, network) |
1239
+
1240
+ These help MCP clients make informed decisions about tool execution and user confirmations.
1241
+
970
1242
  ## Troubleshooting
971
1243
 
972
1244
  ### Provider Not Working
package/audit-ci.json CHANGED
@@ -5,6 +5,7 @@
5
5
  "critical": true,
6
6
  "report-type": "summary",
7
7
  "allowlist": [
8
- "GHSA-5j98-mcp5-4vw2"
8
+ "GHSA-5j98-mcp5-4vw2",
9
+ "GHSA-73rr-hh4g-fpgx"
9
10
  ]
10
11
  }
@@ -12,6 +12,8 @@ export declare class ConfigManager {
12
12
  private getTrustedToolsByServerFromEnv;
13
13
  private getCustomProvidersFromEnv;
14
14
  private getMCPServersFromEnv;
15
+ private getGuardrailsConfig;
16
+ private getGuardrailsPluginsFromEnv;
15
17
  getConfig(): Config;
16
18
  getProvider(name: string): {
17
19
  base_url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAkE,MAAM,YAAY,CAAC;AAKpG,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAK/B,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,UAAU;IAqClB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,8BAA8B;IA2BtC,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,oBAAoB;IAkE5B,SAAS,IAAI,MAAM;IAInB,WAAW,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;IAIxB,kBAAkB;;;;;;;;;;;IAOlB,eAAe;;;;;;;;;;;IAIf,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;CAGtC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EAMP,MAAM,YAAY,CAAC;AAKpB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAK/B,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,UAAU;IAqClB,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,8BAA8B;IA2BtC,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,mBAAmB;IA4C3B,OAAO,CAAC,2BAA2B;IAoInC,SAAS,IAAI,MAAM;IAInB,WAAW,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;IAIxB,kBAAkB;;;;;;;;;;;IAOlB,eAAe;;;;;;;;;;;IAIf,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;CAGtC"}
@@ -1,7 +1,7 @@
1
1
  import { readFileSync, existsSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import * as dotenv from 'dotenv';
4
- import { ConfigSchema } from './types.js';
4
+ import { ConfigSchema, } from './types.js';
5
5
  import { logger } from '../utils/logger.js';
6
6
  dotenv.config();
7
7
  export class ConfigManager {
@@ -82,6 +82,8 @@ export class ConfigManager {
82
82
  }
83
83
  // Apply MCP bridge configuration from environment
84
84
  merged.mcp_bridge = this.getMCPBridgeConfig(merged.mcp_bridge);
85
+ // Apply guardrails configuration from environment
86
+ merged.guardrails = this.getGuardrailsConfig(merged.guardrails);
85
87
  return merged;
86
88
  }
87
89
  getDefaultProviders() {
@@ -279,6 +281,147 @@ export class ConfigManager {
279
281
  });
280
282
  return servers;
281
283
  }
284
+ getGuardrailsConfig(existingConfig = {}) {
285
+ // Don't override if guardrails is explicitly disabled
286
+ if (existingConfig?.enabled === false) {
287
+ return existingConfig;
288
+ }
289
+ const guardrailsConfig = { ...existingConfig };
290
+ // Enable guardrails if environment variable is set
291
+ if (process.env.GUARDRAILS_ENABLED !== undefined) {
292
+ guardrailsConfig.enabled = process.env.GUARDRAILS_ENABLED === 'true';
293
+ }
294
+ // Global guardrails settings
295
+ if (process.env.GUARDRAILS_LOG_VIOLATIONS !== undefined) {
296
+ guardrailsConfig.log_violations = process.env.GUARDRAILS_LOG_VIOLATIONS === 'true';
297
+ }
298
+ if (process.env.GUARDRAILS_LOG_MODIFICATIONS !== undefined) {
299
+ guardrailsConfig.log_modifications = process.env.GUARDRAILS_LOG_MODIFICATIONS === 'true';
300
+ }
301
+ if (process.env.GUARDRAILS_FAIL_OPEN !== undefined) {
302
+ guardrailsConfig.fail_open = process.env.GUARDRAILS_FAIL_OPEN === 'true';
303
+ }
304
+ // Initialize plugins object if any plugin env vars are set
305
+ const plugins = this.getGuardrailsPluginsFromEnv(guardrailsConfig.plugins || {});
306
+ if (Object.keys(plugins).length > 0) {
307
+ guardrailsConfig.plugins = plugins;
308
+ // Auto-enable guardrails if any plugin is enabled
309
+ if (!guardrailsConfig.enabled) {
310
+ const anyEnabled = Object.values(plugins).some((p) => p && typeof p === 'object' && 'enabled' in p && p.enabled === true);
311
+ if (anyEnabled) {
312
+ guardrailsConfig.enabled = true;
313
+ }
314
+ }
315
+ }
316
+ return guardrailsConfig.enabled ? guardrailsConfig : undefined;
317
+ }
318
+ getGuardrailsPluginsFromEnv(existingPlugins) {
319
+ const plugins = { ...existingPlugins };
320
+ // Rate Limiter
321
+ if (process.env.GUARDRAILS_RATE_LIMITER_ENABLED !== undefined ||
322
+ existingPlugins.rate_limiter) {
323
+ plugins.rate_limiter = {
324
+ ...existingPlugins.rate_limiter,
325
+ ...(process.env.GUARDRAILS_RATE_LIMITER_ENABLED !== undefined && {
326
+ enabled: process.env.GUARDRAILS_RATE_LIMITER_ENABLED === 'true',
327
+ }),
328
+ ...(process.env.GUARDRAILS_RATE_LIMITER_REQUESTS_PER_MINUTE && {
329
+ requests_per_minute: parseInt(process.env.GUARDRAILS_RATE_LIMITER_REQUESTS_PER_MINUTE),
330
+ }),
331
+ ...(process.env.GUARDRAILS_RATE_LIMITER_REQUESTS_PER_HOUR && {
332
+ requests_per_hour: parseInt(process.env.GUARDRAILS_RATE_LIMITER_REQUESTS_PER_HOUR),
333
+ }),
334
+ ...(process.env.GUARDRAILS_RATE_LIMITER_PER_PROVIDER !== undefined && {
335
+ per_provider: process.env.GUARDRAILS_RATE_LIMITER_PER_PROVIDER === 'true',
336
+ }),
337
+ ...(process.env.GUARDRAILS_RATE_LIMITER_BURST_ALLOWANCE && {
338
+ burst_allowance: parseInt(process.env.GUARDRAILS_RATE_LIMITER_BURST_ALLOWANCE),
339
+ }),
340
+ };
341
+ }
342
+ // Token Limiter
343
+ if (process.env.GUARDRAILS_TOKEN_LIMITER_ENABLED !== undefined ||
344
+ existingPlugins.token_limiter) {
345
+ plugins.token_limiter = {
346
+ ...existingPlugins.token_limiter,
347
+ ...(process.env.GUARDRAILS_TOKEN_LIMITER_ENABLED !== undefined && {
348
+ enabled: process.env.GUARDRAILS_TOKEN_LIMITER_ENABLED === 'true',
349
+ }),
350
+ ...(process.env.GUARDRAILS_TOKEN_LIMITER_MAX_INPUT_TOKENS && {
351
+ max_input_tokens: parseInt(process.env.GUARDRAILS_TOKEN_LIMITER_MAX_INPUT_TOKENS),
352
+ }),
353
+ ...(process.env.GUARDRAILS_TOKEN_LIMITER_MAX_OUTPUT_TOKENS && {
354
+ max_output_tokens: parseInt(process.env.GUARDRAILS_TOKEN_LIMITER_MAX_OUTPUT_TOKENS),
355
+ }),
356
+ ...(process.env.GUARDRAILS_TOKEN_LIMITER_WARN_AT_PERCENTAGE && {
357
+ warn_at_percentage: parseInt(process.env.GUARDRAILS_TOKEN_LIMITER_WARN_AT_PERCENTAGE),
358
+ }),
359
+ };
360
+ }
361
+ // Pattern Blocker
362
+ if (process.env.GUARDRAILS_PATTERN_BLOCKER_ENABLED !== undefined ||
363
+ existingPlugins.pattern_blocker) {
364
+ plugins.pattern_blocker = {
365
+ ...existingPlugins.pattern_blocker,
366
+ ...(process.env.GUARDRAILS_PATTERN_BLOCKER_ENABLED !== undefined && {
367
+ enabled: process.env.GUARDRAILS_PATTERN_BLOCKER_ENABLED === 'true',
368
+ }),
369
+ ...(process.env.GUARDRAILS_PATTERN_BLOCKER_PATTERNS && {
370
+ blocked_patterns: process.env.GUARDRAILS_PATTERN_BLOCKER_PATTERNS.split(',').map((p) => p.trim()),
371
+ }),
372
+ ...(process.env.GUARDRAILS_PATTERN_BLOCKER_PATTERNS_REGEX && {
373
+ blocked_patterns_regex: process.env.GUARDRAILS_PATTERN_BLOCKER_PATTERNS_REGEX.split(',').map((p) => p.trim()),
374
+ }),
375
+ ...(process.env.GUARDRAILS_PATTERN_BLOCKER_CASE_SENSITIVE !== undefined && {
376
+ case_sensitive: process.env.GUARDRAILS_PATTERN_BLOCKER_CASE_SENSITIVE === 'true',
377
+ }),
378
+ ...(process.env.GUARDRAILS_PATTERN_BLOCKER_ACTION && {
379
+ action_on_match: process.env.GUARDRAILS_PATTERN_BLOCKER_ACTION,
380
+ }),
381
+ };
382
+ }
383
+ // PII Redactor
384
+ if (process.env.GUARDRAILS_PII_REDACTOR_ENABLED !== undefined ||
385
+ existingPlugins.pii_redactor) {
386
+ plugins.pii_redactor = {
387
+ ...existingPlugins.pii_redactor,
388
+ ...(process.env.GUARDRAILS_PII_REDACTOR_ENABLED !== undefined && {
389
+ enabled: process.env.GUARDRAILS_PII_REDACTOR_ENABLED === 'true',
390
+ }),
391
+ ...(process.env.GUARDRAILS_PII_REDACTOR_DETECT_EMAILS !== undefined && {
392
+ detect_emails: process.env.GUARDRAILS_PII_REDACTOR_DETECT_EMAILS === 'true',
393
+ }),
394
+ ...(process.env.GUARDRAILS_PII_REDACTOR_DETECT_PHONES !== undefined && {
395
+ detect_phones: process.env.GUARDRAILS_PII_REDACTOR_DETECT_PHONES === 'true',
396
+ }),
397
+ ...(process.env.GUARDRAILS_PII_REDACTOR_DETECT_SSN !== undefined && {
398
+ detect_ssn: process.env.GUARDRAILS_PII_REDACTOR_DETECT_SSN === 'true',
399
+ }),
400
+ ...(process.env.GUARDRAILS_PII_REDACTOR_DETECT_API_KEYS !== undefined && {
401
+ detect_api_keys: process.env.GUARDRAILS_PII_REDACTOR_DETECT_API_KEYS === 'true',
402
+ }),
403
+ ...(process.env.GUARDRAILS_PII_REDACTOR_DETECT_CREDIT_CARDS !== undefined && {
404
+ detect_credit_cards: process.env.GUARDRAILS_PII_REDACTOR_DETECT_CREDIT_CARDS === 'true',
405
+ }),
406
+ ...(process.env.GUARDRAILS_PII_REDACTOR_DETECT_IP_ADDRESSES !== undefined && {
407
+ detect_ip_addresses: process.env.GUARDRAILS_PII_REDACTOR_DETECT_IP_ADDRESSES === 'true',
408
+ }),
409
+ ...(process.env.GUARDRAILS_PII_REDACTOR_ALLOWLIST && {
410
+ allowlist: process.env.GUARDRAILS_PII_REDACTOR_ALLOWLIST.split(',').map((a) => a.trim()),
411
+ }),
412
+ ...(process.env.GUARDRAILS_PII_REDACTOR_ALLOWLIST_DOMAINS && {
413
+ allowlist_domains: process.env.GUARDRAILS_PII_REDACTOR_ALLOWLIST_DOMAINS.split(',').map((d) => d.trim()),
414
+ }),
415
+ ...(process.env.GUARDRAILS_PII_REDACTOR_RESTORE_ON_RESPONSE !== undefined && {
416
+ restore_on_response: process.env.GUARDRAILS_PII_REDACTOR_RESTORE_ON_RESPONSE === 'true',
417
+ }),
418
+ ...(process.env.GUARDRAILS_PII_REDACTOR_LOG_DETECTIONS !== undefined && {
419
+ log_detections: process.env.GUARDRAILS_PII_REDACTOR_LOG_DETECTIONS === 'true',
420
+ }),
421
+ };
422
+ }
423
+ return plugins;
424
+ }
282
425
  getConfig() {
283
426
  return this.config;
284
427
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}