Development Guide
This guide provides information for developers who want to understand, extend, or contribute to WebMCP.
Project Structure
webmcp/
├── src/
│ ├── engine/ # Search engine implementations
│ │ ├── SearchEngineBase.js # Base class
│ │ ├── GoogleSearch.js # Google implementation
│ │ ├── BingSearch.js # Bing implementation
│ │ ├── DuckDuckGoSearch.js # DuckDuckGo implementation
│ │ └── YahooJapanSearch.js # Yahoo Japan implementation
│ ├── tool/ # Advanced tools
│ │ ├── DeepSearch.js # Deep search with parsing
│ │ └── PageParser.js # Page parser
│ ├── BrowserManager.js # Browser management
│ ├── SearchManager.js # Search coordination
│ └── SearchMCPServer.js # MCP server interface
├── tests/ # Test files
├── docs/ # Documentation
└── package.json # Dependencies
Architecture Overview
Core Components
- BrowserManager: Manages browser instances using
cloakbrowser - Search Engines: Each engine extends
SearchEngineBase - SearchManager: Coordinates multiple search engines
- DeepSearch: Advanced search with automatic page parsing
- PageParser: Parses individual web pages
- SearchMCPServer: Exposes functionality through MCP protocol
Adding Search Engines
To add a new search engine:
Step 1: Create Engine Class
// src/engine/MySearchEngine.js
import SearchEngineBase from './SearchEngineBase.js';
class MySearchEngine extends SearchEngineBase {
async search(keyword, options = {}) {
// Implement search logic
return {
keyword,
engine: 'myengine',
results: [],
timestamp: new Date().toISOString()
};
}
}
export default MySearchEngine;
Step 2: Register in SearchManager
import MySearchEngine from './engine/MySearchEngine.js';
this.searchEngines = {
google: new GoogleSearch(options),
myengine: new MySearchEngine(options)
};
Testing
Run tests:
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Submit pull request
API Reference
SearchMCPServer
Constructor:
Options:
- locale: string - Language/locale code
- timezoneId: string - Timezone identifier
- geolocation: object - Geographic coordinates
- parserNum: number - Number of parallel parsers
Methods:
- handleToolCall(toolName, args): Execute a tool
- getTools(): Get available tools
- cleanup(): Clean up resources