research-powerpack-mcp 3.6.4 ā 3.6.5
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/dist/index.js +0 -0
- package/package.json +1 -1
- package/dist/config/env.d.ts +0 -75
- package/dist/config/env.d.ts.map +0 -1
- package/dist/config/env.js +0 -87
- package/dist/config/env.js.map +0 -1
- package/dist/config/yaml/tools-enhanced.yaml +0 -0
- package/dist/utils/mcp-logger.d.ts +0 -8
- package/dist/utils/mcp-logger.d.ts.map +0 -1
- package/dist/utils/mcp-logger.js +0 -14
- package/dist/utils/mcp-logger.js.map +0 -1
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "research-powerpack-mcp",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.5",
|
|
4
4
|
"description": "The ultimate research MCP toolkit: Reddit mining, web search with CTR aggregation, AI-powered deep research, and intelligent web scraping - all in one modular package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/dist/config/env.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Centralized Environment Variable Validation
|
|
3
|
-
* Uses Zod for type-safe parsing with helpful error messages
|
|
4
|
-
*/
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
declare const envSchema: z.ZodObject<{
|
|
7
|
-
SCRAPEDO_API_KEY: z.ZodOptional<z.ZodString>;
|
|
8
|
-
SERPER_API_KEY: z.ZodOptional<z.ZodString>;
|
|
9
|
-
REDDIT_CLIENT_ID: z.ZodOptional<z.ZodString>;
|
|
10
|
-
REDDIT_CLIENT_SECRET: z.ZodOptional<z.ZodString>;
|
|
11
|
-
OPENROUTER_API_KEY: z.ZodOptional<z.ZodString>;
|
|
12
|
-
OPENROUTER_BASE_URL: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
13
|
-
RESEARCH_MODEL: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
14
|
-
RESEARCH_FALLBACK_MODEL: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
15
|
-
DEFAULT_REASONING_EFFORT: z.ZodDefault<z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>>;
|
|
16
|
-
DEFAULT_MAX_URLS: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
17
|
-
API_TIMEOUT_MS: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
18
|
-
LLM_EXTRACTION_MODEL: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
19
|
-
LLM_ENABLE_REASONING: z.ZodDefault<z.ZodOptional<z.ZodEffects<z.ZodString, boolean, string>>>;
|
|
20
|
-
}, "strip", z.ZodTypeAny, {
|
|
21
|
-
OPENROUTER_BASE_URL: string;
|
|
22
|
-
RESEARCH_MODEL: string;
|
|
23
|
-
RESEARCH_FALLBACK_MODEL: string;
|
|
24
|
-
API_TIMEOUT_MS: number;
|
|
25
|
-
DEFAULT_REASONING_EFFORT: "low" | "medium" | "high";
|
|
26
|
-
DEFAULT_MAX_URLS: number;
|
|
27
|
-
LLM_EXTRACTION_MODEL: string;
|
|
28
|
-
LLM_ENABLE_REASONING: boolean;
|
|
29
|
-
SCRAPEDO_API_KEY?: string | undefined;
|
|
30
|
-
SERPER_API_KEY?: string | undefined;
|
|
31
|
-
REDDIT_CLIENT_ID?: string | undefined;
|
|
32
|
-
REDDIT_CLIENT_SECRET?: string | undefined;
|
|
33
|
-
OPENROUTER_API_KEY?: string | undefined;
|
|
34
|
-
}, {
|
|
35
|
-
SCRAPEDO_API_KEY?: string | undefined;
|
|
36
|
-
SERPER_API_KEY?: string | undefined;
|
|
37
|
-
REDDIT_CLIENT_ID?: string | undefined;
|
|
38
|
-
REDDIT_CLIENT_SECRET?: string | undefined;
|
|
39
|
-
OPENROUTER_BASE_URL?: string | undefined;
|
|
40
|
-
RESEARCH_MODEL?: string | undefined;
|
|
41
|
-
RESEARCH_FALLBACK_MODEL?: string | undefined;
|
|
42
|
-
OPENROUTER_API_KEY?: string | undefined;
|
|
43
|
-
API_TIMEOUT_MS?: number | undefined;
|
|
44
|
-
DEFAULT_REASONING_EFFORT?: "low" | "medium" | "high" | undefined;
|
|
45
|
-
DEFAULT_MAX_URLS?: number | undefined;
|
|
46
|
-
LLM_EXTRACTION_MODEL?: string | undefined;
|
|
47
|
-
LLM_ENABLE_REASONING?: string | undefined;
|
|
48
|
-
}>;
|
|
49
|
-
export type EnvConfig = z.infer<typeof envSchema>;
|
|
50
|
-
/**
|
|
51
|
-
* Parse and validate environment variables
|
|
52
|
-
* Returns cached result on subsequent calls
|
|
53
|
-
*/
|
|
54
|
-
export declare function getEnv(): EnvConfig;
|
|
55
|
-
/**
|
|
56
|
-
* Clear cached environment (useful for testing)
|
|
57
|
-
*/
|
|
58
|
-
export declare function clearEnvCache(): void;
|
|
59
|
-
export interface Capabilities {
|
|
60
|
-
reddit: boolean;
|
|
61
|
-
search: boolean;
|
|
62
|
-
scraping: boolean;
|
|
63
|
-
deepResearch: boolean;
|
|
64
|
-
llmExtraction: boolean;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get available capabilities based on configured API keys
|
|
68
|
-
*/
|
|
69
|
-
export declare function getCapabilitiesFromEnv(): Capabilities;
|
|
70
|
-
/**
|
|
71
|
-
* Get user-friendly message for missing capability
|
|
72
|
-
*/
|
|
73
|
-
export declare function getMissingCapabilityMessage(capability: keyof Capabilities): string;
|
|
74
|
-
export {};
|
|
75
|
-
//# sourceMappingURL=env.d.ts.map
|
package/dist/config/env.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBb,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAQlD;;;GAGG;AACH,wBAAgB,MAAM,IAAI,SAAS,CAelC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAMD,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;CACxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CASrD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,YAAY,GAAG,MAAM,CASlF"}
|
package/dist/config/env.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Centralized Environment Variable Validation
|
|
3
|
-
* Uses Zod for type-safe parsing with helpful error messages
|
|
4
|
-
*/
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
// ============================================================================
|
|
7
|
-
// Environment Schema
|
|
8
|
-
// ============================================================================
|
|
9
|
-
const envSchema = z.object({
|
|
10
|
-
// Scraper API (required for scrape_links)
|
|
11
|
-
SCRAPEDO_API_KEY: z.string().optional(),
|
|
12
|
-
// Search API (required for web_search and search_reddit)
|
|
13
|
-
SERPER_API_KEY: z.string().optional(),
|
|
14
|
-
// Reddit API (required for get_reddit_post)
|
|
15
|
-
REDDIT_CLIENT_ID: z.string().optional(),
|
|
16
|
-
REDDIT_CLIENT_SECRET: z.string().optional(),
|
|
17
|
-
// OpenRouter API (required for deep_research and LLM extraction)
|
|
18
|
-
OPENROUTER_API_KEY: z.string().optional(),
|
|
19
|
-
OPENROUTER_BASE_URL: z.string().url().optional().default('https://openrouter.ai/api/v1'),
|
|
20
|
-
// Research configuration
|
|
21
|
-
RESEARCH_MODEL: z.string().optional().default('x-ai/grok-4-fast'),
|
|
22
|
-
RESEARCH_FALLBACK_MODEL: z.string().optional().default('google/gemini-2.5-flash'),
|
|
23
|
-
DEFAULT_REASONING_EFFORT: z.enum(['low', 'medium', 'high']).optional().default('high'),
|
|
24
|
-
DEFAULT_MAX_URLS: z.coerce.number().min(10).max(200).optional().default(100),
|
|
25
|
-
API_TIMEOUT_MS: z.coerce.number().min(1000).max(3600000).optional().default(1800000),
|
|
26
|
-
// LLM extraction configuration
|
|
27
|
-
LLM_EXTRACTION_MODEL: z.string().optional().default('openai/gpt-oss-120b:nitro'),
|
|
28
|
-
LLM_ENABLE_REASONING: z.string().transform(v => v !== 'false').optional().default('true'),
|
|
29
|
-
});
|
|
30
|
-
// ============================================================================
|
|
31
|
-
// Parse and Validate Environment
|
|
32
|
-
// ============================================================================
|
|
33
|
-
let cachedEnv = null;
|
|
34
|
-
/**
|
|
35
|
-
* Parse and validate environment variables
|
|
36
|
-
* Returns cached result on subsequent calls
|
|
37
|
-
*/
|
|
38
|
-
export function getEnv() {
|
|
39
|
-
if (cachedEnv)
|
|
40
|
-
return cachedEnv;
|
|
41
|
-
try {
|
|
42
|
-
cachedEnv = envSchema.parse(process.env);
|
|
43
|
-
return cachedEnv;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
if (error instanceof z.ZodError) {
|
|
47
|
-
const issues = error.issues.map(i => ` - ${i.path.join('.')}: ${i.message}`).join('\n');
|
|
48
|
-
console.error(`[Config] Environment validation failed:\n${issues}`);
|
|
49
|
-
}
|
|
50
|
-
// Return defaults on error to avoid crashing
|
|
51
|
-
cachedEnv = envSchema.parse({});
|
|
52
|
-
return cachedEnv;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Clear cached environment (useful for testing)
|
|
57
|
-
*/
|
|
58
|
-
export function clearEnvCache() {
|
|
59
|
-
cachedEnv = null;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get available capabilities based on configured API keys
|
|
63
|
-
*/
|
|
64
|
-
export function getCapabilitiesFromEnv() {
|
|
65
|
-
const env = getEnv();
|
|
66
|
-
return {
|
|
67
|
-
reddit: !!(env.REDDIT_CLIENT_ID && env.REDDIT_CLIENT_SECRET),
|
|
68
|
-
search: !!env.SERPER_API_KEY,
|
|
69
|
-
scraping: !!env.SCRAPEDO_API_KEY,
|
|
70
|
-
deepResearch: !!env.OPENROUTER_API_KEY,
|
|
71
|
-
llmExtraction: !!env.OPENROUTER_API_KEY,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get user-friendly message for missing capability
|
|
76
|
-
*/
|
|
77
|
-
export function getMissingCapabilityMessage(capability) {
|
|
78
|
-
const messages = {
|
|
79
|
-
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)',
|
|
80
|
-
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)',
|
|
81
|
-
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)',
|
|
82
|
-
deepResearch: 'ā **Deep research unavailable.** Set `OPENROUTER_API_KEY` to enable AI-powered research.\n\nš Get your API key at: https://openrouter.ai/keys',
|
|
83
|
-
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.',
|
|
84
|
-
};
|
|
85
|
-
return messages[capability];
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=env.js.map
|
package/dist/config/env.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP SDK structured logging wrapper
|
|
3
|
-
* Sends log messages to MCP clients via server.sendLoggingMessage()
|
|
4
|
-
*/
|
|
5
|
-
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
|
-
export declare function initLogger(server: Server): void;
|
|
7
|
-
export declare function mcpLog(level: 'debug' | 'info' | 'warning' | 'error', message: string, logger?: string): void;
|
|
8
|
-
//# sourceMappingURL=mcp-logger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-logger.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAG5G"}
|
package/dist/utils/mcp-logger.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP SDK structured logging wrapper
|
|
3
|
-
* Sends log messages to MCP clients via server.sendLoggingMessage()
|
|
4
|
-
*/
|
|
5
|
-
let serverRef = null;
|
|
6
|
-
export function initLogger(server) {
|
|
7
|
-
serverRef = server;
|
|
8
|
-
}
|
|
9
|
-
export function mcpLog(level, message, logger) {
|
|
10
|
-
if (!serverRef)
|
|
11
|
-
return;
|
|
12
|
-
serverRef.sendLoggingMessage({ level, data: message, logger: logger ?? 'research-powerpack' }).catch(() => { });
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=mcp-logger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-logger.js","sourceRoot":"","sources":["../../src/utils/mcp-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,SAAS,GAAG,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAA6C,EAAE,OAAe,EAAE,MAAe;IACpG,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,SAAS,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACjH,CAAC"}
|