@rune-kit/rune 2.8.0 → 2.11.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/LICENSE +21 -21
- package/README.md +68 -34
- package/agents/adversary.md +27 -0
- package/agents/architect.md +19 -29
- package/agents/asset-creator.md +18 -4
- package/agents/audit.md +25 -4
- package/agents/autopsy.md +19 -4
- package/agents/ba.md +35 -0
- package/agents/brainstorm.md +31 -4
- package/agents/browser-pilot.md +21 -4
- package/agents/coder.md +21 -29
- package/agents/completion-gate.md +20 -4
- package/agents/constraint-check.md +18 -4
- package/agents/context-engine.md +22 -4
- package/agents/context-pack.md +32 -0
- package/agents/cook.md +41 -4
- package/agents/db.md +19 -4
- package/agents/debug.md +33 -4
- package/agents/dependency-doctor.md +20 -4
- package/agents/deploy.md +27 -4
- package/agents/design.md +22 -4
- package/agents/doc-processor.md +27 -0
- package/agents/docs-seeker.md +19 -4
- package/agents/docs.md +31 -0
- package/agents/fix.md +37 -4
- package/agents/git.md +29 -0
- package/agents/hallucination-guard.md +20 -4
- package/agents/incident.md +21 -4
- package/agents/integrity-check.md +18 -4
- package/agents/journal.md +19 -4
- package/agents/launch.md +32 -4
- package/agents/logic-guardian.md +26 -11
- package/agents/marketing.md +23 -4
- package/agents/mcp-builder.md +26 -0
- package/agents/neural-memory.md +30 -0
- package/agents/onboard.md +22 -4
- package/agents/perf.md +21 -4
- package/agents/plan.md +29 -4
- package/agents/preflight.md +22 -4
- package/agents/problem-solver.md +20 -4
- package/agents/rescue.md +23 -4
- package/agents/research.md +19 -4
- package/agents/researcher.md +19 -29
- package/agents/retro.md +32 -0
- package/agents/review-intake.md +20 -4
- package/agents/review.md +32 -4
- package/agents/reviewer.md +20 -28
- package/agents/safeguard.md +19 -4
- package/agents/sast.md +18 -4
- package/agents/scaffold.md +41 -0
- package/agents/scanner.md +19 -28
- package/agents/scope-guard.md +18 -4
- package/agents/scout.md +23 -4
- package/agents/sentinel-env.md +26 -0
- package/agents/sentinel.md +33 -4
- package/agents/sequential-thinking.md +20 -4
- package/agents/session-bridge.md +24 -4
- package/agents/skill-forge.md +22 -4
- package/agents/skill-router.md +26 -4
- package/agents/slides.md +24 -0
- package/agents/surgeon.md +19 -4
- package/agents/team.md +30 -4
- package/agents/test.md +36 -4
- package/agents/trend-scout.md +17 -4
- package/agents/verification.md +20 -4
- package/agents/video-creator.md +20 -4
- package/agents/watchdog.md +19 -4
- package/agents/worktree.md +17 -4
- package/commands/rune.md +168 -168
- package/compiler/__tests__/analytics.test.js +370 -0
- package/compiler/adapters/openclaw.js +2 -2
- package/compiler/analytics.js +385 -0
- package/compiler/bin/rune.js +68 -2
- package/compiler/dashboard.js +883 -0
- package/compiler/transforms/branding.js +1 -1
- package/contexts/dev.md +34 -34
- package/contexts/research.md +43 -43
- package/contexts/review.md +55 -55
- package/extensions/ai-ml/PACK.md +88 -88
- package/extensions/ai-ml/skills/ai-agents.md +172 -172
- package/extensions/ai-ml/skills/code-sandbox.md +187 -187
- package/extensions/ai-ml/skills/deep-research.md +146 -146
- package/extensions/ai-ml/skills/embedding-search.md +66 -66
- package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
- package/extensions/ai-ml/skills/llm-architect.md +125 -125
- package/extensions/ai-ml/skills/llm-integration.md +64 -64
- package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
- package/extensions/ai-ml/skills/rag-patterns.md +66 -66
- package/extensions/ai-ml/skills/web-extraction.md +114 -114
- package/extensions/analytics/PACK.md +92 -92
- package/extensions/analytics/skills/ab-testing.md +72 -72
- package/extensions/analytics/skills/dashboard-patterns.md +83 -83
- package/extensions/analytics/skills/data-validation.md +68 -68
- package/extensions/analytics/skills/funnel-analysis.md +81 -81
- package/extensions/analytics/skills/sql-patterns.md +57 -57
- package/extensions/analytics/skills/statistical-analysis.md +79 -79
- package/extensions/analytics/skills/tracking-setup.md +71 -71
- package/extensions/backend/PACK.md +104 -104
- package/extensions/backend/skills/api-patterns.md +84 -84
- package/extensions/backend/skills/async-pipeline.md +193 -193
- package/extensions/backend/skills/auth-patterns.md +97 -97
- package/extensions/backend/skills/background-jobs.md +133 -133
- package/extensions/backend/skills/caching-patterns.md +108 -108
- package/extensions/backend/skills/cli-generation.md +133 -133
- package/extensions/backend/skills/database-patterns.md +87 -87
- package/extensions/backend/skills/middleware-patterns.md +104 -104
- package/extensions/chrome-ext/PACK.md +93 -93
- package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
- package/extensions/chrome-ext/skills/cws-publish.md +104 -104
- package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
- package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
- package/extensions/chrome-ext/skills/ext-storage.md +133 -133
- package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
- package/extensions/content/PACK.md +96 -96
- package/extensions/content/skills/blog-patterns.md +88 -88
- package/extensions/content/skills/cms-integration.md +131 -131
- package/extensions/content/skills/content-scoring.md +107 -107
- package/extensions/content/skills/i18n.md +83 -83
- package/extensions/content/skills/mdx-authoring.md +137 -137
- package/extensions/content/skills/reference.md +1014 -1014
- package/extensions/content/skills/seo-patterns.md +67 -67
- package/extensions/content/skills/video-repurpose.md +153 -153
- package/extensions/devops/PACK.md +101 -101
- package/extensions/devops/skills/chaos-testing.md +67 -67
- package/extensions/devops/skills/ci-cd.md +75 -75
- package/extensions/devops/skills/docker.md +58 -58
- package/extensions/devops/skills/edge-serverless.md +163 -163
- package/extensions/devops/skills/infra-as-code.md +158 -158
- package/extensions/devops/skills/kubernetes.md +110 -110
- package/extensions/devops/skills/monitoring.md +57 -57
- package/extensions/devops/skills/server-setup.md +64 -64
- package/extensions/devops/skills/ssl-domain.md +42 -42
- package/extensions/ecommerce/PACK.md +116 -116
- package/extensions/ecommerce/skills/cart-system.md +79 -79
- package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
- package/extensions/ecommerce/skills/order-management.md +126 -126
- package/extensions/ecommerce/skills/payment-integration.md +472 -472
- package/extensions/ecommerce/skills/shopify-dev.md +69 -69
- package/extensions/ecommerce/skills/subscription-billing.md +93 -93
- package/extensions/ecommerce/skills/tax-compliance.md +117 -117
- package/extensions/gamedev/PACK.md +142 -142
- package/extensions/gamedev/skills/asset-pipeline.md +74 -74
- package/extensions/gamedev/skills/audio-system.md +129 -129
- package/extensions/gamedev/skills/camera-system.md +87 -87
- package/extensions/gamedev/skills/ecs.md +98 -98
- package/extensions/gamedev/skills/game-loops.md +72 -72
- package/extensions/gamedev/skills/input-system.md +199 -199
- package/extensions/gamedev/skills/multiplayer.md +180 -180
- package/extensions/gamedev/skills/particles.md +105 -105
- package/extensions/gamedev/skills/physics-engine.md +89 -89
- package/extensions/gamedev/skills/scene-management.md +146 -146
- package/extensions/gamedev/skills/threejs-patterns.md +90 -90
- package/extensions/gamedev/skills/webgl.md +71 -71
- package/extensions/mobile/PACK.md +106 -106
- package/extensions/mobile/skills/app-store-connect.md +152 -152
- package/extensions/mobile/skills/app-store-prep.md +66 -66
- package/extensions/mobile/skills/deep-linking.md +109 -109
- package/extensions/mobile/skills/flutter.md +60 -60
- package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
- package/extensions/mobile/skills/native-bridge.md +66 -66
- package/extensions/mobile/skills/ota-updates.md +97 -97
- package/extensions/mobile/skills/push-notifications.md +111 -111
- package/extensions/mobile/skills/react-native.md +82 -82
- package/extensions/saas/PACK.md +116 -116
- package/extensions/saas/skills/billing-integration.md +200 -200
- package/extensions/saas/skills/feature-flags.md +130 -130
- package/extensions/saas/skills/multi-tenant.md +103 -103
- package/extensions/saas/skills/onboarding-flow.md +139 -139
- package/extensions/saas/skills/subscription-flow.md +95 -95
- package/extensions/saas/skills/team-management.md +144 -144
- package/extensions/security/PACK.md +99 -99
- package/extensions/security/skills/api-security.md +140 -140
- package/extensions/security/skills/compliance.md +68 -68
- package/extensions/security/skills/owasp-audit.md +64 -64
- package/extensions/security/skills/pentest-patterns.md +77 -77
- package/extensions/security/skills/secret-mgmt.md +65 -65
- package/extensions/security/skills/supply-chain.md +65 -65
- package/extensions/trading/PACK.md +80 -80
- package/extensions/trading/skills/chart-components.md +55 -55
- package/extensions/trading/skills/experiment-loop.md +125 -125
- package/extensions/trading/skills/fintech-patterns.md +47 -47
- package/extensions/trading/skills/indicator-library.md +58 -58
- package/extensions/trading/skills/quant-analysis.md +111 -111
- package/extensions/trading/skills/realtime-data.md +58 -58
- package/extensions/trading/skills/trade-logic.md +104 -104
- package/extensions/ui/PACK.md +130 -130
- package/extensions/ui/skills/a11y-audit.md +91 -91
- package/extensions/ui/skills/animation-patterns.md +127 -106
- package/extensions/ui/skills/component-patterns.md +100 -75
- package/extensions/ui/skills/design-decision.md +108 -108
- package/extensions/ui/skills/design-system.md +68 -68
- package/extensions/ui/skills/landing-patterns.md +155 -155
- package/extensions/ui/skills/palette-picker.md +173 -173
- package/extensions/ui/skills/react-health.md +90 -90
- package/extensions/ui/skills/type-system.md +125 -125
- package/extensions/ui/skills/web-vitals.md +153 -153
- package/extensions/zalo/PACK.md +145 -145
- package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
- package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
- package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
- package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
- package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
- package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
- package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
- package/hooks/auto-format/index.cjs +48 -48
- package/hooks/context-watch/index.cjs +95 -68
- package/hooks/hooks.json +111 -111
- package/hooks/metrics-collector/index.cjs +86 -42
- package/hooks/post-session-reflect/index.cjs +189 -153
- package/hooks/pre-compact/index.cjs +95 -95
- package/hooks/run-hook.cmd +1 -1
- package/hooks/secrets-scan/index.cjs +100 -100
- package/hooks/session-start/index.cjs +71 -65
- package/hooks/typecheck/index.cjs +65 -65
- package/package.json +63 -63
- package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
- package/references/ui-pro-max-data/charts.csv +26 -26
- package/references/ui-pro-max-data/colors.csv +161 -161
- package/references/ui-pro-max-data/styles.csv +68 -68
- package/references/ui-pro-max-data/typography.csv +74 -74
- package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
- package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
- package/skills/adversary/SKILL.md +283 -283
- package/skills/asset-creator/SKILL.md +157 -157
- package/skills/audit/SKILL.md +148 -2
- package/skills/autopsy/SKILL.md +335 -259
- package/skills/autopsy/references/repo-analysis-patterns.md +113 -0
- package/skills/ba/SKILL.md +72 -2
- package/skills/brainstorm/SKILL.md +342 -341
- package/skills/browser-pilot/SKILL.md +168 -168
- package/skills/constraint-check/SKILL.md +165 -165
- package/skills/context-engine/SKILL.md +404 -404
- package/skills/cook/SKILL.md +917 -834
- package/skills/cook/references/output-format.md +33 -0
- package/skills/db/SKILL.md +273 -272
- package/skills/debug/SKILL.md +465 -443
- package/skills/dependency-doctor/SKILL.md +265 -235
- package/skills/deploy/SKILL.md +274 -231
- package/skills/design/DESIGN-REFERENCE.md +365 -365
- package/skills/design/SKILL.md +589 -482
- package/skills/doc-processor/SKILL.md +254 -254
- package/skills/docs/SKILL.md +374 -373
- package/skills/docs-seeker/SKILL.md +177 -177
- package/skills/fix/SKILL.md +330 -308
- package/skills/git/SKILL.md +339 -339
- package/skills/graft/SKILL.md +352 -0
- package/skills/graft/references/challenge-framework.md +98 -0
- package/skills/graft/references/mode-decision.md +44 -0
- package/skills/hallucination-guard/SKILL.md +219 -219
- package/skills/incident/SKILL.md +254 -251
- package/skills/integrity-check/SKILL.md +169 -169
- package/skills/journal/SKILL.md +240 -238
- package/skills/launch/SKILL.md +344 -342
- package/skills/logic-guardian/SKILL.md +251 -251
- package/skills/marketing/SKILL.md +290 -245
- package/skills/mcp-builder/SKILL.md +425 -423
- package/skills/mcp-builder/references/auto-discovery-pattern.md +169 -0
- package/skills/neural-memory/SKILL.md +362 -362
- package/skills/onboard/SKILL.md +404 -403
- package/skills/perf/SKILL.md +346 -346
- package/skills/plan/SKILL.md +433 -370
- package/skills/plan/references/feature-map.md +84 -0
- package/skills/preflight/SKILL.md +415 -396
- package/skills/problem-solver/SKILL.md +380 -284
- package/skills/rescue/SKILL.md +474 -450
- package/skills/retro/SKILL.md +5 -1
- package/skills/review/SKILL.md +612 -535
- package/skills/review-intake/SKILL.md +249 -249
- package/skills/safeguard/SKILL.md +200 -200
- package/skills/sast/SKILL.md +190 -190
- package/skills/scaffold/SKILL.md +328 -286
- package/skills/scope-guard/SKILL.md +180 -162
- package/skills/scout/SKILL.md +263 -263
- package/skills/sentinel/SKILL.md +382 -353
- package/skills/sentinel-env/SKILL.md +254 -254
- package/skills/sequential-thinking/SKILL.md +234 -234
- package/skills/session-bridge/SKILL.md +543 -397
- package/skills/skill-forge/SKILL.md +581 -539
- package/skills/skill-router/{skill.md → SKILL.md} +30 -2
- package/skills/surgeon/SKILL.md +215 -215
- package/skills/team/SKILL.md +556 -514
- package/skills/test/SKILL.md +614 -587
- package/skills/trend-scout/SKILL.md +145 -145
- package/skills/verification/SKILL.md +326 -325
- package/skills/video-creator/SKILL.md +201 -201
- package/skills/watchdog/SKILL.md +168 -168
- package/skills/worktree/SKILL.md +140 -140
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Auto-Discovery Tool Registry Pattern
|
|
2
|
+
|
|
3
|
+
Reference architecture for MCP servers that support partial deployment — tools register automatically at startup, gracefully skipping those with missing API keys.
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
|
|
7
|
+
MCP servers with 10+ tools often require 5+ API keys. Requiring ALL keys before the server starts means users can't use any tools until every key is configured. This kills adoption.
|
|
8
|
+
|
|
9
|
+
## Pattern: Scan → Validate → Register
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
tools/
|
|
13
|
+
├── web-search/
|
|
14
|
+
│ └── index.ts # exports: definition, handler, requiredEnvVars
|
|
15
|
+
├── reddit-search/
|
|
16
|
+
│ └── index.ts
|
|
17
|
+
├── youtube-search/
|
|
18
|
+
│ └── index.ts
|
|
19
|
+
└── content-scorer/
|
|
20
|
+
└── index.ts # no requiredEnvVars → always available
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Startup Flow
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// lib/tool-registry.ts
|
|
27
|
+
import { glob } from 'fs';
|
|
28
|
+
|
|
29
|
+
interface ToolModule {
|
|
30
|
+
definition: ToolDefinition;
|
|
31
|
+
handler: (params: unknown) => Promise<unknown>;
|
|
32
|
+
requiredEnvVars?: string[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async function discoverTools(toolsDir: string): Promise<Map<string, ToolModule>> {
|
|
36
|
+
const registered = new Map<string, ToolModule>();
|
|
37
|
+
const skipped: string[] = [];
|
|
38
|
+
|
|
39
|
+
const toolDirs = await glob(`${toolsDir}/*/index.ts`);
|
|
40
|
+
|
|
41
|
+
for (const toolPath of toolDirs) {
|
|
42
|
+
const mod: ToolModule = await import(toolPath);
|
|
43
|
+
|
|
44
|
+
// Check env vars — skip if missing
|
|
45
|
+
const missing = (mod.requiredEnvVars ?? [])
|
|
46
|
+
.filter(key => !process.env[key]);
|
|
47
|
+
|
|
48
|
+
if (missing.length > 0) {
|
|
49
|
+
skipped.push(`${mod.definition.name} (missing: ${missing.join(', ')})`);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
registered.set(mod.definition.name, mod);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (skipped.length > 0) {
|
|
57
|
+
console.error(`[registry] Skipped ${skipped.length} tools: ${skipped.join('; ')}`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
console.error(`[registry] Registered ${registered.size} tools`);
|
|
61
|
+
return registered;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Per-Tool Module Contract
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
// tools/reddit-search/index.ts
|
|
69
|
+
import { z } from 'zod';
|
|
70
|
+
|
|
71
|
+
export const requiredEnvVars = ['RAPIDAPI_KEY'];
|
|
72
|
+
|
|
73
|
+
export const definition = {
|
|
74
|
+
name: 'reddit_search',
|
|
75
|
+
description: 'Search Reddit posts and comments. Use when researching community sentiment, finding discussions about a topic, or gathering user feedback.',
|
|
76
|
+
inputSchema: z.object({
|
|
77
|
+
query: z.string().describe('Search query'),
|
|
78
|
+
subreddit: z.string().optional().describe('Limit to specific subreddit'),
|
|
79
|
+
sort: z.enum(['hot', 'top', 'new', 'relevance']).default('relevance'),
|
|
80
|
+
time_filter: z.enum(['hour', 'day', 'week', 'month', 'year', 'all']).default('month'),
|
|
81
|
+
limit: z.number().min(1).max(25).default(10),
|
|
82
|
+
}),
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export async function handler(params: z.infer<typeof definition.inputSchema>) {
|
|
86
|
+
// Implementation...
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Tools Without API Keys (Always Available)
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// tools/content-scorer/index.ts — no external dependencies
|
|
94
|
+
export const requiredEnvVars = []; // or omit entirely
|
|
95
|
+
|
|
96
|
+
export const definition = {
|
|
97
|
+
name: 'content_scorer',
|
|
98
|
+
description: 'Score content items by engagement with time-decay. Pure computation, no API calls.',
|
|
99
|
+
inputSchema: z.object({
|
|
100
|
+
items: z.array(ContentItemSchema),
|
|
101
|
+
recency_weight: z.number().default(0.1),
|
|
102
|
+
}),
|
|
103
|
+
};
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Key Design Rules
|
|
107
|
+
|
|
108
|
+
### 1. Graceful Degradation (Non-Negotiable)
|
|
109
|
+
- Missing API keys = tool is skipped, NOT a server crash
|
|
110
|
+
- Server MUST boot with 0 API keys configured (local-only tools still work)
|
|
111
|
+
- Log skipped tools to stderr (not stdout — MCP uses stdout for protocol)
|
|
112
|
+
|
|
113
|
+
### 2. Adding New Tools = Zero Core Changes
|
|
114
|
+
- Create `tools/<name>/index.ts` with the module contract
|
|
115
|
+
- Export `definition`, `handler`, and optionally `requiredEnvVars`
|
|
116
|
+
- Registry auto-discovers at next startup
|
|
117
|
+
|
|
118
|
+
### 3. Provider Fallback (Optional, Recommended)
|
|
119
|
+
For tools with multiple data sources, support tiered fallback:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
export const requiredEnvVars = []; // none required — has fallback chain
|
|
123
|
+
|
|
124
|
+
export async function handler(params) {
|
|
125
|
+
// Tier 1: Dedicated API (best quality)
|
|
126
|
+
if (process.env.GETX_API_KEY) {
|
|
127
|
+
return await fetchFromGetXAPI(params);
|
|
128
|
+
}
|
|
129
|
+
// Tier 2: RapidAPI (good quality, shared key)
|
|
130
|
+
if (process.env.RAPIDAPI_KEY) {
|
|
131
|
+
return await fetchFromRapidAPI(params);
|
|
132
|
+
}
|
|
133
|
+
// Tier 3: Web search fallback (approximate)
|
|
134
|
+
return await fetchViaWebSearch(params);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Mark output with `data_source: "api" | "web_search" | "mixed"` so downstream consumers know the reliability level.
|
|
139
|
+
|
|
140
|
+
### 4. Status Endpoint
|
|
141
|
+
Expose a `server_status` tool (or MCP resource) that reports which tools are active, which are skipped, and why:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"registered": ["web_search", "content_scorer", "reddit_search"],
|
|
146
|
+
"skipped": [
|
|
147
|
+
{ "tool": "youtube_search", "reason": "Missing YOUTUBE_API_KEY" },
|
|
148
|
+
{ "tool": "linkedin_search", "reason": "Missing RAPIDAPI_KEY" }
|
|
149
|
+
],
|
|
150
|
+
"total": 5,
|
|
151
|
+
"active": 3
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## When to Use This Pattern
|
|
156
|
+
|
|
157
|
+
| Server Type | Use Auto-Discovery? |
|
|
158
|
+
|-------------|-------------------|
|
|
159
|
+
| Single-API wrapper (1-3 tools) | NO — overkill, just require the key |
|
|
160
|
+
| Multi-source aggregator (5+ tools, 3+ APIs) | YES — users rarely have ALL keys |
|
|
161
|
+
| Internal tools (no external APIs) | NO — no env vars to gate on |
|
|
162
|
+
| Plugin system (user adds custom tools) | YES — extensibility is the point |
|
|
163
|
+
|
|
164
|
+
## Anti-Patterns
|
|
165
|
+
|
|
166
|
+
- **Crashing on missing keys** — kills adoption for users who only need 2 of 10 tools
|
|
167
|
+
- **Requiring all keys in .env** — users give up during setup
|
|
168
|
+
- **Silent skip without logging** — users don't know why a tool isn't available
|
|
169
|
+
- **Dynamic import without validation** — malformed tool modules crash the entire server
|