mcp-researchpowerpack 3.9.4 → 4.3.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/README.md +116 -208
- package/dist/index.js +280 -337
- package/dist/index.js.map +7 -1
- package/dist/mcp-use.json +7 -0
- package/dist/src/clients/reddit.js +278 -0
- package/dist/src/clients/reddit.js.map +7 -0
- package/dist/src/clients/scraper.js +326 -0
- package/dist/src/clients/scraper.js.map +7 -0
- package/dist/src/clients/search.js +217 -0
- package/dist/src/clients/search.js.map +7 -0
- package/dist/src/config/index.js +138 -0
- package/dist/src/config/index.js.map +7 -0
- package/dist/src/prompts/deep-research.js +41 -0
- package/dist/src/prompts/deep-research.js.map +7 -0
- package/dist/src/prompts/reddit-sentiment.js +47 -0
- package/dist/src/prompts/reddit-sentiment.js.map +7 -0
- package/dist/src/schemas/reddit.js +21 -0
- package/dist/src/schemas/reddit.js.map +7 -0
- package/dist/src/schemas/scrape-links.js +26 -0
- package/dist/src/schemas/scrape-links.js.map +7 -0
- package/dist/src/schemas/start-research.js +17 -0
- package/dist/src/schemas/start-research.js.map +7 -0
- package/dist/src/schemas/web-search.js +53 -0
- package/dist/src/schemas/web-search.js.map +7 -0
- package/dist/src/services/llm-processor.js +675 -0
- package/dist/src/services/llm-processor.js.map +7 -0
- package/dist/src/services/markdown-cleaner.js +62 -0
- package/dist/src/services/markdown-cleaner.js.map +7 -0
- package/dist/src/services/workflow-state.js +116 -0
- package/dist/src/services/workflow-state.js.map +7 -0
- package/dist/src/tools/mcp-helpers.js +50 -0
- package/dist/src/tools/mcp-helpers.js.map +7 -0
- package/dist/src/tools/reddit.js +277 -0
- package/dist/src/tools/reddit.js.map +7 -0
- package/dist/src/tools/registry.js +18 -0
- package/dist/src/tools/registry.js.map +7 -0
- package/dist/src/tools/scrape.js +334 -0
- package/dist/src/tools/scrape.js.map +7 -0
- package/dist/src/tools/search.js +423 -0
- package/dist/src/tools/search.js.map +7 -0
- package/dist/src/tools/start-research.js +199 -0
- package/dist/src/tools/start-research.js.map +7 -0
- package/dist/src/tools/utils.js +29 -0
- package/dist/src/tools/utils.js.map +7 -0
- package/dist/src/utils/bootstrap-guard.js +27 -0
- package/dist/src/utils/bootstrap-guard.js.map +7 -0
- package/dist/src/utils/concurrency.js +62 -0
- package/dist/src/utils/concurrency.js.map +7 -0
- package/dist/src/utils/content-extractor.js +61 -0
- package/dist/src/utils/content-extractor.js.map +7 -0
- package/dist/src/utils/errors.js +211 -0
- package/dist/src/utils/errors.js.map +7 -0
- package/dist/src/utils/logger.js +25 -0
- package/dist/src/utils/logger.js.map +7 -0
- package/dist/src/utils/markdown-formatter.js +15 -0
- package/dist/src/utils/markdown-formatter.js.map +7 -0
- package/dist/src/utils/reddit-keyword-guard.js +29 -0
- package/dist/src/utils/reddit-keyword-guard.js.map +7 -0
- package/dist/src/utils/response.js +81 -0
- package/dist/src/utils/response.js.map +7 -0
- package/dist/src/utils/retry.js +13 -0
- package/dist/src/utils/retry.js.map +7 -0
- package/dist/src/utils/sanitize.js +10 -0
- package/dist/src/utils/sanitize.js.map +7 -0
- package/dist/src/utils/source-type.js +41 -0
- package/dist/src/utils/source-type.js.map +7 -0
- package/dist/src/utils/url-aggregator.js +227 -0
- package/dist/src/utils/url-aggregator.js.map +7 -0
- package/dist/src/utils/workflow-key.js +14 -0
- package/dist/src/utils/workflow-key.js.map +7 -0
- package/dist/src/version.js +32 -0
- package/dist/src/version.js.map +7 -0
- package/package.json +33 -28
- package/dist/clients/reddit.d.ts +0 -69
- package/dist/clients/reddit.d.ts.map +0 -1
- package/dist/clients/reddit.js +0 -369
- package/dist/clients/reddit.js.map +0 -1
- package/dist/clients/research.d.ts +0 -67
- package/dist/clients/research.d.ts.map +0 -1
- package/dist/clients/research.js +0 -290
- package/dist/clients/research.js.map +0 -1
- package/dist/clients/scraper.d.ts +0 -72
- package/dist/clients/scraper.d.ts.map +0 -1
- package/dist/clients/scraper.js +0 -338
- package/dist/clients/scraper.js.map +0 -1
- package/dist/clients/search.d.ts +0 -57
- package/dist/clients/search.d.ts.map +0 -1
- package/dist/clients/search.js +0 -223
- package/dist/clients/search.js.map +0 -1
- package/dist/config/index.d.ts +0 -78
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -201
- package/dist/config/index.js.map +0 -1
- package/dist/config/loader.d.ts +0 -40
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -322
- package/dist/config/loader.js.map +0 -1
- package/dist/config/types.d.ts +0 -81
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -6
- package/dist/config/types.js.map +0 -1
- package/dist/config/yaml/tools.yaml +0 -146
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/schemas/deep-research.d.ts +0 -64
- package/dist/schemas/deep-research.d.ts.map +0 -1
- package/dist/schemas/deep-research.js +0 -224
- package/dist/schemas/deep-research.js.map +0 -1
- package/dist/schemas/scrape-links.d.ts +0 -32
- package/dist/schemas/scrape-links.d.ts.map +0 -1
- package/dist/schemas/scrape-links.js +0 -34
- package/dist/schemas/scrape-links.js.map +0 -1
- package/dist/schemas/web-search.d.ts +0 -22
- package/dist/schemas/web-search.d.ts.map +0 -1
- package/dist/schemas/web-search.js +0 -21
- package/dist/schemas/web-search.js.map +0 -1
- package/dist/services/file-attachment.d.ts +0 -30
- package/dist/services/file-attachment.d.ts.map +0 -1
- package/dist/services/file-attachment.js +0 -207
- package/dist/services/file-attachment.js.map +0 -1
- package/dist/services/llm-processor.d.ts +0 -29
- package/dist/services/llm-processor.d.ts.map +0 -1
- package/dist/services/llm-processor.js +0 -244
- package/dist/services/llm-processor.js.map +0 -1
- package/dist/services/markdown-cleaner.d.ts +0 -8
- package/dist/services/markdown-cleaner.d.ts.map +0 -1
- package/dist/services/markdown-cleaner.js +0 -74
- package/dist/services/markdown-cleaner.js.map +0 -1
- package/dist/tools/definitions.d.ts +0 -16
- package/dist/tools/definitions.d.ts.map +0 -1
- package/dist/tools/definitions.js +0 -17
- package/dist/tools/definitions.js.map +0 -1
- package/dist/tools/reddit.d.ts +0 -14
- package/dist/tools/reddit.d.ts.map +0 -1
- package/dist/tools/reddit.js +0 -265
- package/dist/tools/reddit.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -71
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -252
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/research.d.ts +0 -14
- package/dist/tools/research.d.ts.map +0 -1
- package/dist/tools/research.js +0 -196
- package/dist/tools/research.js.map +0 -1
- package/dist/tools/scrape.d.ts +0 -14
- package/dist/tools/scrape.d.ts.map +0 -1
- package/dist/tools/scrape.js +0 -234
- package/dist/tools/scrape.js.map +0 -1
- package/dist/tools/search.d.ts +0 -10
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -158
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/utils.d.ts +0 -105
- package/dist/tools/utils.d.ts.map +0 -1
- package/dist/tools/utils.js +0 -159
- package/dist/tools/utils.js.map +0 -1
- package/dist/utils/concurrency.d.ts +0 -28
- package/dist/utils/concurrency.d.ts.map +0 -1
- package/dist/utils/concurrency.js +0 -92
- package/dist/utils/concurrency.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -95
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -390
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -39
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -57
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/markdown-formatter.d.ts +0 -5
- package/dist/utils/markdown-formatter.d.ts.map +0 -1
- package/dist/utils/markdown-formatter.js +0 -15
- package/dist/utils/markdown-formatter.js.map +0 -1
- package/dist/utils/response.d.ts +0 -93
- package/dist/utils/response.d.ts.map +0 -1
- package/dist/utils/response.js +0 -170
- package/dist/utils/response.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -43
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/retry.js +0 -57
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/url-aggregator.d.ts +0 -90
- package/dist/utils/url-aggregator.d.ts.map +0 -1
- package/dist/utils/url-aggregator.js +0 -538
- package/dist/utils/url-aggregator.js.map +0 -1
- package/dist/version.d.ts +0 -29
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -55
- package/dist/version.js.map +0 -1
package/dist/config/index.d.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Consolidated configuration
|
|
3
|
-
* All environment variables, constants, and LLM config in one place
|
|
4
|
-
*/
|
|
5
|
-
interface EnvConfig {
|
|
6
|
-
SCRAPER_API_KEY: string;
|
|
7
|
-
SEARCH_API_KEY: string | undefined;
|
|
8
|
-
REDDIT_CLIENT_ID: string | undefined;
|
|
9
|
-
REDDIT_CLIENT_SECRET: string | undefined;
|
|
10
|
-
CEREBRAS_API_KEY: string | undefined;
|
|
11
|
-
}
|
|
12
|
-
export declare function resetEnvCache(): void;
|
|
13
|
-
export declare function parseEnv(): EnvConfig;
|
|
14
|
-
interface ResearchConfig {
|
|
15
|
-
readonly BASE_URL: string;
|
|
16
|
-
readonly MODEL: string;
|
|
17
|
-
readonly FALLBACK_MODEL: string;
|
|
18
|
-
readonly API_KEY: string;
|
|
19
|
-
readonly TIMEOUT_MS: number;
|
|
20
|
-
readonly REASONING_EFFORT: 'low' | 'medium' | 'high';
|
|
21
|
-
readonly MAX_URLS: number;
|
|
22
|
-
}
|
|
23
|
-
export declare const RESEARCH: ResearchConfig;
|
|
24
|
-
export declare const SERVER: {
|
|
25
|
-
readonly NAME: string;
|
|
26
|
-
readonly VERSION: string;
|
|
27
|
-
readonly DESCRIPTION: string;
|
|
28
|
-
};
|
|
29
|
-
export interface Capabilities {
|
|
30
|
-
reddit: boolean;
|
|
31
|
-
search: boolean;
|
|
32
|
-
scraping: boolean;
|
|
33
|
-
deepResearch: boolean;
|
|
34
|
-
llmExtraction: boolean;
|
|
35
|
-
cerebras: boolean;
|
|
36
|
-
}
|
|
37
|
-
export declare function getCapabilities(): Capabilities;
|
|
38
|
-
export declare function getMissingEnvMessage(capability: keyof Capabilities): string;
|
|
39
|
-
export declare const SCRAPER: {
|
|
40
|
-
readonly MAX_CONCURRENT: 30;
|
|
41
|
-
readonly BATCH_SIZE: 30;
|
|
42
|
-
readonly MAX_TOKENS_BUDGET: 32000;
|
|
43
|
-
readonly MIN_URLS: 3;
|
|
44
|
-
readonly MAX_URLS: 50;
|
|
45
|
-
readonly RETRY_COUNT: 3;
|
|
46
|
-
readonly RETRY_DELAYS: readonly [2000, 4000, 8000];
|
|
47
|
-
readonly EXTRACTION_PREFIX: "Extract ONLY from document — never hallucinate. For structured data (pricing, specs, features) → markdown table. Otherwise → tight bullet points. No intro, no confirmation message, no meta-commentary.";
|
|
48
|
-
readonly EXTRACTION_SUFFIX: "Output grounded info only. First line = content, not preamble.";
|
|
49
|
-
};
|
|
50
|
-
export declare const RESEARCH_PROMPTS: {
|
|
51
|
-
readonly SUFFIX: "CONSTRAINTS: No restating the question. No hedging preambles. Cite sources inline [source]. NEVER hallucinate — only report what sources confirm.";
|
|
52
|
-
};
|
|
53
|
-
export declare const REDDIT: {
|
|
54
|
-
readonly MAX_CONCURRENT: 10;
|
|
55
|
-
readonly BATCH_SIZE: 10;
|
|
56
|
-
readonly MAX_COMMENT_BUDGET: 1000;
|
|
57
|
-
readonly MAX_COMMENTS_PER_POST: 200;
|
|
58
|
-
readonly MIN_POSTS: 2;
|
|
59
|
-
readonly MAX_POSTS: 50;
|
|
60
|
-
readonly RETRY_COUNT: 5;
|
|
61
|
-
readonly RETRY_DELAYS: readonly [2000, 4000, 8000, 16000, 32000];
|
|
62
|
-
};
|
|
63
|
-
export declare const CTR_WEIGHTS: Record<number, number>;
|
|
64
|
-
interface LlmExtractionConfig {
|
|
65
|
-
readonly MODEL: string;
|
|
66
|
-
readonly MAX_TOKENS: number;
|
|
67
|
-
readonly ENABLE_REASONING: boolean;
|
|
68
|
-
}
|
|
69
|
-
export declare const LLM_EXTRACTION: LlmExtractionConfig;
|
|
70
|
-
interface CerebrasConfig {
|
|
71
|
-
readonly ENABLED: boolean;
|
|
72
|
-
readonly API_KEY: string;
|
|
73
|
-
readonly BASE_URL: string;
|
|
74
|
-
readonly MODEL: string;
|
|
75
|
-
}
|
|
76
|
-
export declare const CEREBRAS: CerebrasConfig;
|
|
77
|
-
export {};
|
|
78
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkEH,UAAU,SAAS;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAID,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,QAAQ,IAAI,SAAS,CAUpC;AAMD,UAAU,cAAc;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAmBD,eAAO,MAAM,QAAQ,EAAE,cAIrB,CAAC;AAQH,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAMX,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,eAAe,IAAI,YAAY,CAU9C;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,YAAY,GAAG,MAAM,CAU3E;AAMD,eAAO,MAAM,OAAO;;;;;;;;;;CAUV,CAAC;AAMX,eAAO,MAAM,gBAAgB;;CAEnB,CAAC;AAMX,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAMX,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWrC,CAAC;AAMX,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAcD,eAAO,MAAM,cAAc,EAAE,mBAI3B,CAAC;AAMH,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAgBD,eAAO,MAAM,QAAQ,EAAE,cAIrB,CAAC"}
|
package/dist/config/index.js
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Consolidated configuration
|
|
3
|
-
* All environment variables, constants, and LLM config in one place
|
|
4
|
-
*/
|
|
5
|
-
import { VERSION, PACKAGE_NAME, PACKAGE_DESCRIPTION } from '../version.js';
|
|
6
|
-
// Import version utilities (not re-exported - use directly from version.ts if needed externally)
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Safe Integer Parsing Helper
|
|
9
|
-
// ============================================================================
|
|
10
|
-
/**
|
|
11
|
-
* Safely parse an integer from environment variable with bounds checking
|
|
12
|
-
* @param value - The string value to parse (from process.env)
|
|
13
|
-
* @param defaultVal - Default value if parsing fails or value is undefined
|
|
14
|
-
* @param min - Minimum allowed value (clamped if below)
|
|
15
|
-
* @param max - Maximum allowed value (clamped if above)
|
|
16
|
-
* @returns Parsed integer within bounds, or default value
|
|
17
|
-
*/
|
|
18
|
-
function safeParseInt(value, defaultVal, min, max) {
|
|
19
|
-
if (!value) {
|
|
20
|
-
return defaultVal;
|
|
21
|
-
}
|
|
22
|
-
const parsed = parseInt(value, 10);
|
|
23
|
-
if (isNaN(parsed)) {
|
|
24
|
-
console.warn(`[Config] Invalid number "${value}", using default ${defaultVal}`);
|
|
25
|
-
return defaultVal;
|
|
26
|
-
}
|
|
27
|
-
if (parsed < min) {
|
|
28
|
-
console.warn(`[Config] Value ${parsed} below minimum ${min}, clamping to ${min}`);
|
|
29
|
-
return min;
|
|
30
|
-
}
|
|
31
|
-
if (parsed > max) {
|
|
32
|
-
console.warn(`[Config] Value ${parsed} above maximum ${max}, clamping to ${max}`);
|
|
33
|
-
return max;
|
|
34
|
-
}
|
|
35
|
-
return parsed;
|
|
36
|
-
}
|
|
37
|
-
// ============================================================================
|
|
38
|
-
// Reasoning Effort Validation
|
|
39
|
-
// ============================================================================
|
|
40
|
-
const VALID_REASONING_EFFORTS = ['low', 'medium', 'high'];
|
|
41
|
-
function parseReasoningEffort(value) {
|
|
42
|
-
if (value && VALID_REASONING_EFFORTS.includes(value)) {
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
return 'high';
|
|
46
|
-
}
|
|
47
|
-
let cachedEnv = null;
|
|
48
|
-
export function resetEnvCache() {
|
|
49
|
-
cachedEnv = null;
|
|
50
|
-
cachedResearch = null;
|
|
51
|
-
cachedLlmExtraction = null;
|
|
52
|
-
cachedCerebras = null;
|
|
53
|
-
}
|
|
54
|
-
export function parseEnv() {
|
|
55
|
-
if (cachedEnv)
|
|
56
|
-
return cachedEnv;
|
|
57
|
-
cachedEnv = {
|
|
58
|
-
SCRAPER_API_KEY: process.env.SCRAPEDO_API_KEY || '',
|
|
59
|
-
SEARCH_API_KEY: process.env.SERPER_API_KEY || undefined,
|
|
60
|
-
REDDIT_CLIENT_ID: process.env.REDDIT_CLIENT_ID || undefined,
|
|
61
|
-
REDDIT_CLIENT_SECRET: process.env.REDDIT_CLIENT_SECRET || undefined,
|
|
62
|
-
CEREBRAS_API_KEY: process.env.CEREBRAS_API_KEY || undefined,
|
|
63
|
-
};
|
|
64
|
-
return cachedEnv;
|
|
65
|
-
}
|
|
66
|
-
let cachedResearch = null;
|
|
67
|
-
function getResearch() {
|
|
68
|
-
if (cachedResearch)
|
|
69
|
-
return cachedResearch;
|
|
70
|
-
cachedResearch = {
|
|
71
|
-
BASE_URL: process.env.OPENROUTER_BASE_URL || 'https://openrouter.ai/api/v1',
|
|
72
|
-
MODEL: process.env.RESEARCH_MODEL || 'x-ai/grok-4-fast',
|
|
73
|
-
FALLBACK_MODEL: process.env.RESEARCH_FALLBACK_MODEL || 'google/gemini-2.5-flash',
|
|
74
|
-
API_KEY: process.env.OPENROUTER_API_KEY || '',
|
|
75
|
-
TIMEOUT_MS: safeParseInt(process.env.API_TIMEOUT_MS, 1800000, 1000, 3600000),
|
|
76
|
-
REASONING_EFFORT: parseReasoningEffort(process.env.DEFAULT_REASONING_EFFORT),
|
|
77
|
-
MAX_URLS: safeParseInt(process.env.DEFAULT_MAX_URLS, 100, 10, 200),
|
|
78
|
-
};
|
|
79
|
-
return cachedResearch;
|
|
80
|
-
}
|
|
81
|
-
// Lazy proxy so existing code using RESEARCH.X still works
|
|
82
|
-
export const RESEARCH = new Proxy({}, {
|
|
83
|
-
get(_target, prop) {
|
|
84
|
-
return getResearch()[prop];
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
// ============================================================================
|
|
88
|
-
// MCP Server Configuration
|
|
89
|
-
// ============================================================================
|
|
90
|
-
// Version is now automatically read from package.json via version.ts
|
|
91
|
-
// No need to manually update version strings anymore!
|
|
92
|
-
export const SERVER = {
|
|
93
|
-
NAME: PACKAGE_NAME,
|
|
94
|
-
VERSION: VERSION,
|
|
95
|
-
DESCRIPTION: PACKAGE_DESCRIPTION,
|
|
96
|
-
};
|
|
97
|
-
export function getCapabilities() {
|
|
98
|
-
const env = parseEnv();
|
|
99
|
-
return {
|
|
100
|
-
reddit: !!(env.REDDIT_CLIENT_ID && env.REDDIT_CLIENT_SECRET),
|
|
101
|
-
search: !!env.SEARCH_API_KEY,
|
|
102
|
-
scraping: !!env.SCRAPER_API_KEY,
|
|
103
|
-
deepResearch: !!RESEARCH.API_KEY,
|
|
104
|
-
llmExtraction: !!RESEARCH.API_KEY || CEREBRAS.ENABLED,
|
|
105
|
-
cerebras: CEREBRAS.ENABLED,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
export function getMissingEnvMessage(capability) {
|
|
109
|
-
const messages = {
|
|
110
|
-
reddit: '❌ **Reddit tools unavailable.** Set `REDDIT_CLIENT_ID` and `REDDIT_CLIENT_SECRET` to enable.\n\n👉 Create a Reddit app at: https://www.reddit.com/prefs/apps (select "script" type)',
|
|
111
|
-
search: '❌ **Search unavailable.** Set `SERPER_API_KEY` to enable web search and Reddit search.\n\n👉 Get your free API key at: https://serper.dev (2,500 free queries)',
|
|
112
|
-
scraping: '❌ **Web scraping unavailable.** Set `SCRAPEDO_API_KEY` to enable URL content extraction.\n\n👉 Sign up at: https://scrape.do (1,000 free credits)',
|
|
113
|
-
deepResearch: '❌ **Deep research unavailable.** Set `OPENROUTER_API_KEY` to enable AI-powered research.\n\n👉 Get your API key at: https://openrouter.ai/keys',
|
|
114
|
-
llmExtraction: '⚠️ **AI extraction disabled.** The `use_llm` and `what_to_extract` features require `OPENROUTER_API_KEY`.\n\nScraping will work but without intelligent content filtering.',
|
|
115
|
-
cerebras: '⚠️ **Cerebras not configured.** Set `USE_CEREBRAS=true` and `CEREBRAS_API_KEY` to use Cerebras for LLM extraction.\n\n👉 Get your API key at: https://cloud.cerebras.ai',
|
|
116
|
-
};
|
|
117
|
-
return messages[capability];
|
|
118
|
-
}
|
|
119
|
-
// ============================================================================
|
|
120
|
-
// Scraper Configuration (Scrape.do implementation)
|
|
121
|
-
// ============================================================================
|
|
122
|
-
export const SCRAPER = {
|
|
123
|
-
MAX_CONCURRENT: 30,
|
|
124
|
-
BATCH_SIZE: 30,
|
|
125
|
-
MAX_TOKENS_BUDGET: 32000,
|
|
126
|
-
MIN_URLS: 3,
|
|
127
|
-
MAX_URLS: 50,
|
|
128
|
-
RETRY_COUNT: 3,
|
|
129
|
-
RETRY_DELAYS: [2000, 4000, 8000],
|
|
130
|
-
EXTRACTION_PREFIX: 'Extract ONLY from document — never hallucinate. For structured data (pricing, specs, features) → markdown table. Otherwise → tight bullet points. No intro, no confirmation message, no meta-commentary.',
|
|
131
|
-
EXTRACTION_SUFFIX: 'Output grounded info only. First line = content, not preamble.',
|
|
132
|
-
};
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Research Compression Prefix/Suffix
|
|
135
|
-
// ============================================================================
|
|
136
|
-
export const RESEARCH_PROMPTS = {
|
|
137
|
-
SUFFIX: `CONSTRAINTS: No restating the question. No hedging preambles. Cite sources inline [source]. NEVER hallucinate — only report what sources confirm.`,
|
|
138
|
-
};
|
|
139
|
-
// ============================================================================
|
|
140
|
-
// Reddit Configuration
|
|
141
|
-
// ============================================================================
|
|
142
|
-
export const REDDIT = {
|
|
143
|
-
MAX_CONCURRENT: 10,
|
|
144
|
-
BATCH_SIZE: 10,
|
|
145
|
-
MAX_COMMENT_BUDGET: 1000,
|
|
146
|
-
MAX_COMMENTS_PER_POST: 200,
|
|
147
|
-
MIN_POSTS: 2,
|
|
148
|
-
MAX_POSTS: 50,
|
|
149
|
-
RETRY_COUNT: 5,
|
|
150
|
-
RETRY_DELAYS: [2000, 4000, 8000, 16000, 32000],
|
|
151
|
-
};
|
|
152
|
-
// ============================================================================
|
|
153
|
-
// CTR Weights for URL Ranking (inspired from CTR research)
|
|
154
|
-
// ============================================================================
|
|
155
|
-
export const CTR_WEIGHTS = {
|
|
156
|
-
1: 100.00,
|
|
157
|
-
2: 60.00,
|
|
158
|
-
3: 48.89,
|
|
159
|
-
4: 33.33,
|
|
160
|
-
5: 28.89,
|
|
161
|
-
6: 26.44,
|
|
162
|
-
7: 24.44,
|
|
163
|
-
8: 17.78,
|
|
164
|
-
9: 13.33,
|
|
165
|
-
10: 12.56,
|
|
166
|
-
};
|
|
167
|
-
let cachedLlmExtraction = null;
|
|
168
|
-
function getLlmExtraction() {
|
|
169
|
-
if (cachedLlmExtraction)
|
|
170
|
-
return cachedLlmExtraction;
|
|
171
|
-
cachedLlmExtraction = {
|
|
172
|
-
MODEL: process.env.LLM_EXTRACTION_MODEL || 'openai/gpt-oss-120b:nitro',
|
|
173
|
-
MAX_TOKENS: 8000,
|
|
174
|
-
ENABLE_REASONING: process.env.LLM_ENABLE_REASONING !== 'false',
|
|
175
|
-
};
|
|
176
|
-
return cachedLlmExtraction;
|
|
177
|
-
}
|
|
178
|
-
export const LLM_EXTRACTION = new Proxy({}, {
|
|
179
|
-
get(_target, prop) {
|
|
180
|
-
return getLlmExtraction()[prop];
|
|
181
|
-
},
|
|
182
|
-
});
|
|
183
|
-
let cachedCerebras = null;
|
|
184
|
-
function getCerebras() {
|
|
185
|
-
if (cachedCerebras)
|
|
186
|
-
return cachedCerebras;
|
|
187
|
-
const env = parseEnv();
|
|
188
|
-
cachedCerebras = {
|
|
189
|
-
ENABLED: process.env.USE_CEREBRAS === 'true' && !!env.CEREBRAS_API_KEY,
|
|
190
|
-
API_KEY: env.CEREBRAS_API_KEY || '',
|
|
191
|
-
BASE_URL: 'https://api.cerebras.ai/v1',
|
|
192
|
-
MODEL: 'zai-glm-4.7',
|
|
193
|
-
};
|
|
194
|
-
return cachedCerebras;
|
|
195
|
-
}
|
|
196
|
-
export const CEREBRAS = new Proxy({}, {
|
|
197
|
-
get(_target, prop) {
|
|
198
|
-
return getCerebras()[prop];
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config/loader.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* YAML Configuration Loader
|
|
3
|
-
* Loads tools.yaml and generates MCP-compatible tool definitions
|
|
4
|
-
*/
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
import type { YamlConfig, YamlToolConfig, YamlParameter, McpTool, LoadedTool } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Recursively convert YAML parameter to Zod schema
|
|
9
|
-
*/
|
|
10
|
-
declare function yamlParamToZod(param: YamlParameter): z.ZodTypeAny;
|
|
11
|
-
/**
|
|
12
|
-
* Convert YAML parameters to Zod object schema
|
|
13
|
-
*/
|
|
14
|
-
declare function yamlParamsToZodSchema(params: Record<string, YamlParameter>): z.ZodObject<Record<string, z.ZodTypeAny>>;
|
|
15
|
-
/**
|
|
16
|
-
* Load and parse tools.yaml
|
|
17
|
-
*/
|
|
18
|
-
export declare function loadYamlConfig(): YamlConfig;
|
|
19
|
-
/**
|
|
20
|
-
* Load all tools from YAML configuration
|
|
21
|
-
*/
|
|
22
|
-
export declare function loadToolsFromYaml(): LoadedTool[];
|
|
23
|
-
/**
|
|
24
|
-
* Get tool configuration by name
|
|
25
|
-
*/
|
|
26
|
-
export declare function getToolConfig(name: string): YamlToolConfig | undefined;
|
|
27
|
-
/**
|
|
28
|
-
* Get schema descriptions for a tool (for injecting into existing Zod schemas)
|
|
29
|
-
*/
|
|
30
|
-
export declare function getSchemaDescriptions(name: string): Record<string, string> | undefined;
|
|
31
|
-
/**
|
|
32
|
-
* Get Zod schema by reference name
|
|
33
|
-
*/
|
|
34
|
-
export declare function getZodSchemaByRef(ref: string): z.ZodTypeAny | undefined;
|
|
35
|
-
/**
|
|
36
|
-
* Generate complete MCP tools list with all schemas resolved
|
|
37
|
-
*/
|
|
38
|
-
export declare function generateMcpTools(): McpTool[];
|
|
39
|
-
export { yamlParamsToZodSchema, yamlParamToZod };
|
|
40
|
-
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,aAAa,EAEb,OAAO,EACP,UAAU,EACX,MAAM,YAAY,CAAC;AAsEpB;;GAEG;AACH,iBAAS,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,CAAC,CAAC,UAAU,CAqE1D;AAED;;GAEG;AACH,iBAAS,qBAAqB,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACpC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAU3C;AAyBD;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAS3C;AAwCD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,EAAE,CAYhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAOtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAGtF;AAmBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,GAAG,SAAS,CAEvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,EAAE,CA+B5C;AAMD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/config/loader.js
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* YAML Configuration Loader
|
|
3
|
-
* Loads tools.yaml and generates MCP-compatible tool definitions
|
|
4
|
-
*/
|
|
5
|
-
import { readFileSync } from 'fs';
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
7
|
-
import { dirname, join } from 'path';
|
|
8
|
-
import { parse as parseYaml } from 'yaml';
|
|
9
|
-
import { z } from 'zod';
|
|
10
|
-
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
11
|
-
// Get directory of this file for relative YAML path.
|
|
12
|
-
// Guarded so the module can be imported in Cloudflare Workers where
|
|
13
|
-
// import.meta.url is not a file: URL.
|
|
14
|
-
let __configDir;
|
|
15
|
-
try {
|
|
16
|
-
if (typeof import.meta.url === 'string' && import.meta.url.startsWith('file:')) {
|
|
17
|
-
__configDir = dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// Workers runtime – leave undefined
|
|
22
|
-
}
|
|
23
|
-
// Cached YAML config - loaded once, reused for all subsequent calls
|
|
24
|
-
let cachedYamlConfig = null;
|
|
25
|
-
// ============================================================================
|
|
26
|
-
// YAML to Zod Schema Conversion
|
|
27
|
-
// ============================================================================
|
|
28
|
-
/**
|
|
29
|
-
* Convert YAML validation rules to Zod string schema
|
|
30
|
-
*/
|
|
31
|
-
function applyStringValidation(schema, validation) {
|
|
32
|
-
if (!validation)
|
|
33
|
-
return schema;
|
|
34
|
-
let result = schema;
|
|
35
|
-
if (validation.minLength !== undefined)
|
|
36
|
-
result = result.min(validation.minLength);
|
|
37
|
-
if (validation.maxLength !== undefined)
|
|
38
|
-
result = result.max(validation.maxLength);
|
|
39
|
-
if (validation.pattern)
|
|
40
|
-
result = result.regex(new RegExp(validation.pattern));
|
|
41
|
-
if (validation.format === 'uri')
|
|
42
|
-
result = result.url();
|
|
43
|
-
if (validation.format === 'email')
|
|
44
|
-
result = result.email();
|
|
45
|
-
if (validation.format === 'uuid')
|
|
46
|
-
result = result.uuid();
|
|
47
|
-
return result;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Convert YAML validation rules to Zod number schema
|
|
51
|
-
*/
|
|
52
|
-
function applyNumberValidation(schema, validation) {
|
|
53
|
-
if (!validation)
|
|
54
|
-
return schema;
|
|
55
|
-
let result = schema;
|
|
56
|
-
if (validation.min !== undefined)
|
|
57
|
-
result = result.min(validation.min);
|
|
58
|
-
if (validation.max !== undefined)
|
|
59
|
-
result = result.max(validation.max);
|
|
60
|
-
if (validation.int)
|
|
61
|
-
result = result.int();
|
|
62
|
-
if (validation.positive)
|
|
63
|
-
result = result.positive();
|
|
64
|
-
if (validation.negative)
|
|
65
|
-
result = result.negative();
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Convert YAML validation rules to Zod array schema
|
|
70
|
-
*/
|
|
71
|
-
function applyArrayValidation(schema, validation) {
|
|
72
|
-
if (!validation)
|
|
73
|
-
return schema;
|
|
74
|
-
let result = schema;
|
|
75
|
-
if (validation.minItems !== undefined)
|
|
76
|
-
result = result.min(validation.minItems);
|
|
77
|
-
if (validation.maxItems !== undefined)
|
|
78
|
-
result = result.max(validation.maxItems);
|
|
79
|
-
return result;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Recursively convert YAML parameter to Zod schema
|
|
83
|
-
*/
|
|
84
|
-
function yamlParamToZod(param) {
|
|
85
|
-
let schema;
|
|
86
|
-
switch (param.type) {
|
|
87
|
-
case 'string': {
|
|
88
|
-
let strSchema = z.string();
|
|
89
|
-
strSchema = applyStringValidation(strSchema, param.validation);
|
|
90
|
-
if (param.description)
|
|
91
|
-
strSchema = strSchema.describe(param.description);
|
|
92
|
-
schema = strSchema;
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
case 'number': {
|
|
96
|
-
let numSchema = z.number();
|
|
97
|
-
numSchema = applyNumberValidation(numSchema, param.validation);
|
|
98
|
-
if (param.description)
|
|
99
|
-
numSchema = numSchema.describe(param.description);
|
|
100
|
-
schema = numSchema;
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
case 'boolean': {
|
|
104
|
-
let boolSchema = z.boolean();
|
|
105
|
-
if (param.description)
|
|
106
|
-
boolSchema = boolSchema.describe(param.description);
|
|
107
|
-
schema = boolSchema;
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
case 'array': {
|
|
111
|
-
if (!param.items) {
|
|
112
|
-
throw new Error('Array parameter must have items definition');
|
|
113
|
-
}
|
|
114
|
-
const itemSchema = yamlParamToZod(param.items);
|
|
115
|
-
let arrSchema = z.array(itemSchema);
|
|
116
|
-
arrSchema = applyArrayValidation(arrSchema, param.validation);
|
|
117
|
-
if (param.description)
|
|
118
|
-
arrSchema = arrSchema.describe(param.description);
|
|
119
|
-
schema = arrSchema;
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
case 'object': {
|
|
123
|
-
if (!param.properties) {
|
|
124
|
-
throw new Error('Object parameter must have properties definition');
|
|
125
|
-
}
|
|
126
|
-
const shape = {};
|
|
127
|
-
for (const [key, propDef] of Object.entries(param.properties)) {
|
|
128
|
-
let propSchema = yamlParamToZod(propDef);
|
|
129
|
-
if (propDef.required === false) {
|
|
130
|
-
propSchema = propSchema.optional();
|
|
131
|
-
}
|
|
132
|
-
shape[key] = propSchema;
|
|
133
|
-
}
|
|
134
|
-
let objSchema = z.object(shape);
|
|
135
|
-
if (param.description)
|
|
136
|
-
objSchema = objSchema.describe(param.description);
|
|
137
|
-
schema = objSchema;
|
|
138
|
-
break;
|
|
139
|
-
}
|
|
140
|
-
default:
|
|
141
|
-
throw new Error(`Unknown parameter type: ${param.type}`);
|
|
142
|
-
}
|
|
143
|
-
// Apply optional/default
|
|
144
|
-
if (param.required === false && param.default !== undefined) {
|
|
145
|
-
schema = schema.default(param.default);
|
|
146
|
-
}
|
|
147
|
-
else if (param.required === false) {
|
|
148
|
-
schema = schema.optional();
|
|
149
|
-
}
|
|
150
|
-
return schema;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Convert YAML parameters to Zod object schema
|
|
154
|
-
*/
|
|
155
|
-
function yamlParamsToZodSchema(params) {
|
|
156
|
-
const shape = {};
|
|
157
|
-
for (const [key, param] of Object.entries(params)) {
|
|
158
|
-
let schema = yamlParamToZod(param);
|
|
159
|
-
// Note: required is handled in yamlParamToZod via optional()
|
|
160
|
-
shape[key] = schema;
|
|
161
|
-
}
|
|
162
|
-
return z.object(shape);
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Convert Zod schema to JSON Schema for MCP inputSchema
|
|
166
|
-
*/
|
|
167
|
-
function zodToMcpInputSchema(schema) {
|
|
168
|
-
const jsonSchema = zodToJsonSchema(schema, { $refStrategy: 'none' });
|
|
169
|
-
// Extract properties and required from JSON Schema
|
|
170
|
-
if (typeof jsonSchema === 'object' && jsonSchema !== null) {
|
|
171
|
-
const obj = jsonSchema;
|
|
172
|
-
return {
|
|
173
|
-
type: 'object',
|
|
174
|
-
properties: obj.properties || {},
|
|
175
|
-
required: obj.required,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
return { type: 'object', properties: {} };
|
|
179
|
-
}
|
|
180
|
-
// ============================================================================
|
|
181
|
-
// Tool Loading
|
|
182
|
-
// ============================================================================
|
|
183
|
-
/**
|
|
184
|
-
* Load and parse tools.yaml
|
|
185
|
-
*/
|
|
186
|
-
export function loadYamlConfig() {
|
|
187
|
-
if (cachedYamlConfig)
|
|
188
|
-
return cachedYamlConfig;
|
|
189
|
-
if (!__configDir) {
|
|
190
|
-
throw new Error('YAML loader unavailable: not running in Node.js filesystem context');
|
|
191
|
-
}
|
|
192
|
-
const yamlPath = join(__configDir, 'yaml', 'tools.yaml');
|
|
193
|
-
const yamlContent = readFileSync(yamlPath, 'utf8');
|
|
194
|
-
cachedYamlConfig = parseYaml(yamlContent);
|
|
195
|
-
return cachedYamlConfig;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Convert a single YAML tool config to MCP Tool
|
|
199
|
-
* For tools with inline parameters only
|
|
200
|
-
*/
|
|
201
|
-
function yamlToolToMcpTool(toolConfig) {
|
|
202
|
-
if (!toolConfig.parameters) {
|
|
203
|
-
throw new Error(`Tool ${toolConfig.name} must have parameters or useZodSchema`);
|
|
204
|
-
}
|
|
205
|
-
const zodSchema = yamlParamsToZodSchema(toolConfig.parameters);
|
|
206
|
-
const inputSchema = zodToMcpInputSchema(zodSchema);
|
|
207
|
-
return {
|
|
208
|
-
name: toolConfig.name,
|
|
209
|
-
description: toolConfig.description.trim(),
|
|
210
|
-
inputSchema,
|
|
211
|
-
category: toolConfig.category,
|
|
212
|
-
capability: toolConfig.capability,
|
|
213
|
-
useZodSchema: false,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Create placeholder for tools using existing Zod schemas
|
|
218
|
-
* These will be enriched with actual schemas at runtime
|
|
219
|
-
*/
|
|
220
|
-
function createZodSchemaPlaceholder(toolConfig) {
|
|
221
|
-
return {
|
|
222
|
-
name: toolConfig.name,
|
|
223
|
-
description: toolConfig.description.trim(),
|
|
224
|
-
inputSchema: { type: 'object', properties: {} }, // Placeholder
|
|
225
|
-
category: toolConfig.category,
|
|
226
|
-
capability: toolConfig.capability,
|
|
227
|
-
useZodSchema: true,
|
|
228
|
-
zodSchemaRef: toolConfig.zodSchemaRef,
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Load all tools from YAML configuration
|
|
233
|
-
*/
|
|
234
|
-
export function loadToolsFromYaml() {
|
|
235
|
-
const config = loadYamlConfig();
|
|
236
|
-
return config.tools.map((toolConfig) => {
|
|
237
|
-
if (toolConfig.useZodSchema) {
|
|
238
|
-
// Tool uses existing Zod schema - return placeholder
|
|
239
|
-
return createZodSchemaPlaceholder(toolConfig);
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
// Tool has inline parameters - generate schema from YAML
|
|
243
|
-
return yamlToolToMcpTool(toolConfig);
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Get tool configuration by name
|
|
249
|
-
*/
|
|
250
|
-
export function getToolConfig(name) {
|
|
251
|
-
try {
|
|
252
|
-
const config = loadYamlConfig();
|
|
253
|
-
return config.tools.find((t) => t.name === name);
|
|
254
|
-
}
|
|
255
|
-
catch {
|
|
256
|
-
return undefined;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Get schema descriptions for a tool (for injecting into existing Zod schemas)
|
|
261
|
-
*/
|
|
262
|
-
export function getSchemaDescriptions(name) {
|
|
263
|
-
const tool = getToolConfig(name);
|
|
264
|
-
return tool?.schemaDescriptions;
|
|
265
|
-
}
|
|
266
|
-
// ============================================================================
|
|
267
|
-
// Zod Schema Registry (for tools using existing schemas)
|
|
268
|
-
// ============================================================================
|
|
269
|
-
import { deepResearchParamsSchema } from '../schemas/deep-research.js';
|
|
270
|
-
import { scrapeLinksParamsSchema } from '../schemas/scrape-links.js';
|
|
271
|
-
import { webSearchParamsSchema } from '../schemas/web-search.js';
|
|
272
|
-
/**
|
|
273
|
-
* Registry of existing Zod schemas for complex tools
|
|
274
|
-
*/
|
|
275
|
-
const zodSchemaRegistry = {
|
|
276
|
-
deepResearchParamsSchema,
|
|
277
|
-
scrapeLinksParamsSchema,
|
|
278
|
-
webSearchParamsSchema,
|
|
279
|
-
};
|
|
280
|
-
/**
|
|
281
|
-
* Get Zod schema by reference name
|
|
282
|
-
*/
|
|
283
|
-
export function getZodSchemaByRef(ref) {
|
|
284
|
-
return zodSchemaRegistry[ref];
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Generate complete MCP tools list with all schemas resolved
|
|
288
|
-
*/
|
|
289
|
-
export function generateMcpTools() {
|
|
290
|
-
const loadedTools = loadToolsFromYaml();
|
|
291
|
-
return loadedTools.map((tool) => {
|
|
292
|
-
if (tool.useZodSchema && tool.zodSchemaRef) {
|
|
293
|
-
// Resolve the actual Zod schema
|
|
294
|
-
const schema = getZodSchemaByRef(tool.zodSchemaRef);
|
|
295
|
-
if (!schema) {
|
|
296
|
-
console.error(`[Loader] Schema not found: ${tool.zodSchemaRef}`);
|
|
297
|
-
return {
|
|
298
|
-
name: tool.name,
|
|
299
|
-
description: tool.description,
|
|
300
|
-
inputSchema: { type: 'object', properties: {} },
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
const inputSchema = zodToMcpInputSchema(schema);
|
|
304
|
-
return {
|
|
305
|
-
name: tool.name,
|
|
306
|
-
description: tool.description,
|
|
307
|
-
inputSchema,
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
// Tool already has generated inputSchema
|
|
311
|
-
return {
|
|
312
|
-
name: tool.name,
|
|
313
|
-
description: tool.description,
|
|
314
|
-
inputSchema: tool.inputSchema,
|
|
315
|
-
};
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
// ============================================================================
|
|
319
|
-
// Exports
|
|
320
|
-
// ============================================================================
|
|
321
|
-
export { yamlParamsToZodSchema, yamlParamToZod };
|
|
322
|
-
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|