@oevortex/ddg_search 1.2.0 → 1.2.2

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/CHANGELOG.md CHANGED
@@ -1,29 +1,50 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
- ## [1.2.0] - 2025-12-21
5
- ### Added
6
- - Comprehensive Jest testing framework with ES module support
7
- - Complete unit test suite for all utility functions (search, user_agents, search_iask, search_monica)
8
- - Integration tests for MCP server functionality and tool routing
9
- - Test infrastructure with mocking for all external dependencies
10
- - Input validation across all search modules and tools
11
- - Enhanced error handling with specific network error types
12
- - Performance optimizations with timeout management and caching
13
- - Improved logging and monitoring capabilities
14
- - Fixed JSON parsing error in searchTool handler (1.1.9 regression)
15
- - Updated package.json with comprehensive test scripts
16
- - Added Babel configuration for test compatibility
17
-
18
- ### Improved
19
- - Search module robustness with AbortController and timeout management
20
- - IAsk AI WebSocket connection handling with enhanced error reporting
21
- - Monica AI stream processing with improved validation
22
- - Tool schema validation with comprehensive parameter checking
23
- - User agent rotation consistency and logging
24
- - Cache management with hit detection and size controls
25
-
26
- ## [1.1.9] - 2025-12-21
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [1.2.2] - 2026-02-09
6
+
7
+ ### Removed
8
+ - Brave AI Search provider and tool
9
+ - Brave AI search utility with streaming response parsing
10
+ - Brave AI tool tests and MCP integration coverage
11
+
12
+ ### Changed
13
+ - Updated package.json version to 1.2.2
14
+
15
+ ## [1.2.1] - 2026-01-19
16
+ ### Added
17
+ - Brave AI Search provider and tool with research mode toggle
18
+ - Brave AI search utility with streaming response parsing
19
+ - Brave AI tool tests and MCP integration coverage
20
+ - Updated CLI help text and README documentation for Brave AI
21
+
22
+ ### Changed
23
+ - Server and CLI tool registry to include brave-search
24
+
25
+ ## [1.2.0] - 2025-12-21
26
+ ### Added
27
+ - Comprehensive Jest testing framework with ES module support
28
+ - Complete unit test suite for all utility functions (search, user_agents, search_iask, search_monica)
29
+ - Integration tests for MCP server functionality and tool routing
30
+ - Test infrastructure with mocking for all external dependencies
31
+ - Input validation across all search modules and tools
32
+ - Enhanced error handling with specific network error types
33
+ - Performance optimizations with timeout management and caching
34
+ - Improved logging and monitoring capabilities
35
+ - Fixed JSON parsing error in searchTool handler (1.1.9 regression)
36
+ - Updated package.json with comprehensive test scripts
37
+ - Added Babel configuration for test compatibility
38
+
39
+ ### Improved
40
+ - Search module robustness with AbortController and timeout management
41
+ - IAsk AI WebSocket connection handling with enhanced error reporting
42
+ - Monica AI stream processing with improved validation
43
+ - Tool schema validation with comprehensive parameter checking
44
+ - User agent rotation consistency and logging
45
+ - Cache management with hit detection and size controls
46
+
47
+ ## [1.1.9] - 2025-12-21
27
48
  ### Added
28
49
  - Added new `getRandomUserAgent` function to rotate user agents
29
50
  - Added new `src/utils/user_agents.js` file containing list of user agents
package/README.md CHANGED
@@ -8,10 +8,10 @@
8
8
  <a href="https://youtube.com/@OEvortex">
9
9
  <img src="https://img.shields.io/badge/YouTube-%40OEvortex-red.svg" alt="YouTube Channel" />
10
10
  </a>
11
- <h1>DuckDuckGo, IAsk AI & Monica Search MCP <span style="font-size:2.2rem;">🔍🧠</span></h1>
11
+ <h1>DuckDuckGo, IAsk AI, Monica & Brave AI Search MCP <span style="font-size:2.2rem;">🔍🧠</span></h1>
12
12
  <p style="font-size:1.15rem; max-width:600px; margin:0 auto;">
13
13
  <strong>Lightning-fast, privacy-first Model Context Protocol (MCP) server for web search and AI-powered answers.<br>
14
- Powered by DuckDuckGo, IAsk AI and Monica.</strong>
14
+ Powered by DuckDuckGo, IAsk AI, Monica, and Brave AI.</strong>
15
15
  </p>
16
16
  <a href="https://glama.ai/mcp/servers/@OEvortex/ddg_search">
17
17
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@OEvortex/ddg_search/badge" alt="DuckDuckGo Search MCP server" />
@@ -30,7 +30,7 @@
30
30
  ## ✨ Features
31
31
 
32
32
  <div style="display: flex; flex-wrap: wrap; gap: 1.5em; margin-bottom: 1.5em;"> <div><b>🌐 Web search</b> using DuckDuckGo HTML</div>
33
- <div><b>🧠 AI search</b> using IAsk AI & Monica</div>
33
+ <div><b>🧠 AI search</b> using IAsk AI, Monica & Brave AI</div>
34
34
  <div><b>⚡ Performance optimized</b> with caching</div>
35
35
  <div><b>🛡️ Security features</b> including rate limiting and rotating user agents</div>
36
36
  <div><b>🔌 MCP-compliant</b> server implementation</div>
package/babel.config.js CHANGED
@@ -1,12 +1,12 @@
1
- module.exports = {
2
- presets: [
3
- [
4
- '@babel/preset-env',
5
- {
6
- targets: {
7
- node: 'current'
8
- }
9
- }
10
- ]
11
- ]
1
+ export default {
2
+ presets: [
3
+ [
4
+ '@babel/preset-env',
5
+ {
6
+ targets: {
7
+ node: 'current'
8
+ }
9
+ }
10
+ ]
11
+ ]
12
12
  };
package/bin/cli.js CHANGED
@@ -18,8 +18,8 @@ async function startServer() {
18
18
  // Create the MCP server
19
19
  const server = new Server({
20
20
  id: 'ddg-search-mcp',
21
- name: 'DuckDuckGo, IAsk AI & Monica Search MCP',
22
- description: 'A Model Context Protocol server for web search using DuckDuckGo, IAsk AI and Monica',
21
+ name: 'DuckDuckGo, IAsk AI & Monica AI Search MCP',
22
+ description: 'A Model Context Protocol server for web search using DuckDuckGo, IAsk AI, and Monica AI',
23
23
  version: '1.1.8'
24
24
  }, {
25
25
  capabilities: {
@@ -92,7 +92,7 @@ async function startServer() {
92
92
  }); // Display promotional message
93
93
  console.error('\n\x1b[36m╔════════════════════════════════════════════════════════════╗');
94
94
  console.error('║ ║');
95
- console.error('║ \x1b[1m\x1b[31mDuckDuckGo & IAsk AI Search MCP\x1b[0m\x1b[36m by \x1b[1m\x1b[33m@OEvortex\x1b[0m\x1b[36m ║');
95
+ console.error('║ \x1b[1m\x1b[31mDuckDuckGo & AI Search MCP\x1b[0m\x1b[36m by \x1b[1m\x1b[33m@OEvortex\x1b[0m\x1b[36m ║');
96
96
  console.error('║ ║');
97
97
  console.error('║ \x1b[0m👉 Subscribe to \x1b[1m\x1b[37myoutube.com/@OEvortex\x1b[0m\x1b[36m for more tools! ║');
98
98
  console.error('║ ║');
@@ -101,7 +101,7 @@ async function startServer() {
101
101
  // Start the server with stdio transport
102
102
  const transport = new StdioServerTransport();
103
103
  await server.connect(transport);
104
- console.error('DuckDuckGo, IAsk AI & Monica Search MCP server started and listening on stdio');
104
+ console.error('DuckDuckGo, IAsk AI & Monica AI Search MCP server started and listening on stdio');
105
105
  } catch (error) {
106
106
  console.error('Failed to start server:', error);
107
107
  process.exit(1);
@@ -115,7 +115,7 @@ const versionFlag = args.includes('--version') || args.includes('-v');
115
115
 
116
116
  if (helpFlag) {
117
117
  console.log(`
118
- DuckDuckGo, IAsk AI & Monica Search MCP - A Model Context Protocol server for web search
118
+ DuckDuckGo, IAsk AI & Monica AI Search MCP - A Model Context Protocol server for web search
119
119
 
120
120
  Usage:
121
121
  npx -y @oevortex/ddg_search@latest [options]
@@ -145,7 +145,7 @@ if (versionFlag) {
145
145
  const packageJson = JSON.parse(
146
146
  await readFile(new URL('../package.json', import.meta.url), 'utf8')
147
147
  );
148
- console.log(`DuckDuckGo & IAsk AI Search MCP v${packageJson.version}\nCreated by @OEvortex - Subscribe to youtube.com/@OEvortex!`);
148
+ console.log(`DuckDuckGo & AI Search MCP v${packageJson.version}\nCreated by @OEvortex - Subscribe to youtube.com/@OEvortex!`);
149
149
  process.exit(0);
150
150
  } catch (err) {
151
151
  console.error('Error reading version information:', err);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oevortex/ddg_search",
3
- "version": "1.2.0",
4
- "description": "A Model Context Protocol server for web search using DuckDuckGo and IAsk AI",
3
+ "version": "1.2.2",
4
+ "description": "A Model Context Protocol server for web search using DuckDuckGo, IAsk AI, and Monica AI",
5
5
  "main": "src/index.js",
6
6
  "module": "src/index.ts",
7
7
  "exports": {
@@ -37,43 +37,43 @@ export const searchToolDefinition = {
37
37
  * @param {Object} params - The tool parameters
38
38
  * @returns {Promise<Object>} - The tool result
39
39
  */
40
- export async function searchToolHandler(params) {
41
- const { query, numResults = 3, mode = 'short' } = params;
42
- console.log(`Searching for: ${query} (${numResults} results, mode: ${mode})`);
43
-
44
- const results = await searchDuckDuckGo(query, numResults, mode);
45
- console.log(`Found ${results.length} results`);
46
-
47
- // Format results as readable text, similar to other search tools
48
- const formattedResults = results.map((result, index) => {
49
- let formatted = `${index + 1}. **${result.title}**\n`;
50
- formatted += `URL: ${result.url}\n`;
51
-
52
- if (result.displayUrl) {
53
- formatted += `Display URL: ${result.displayUrl}\n`;
54
- }
55
-
56
- if (result.snippet) {
57
- formatted += `Snippet: ${result.snippet}\n`;
58
- }
59
-
60
- if (mode === 'detailed' && result.description) {
61
- formatted += `Content: ${result.description}\n`;
62
- }
63
-
64
- if (result.favicon) {
65
- formatted += `Favicon: ${result.favicon}\n`;
66
- }
67
-
68
- return formatted;
69
- }).join('\n');
70
-
71
- return {
72
- content: [
73
- {
74
- type: 'text',
75
- text: formattedResults || 'No results found.'
76
- }
77
- ]
78
- };
79
- }
40
+ export async function searchToolHandler(params) {
41
+ const { query, numResults = 3, mode = 'short' } = params;
42
+ console.log(`Searching for: ${query} (${numResults} results, mode: ${mode})`);
43
+
44
+ const results = await searchDuckDuckGo(query, numResults, mode);
45
+ console.log(`Found ${results.length} results`);
46
+
47
+ // Format results as readable text, similar to other search tools
48
+ const formattedResults = results.map((result, index) => {
49
+ let formatted = `${index + 1}. **${result.title}**\n`;
50
+ formatted += `URL: ${result.url}\n`;
51
+
52
+ if (result.displayUrl) {
53
+ formatted += `Display URL: ${result.displayUrl}\n`;
54
+ }
55
+
56
+ if (result.snippet) {
57
+ formatted += `Snippet: ${result.snippet}\n`;
58
+ }
59
+
60
+ if (mode === 'detailed' && result.description) {
61
+ formatted += `Content: ${result.description}\n`;
62
+ }
63
+
64
+ if (result.favicon) {
65
+ formatted += `Favicon: ${result.favicon}\n`;
66
+ }
67
+
68
+ return formatted;
69
+ }).join('\n');
70
+
71
+ return {
72
+ content: [
73
+ {
74
+ type: 'text',
75
+ text: formattedResults || 'No results found.'
76
+ }
77
+ ]
78
+ };
79
+ }