# Scholar Search MCP Server (SSE)
A Model Context Protocol (MCP) server that provides web search capabilities through DuckDuckGo and Google Scholar, with additional features for content fetching and parsing, running over HTTP (SSE).
## Features
- **Web Search**: Search DuckDuckGo and Google Scholar with advanced rate limiting and result formatting
- **Content Fetching**: Retrieve and parse webpage content with intelligent text extraction
- **Rate Limiting**: Built-in protection against rate limits for both search and content fetching
- **Error Handling**: Comprehensive error handling and logging
- **LLM-Friendly Output**: Results formatted specifically for large language model consumption
## Usage
### Installation
You can install the server using pip:
```bash
pip install scholar-mcp-server-sse
```
### Startup
You can start the server using the following command:
```bash
scholar-mcp-server-sse --host <your-host> --port <your-port>
```
- `--host`: The host to bind the server to. Defaults to `0.0.0.0`.
- `--port`: The port to run the server on. Defaults to `8000`.
For example:
```bash
duckduckgo-mcp-server-sse --host 127.0.0.1 --port 8080
```
### Settings in CLINE
Add the following configuration, adjusting the host and port to match your server setup:
```json
{
"mcpServers": {
"scholar-search-sse": {
"disabled": false,
"timeout": 60,
"type": "sse",
"url": "http://127.0.0.1:8000/sse",
"headers": {
"Accept": "application/json, text/event-stream"
}
}
}
}
```
## Available Tools
### 1. Search Tool
```python
async def search(query: str, max_results: int = 10) -> str
```
Performs a web search on DuckDuckGo and returns formatted results.
**Parameters:**
- `query`: Search query string
- `max_results`: Maximum number of results to return (default: 10)
**Returns:**
Formatted string containing search results with titles, URLs, and snippets.
### 2. Content Fetching Tool
```python
async def fetch_content(url: str) -> str
```
Fetches and parses content from a webpage.
**Parameters:**
- `url`: The webpage URL to fetch content from
**Returns:**
Cleaned and formatted text content from the webpage.
### 3. Scholar Search Tool
```python
async def scholar_search(query: str, max_results: int = 10, year_low: int = None, year_high: int = None, sort_by: str = 'relevance', start_index: int = 0) -> str
```
Performs a search on Google Scholar and returns formatted results.
**Parameters:**
- `query`: Search query string
- `max_results`: Maximum number of results to return (default: 10)
- `year_low`: Minimum year of publication (optional)
- `year_high`: Maximum year of publication (optional)
- `sort_by`: Sort by 'relevance' or 'date' (default: 'relevance')
- `start_index`: Starting index of the result list (default: 0)
**Returns:**
Formatted string containing search results with titles, authors, publication details, and summaries.
## Features in Detail
### Rate Limiting
- Search: Limited to 30 requests per minute
- Content Fetching: Limited to 20 requests per minute
- Automatic queue management and wait times
### Result Processing
- Removes ads and irrelevant content
- Cleans up DuckDuckGo redirect URLs
- Formats results for optimal LLM consumption
- Truncates long content appropriately
### Error Handling
- Comprehensive error catching and reporting
- Detailed logging through MCP context
- Graceful degradation on rate limits or timeouts
## Contributing
Issues and pull requests are welcome! Some areas for potential improvement:
- Additional search parameters (region, language, etc.)
- Enhanced content parsing options
- Caching layer for frequently accessed content
- Additional rate limiting strategies
## License
This project is licensed under the MIT License.
Raw data
{
"_id": null,
"home_page": null,
"name": "scholar-mcp-server-sse",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "duckduckgo, http, mcp, search, sse, web-search",
"author": null,
"author_email": "Nick Clyde <nick@clyde.tech>, wildoranges <zkd18cjb@mail.ustc.edu.cn>",
"download_url": "https://files.pythonhosted.org/packages/e5/62/1ed8c490878b9ebad706afaca3249358beb928bc233c85408a5cd36edce5/scholar_mcp_server_sse-0.1.tar.gz",
"platform": null,
"description": "# Scholar Search MCP Server (SSE)\n\nA Model Context Protocol (MCP) server that provides web search capabilities through DuckDuckGo and Google Scholar, with additional features for content fetching and parsing, running over HTTP (SSE).\n\n## Features\n\n- **Web Search**: Search DuckDuckGo and Google Scholar with advanced rate limiting and result formatting\n- **Content Fetching**: Retrieve and parse webpage content with intelligent text extraction\n- **Rate Limiting**: Built-in protection against rate limits for both search and content fetching\n- **Error Handling**: Comprehensive error handling and logging\n- **LLM-Friendly Output**: Results formatted specifically for large language model consumption\n\n## Usage\n\n### Installation\n\nYou can install the server using pip:\n\n```bash\npip install scholar-mcp-server-sse\n```\n\n### Startup\n\nYou can start the server using the following command:\n\n```bash\nscholar-mcp-server-sse --host <your-host> --port <your-port>\n```\n\n- `--host`: The host to bind the server to. Defaults to `0.0.0.0`.\n- `--port`: The port to run the server on. Defaults to `8000`.\n\nFor example:\n\n```bash\nduckduckgo-mcp-server-sse --host 127.0.0.1 --port 8080\n```\n\n### Settings in CLINE\n\nAdd the following configuration, adjusting the host and port to match your server setup:\n\n```json\n{\n \"mcpServers\": {\n \"scholar-search-sse\": {\n \"disabled\": false,\n \"timeout\": 60,\n \"type\": \"sse\",\n \"url\": \"http://127.0.0.1:8000/sse\",\n \"headers\": {\n \"Accept\": \"application/json, text/event-stream\"\n }\n }\n }\n}\n```\n\n## Available Tools\n\n### 1. Search Tool\n\n```python\nasync def search(query: str, max_results: int = 10) -> str\n```\n\nPerforms a web search on DuckDuckGo and returns formatted results.\n\n**Parameters:**\n- `query`: Search query string\n- `max_results`: Maximum number of results to return (default: 10)\n\n**Returns:**\nFormatted string containing search results with titles, URLs, and snippets.\n\n### 2. Content Fetching Tool\n\n```python\nasync def fetch_content(url: str) -> str\n```\n\nFetches and parses content from a webpage.\n\n**Parameters:**\n- `url`: The webpage URL to fetch content from\n\n**Returns:**\nCleaned and formatted text content from the webpage.\n\n### 3. Scholar Search Tool\n\n```python\nasync def scholar_search(query: str, max_results: int = 10, year_low: int = None, year_high: int = None, sort_by: str = 'relevance', start_index: int = 0) -> str\n```\n\nPerforms a search on Google Scholar and returns formatted results.\n\n**Parameters:**\n- `query`: Search query string\n- `max_results`: Maximum number of results to return (default: 10)\n- `year_low`: Minimum year of publication (optional)\n- `year_high`: Maximum year of publication (optional)\n- `sort_by`: Sort by 'relevance' or 'date' (default: 'relevance')\n- `start_index`: Starting index of the result list (default: 0)\n\n**Returns:**\nFormatted string containing search results with titles, authors, publication details, and summaries.\n\n## Features in Detail\n\n### Rate Limiting\n\n- Search: Limited to 30 requests per minute\n- Content Fetching: Limited to 20 requests per minute\n- Automatic queue management and wait times\n\n### Result Processing\n\n- Removes ads and irrelevant content\n- Cleans up DuckDuckGo redirect URLs\n- Formats results for optimal LLM consumption\n- Truncates long content appropriately\n\n### Error Handling\n\n- Comprehensive error catching and reporting\n- Detailed logging through MCP context\n- Graceful degradation on rate limits or timeouts\n\n## Contributing\n\nIssues and pull requests are welcome! Some areas for potential improvement:\n\n- Additional search parameters (region, language, etc.)\n- Enhanced content parsing options\n- Caching layer for frequently accessed content\n- Additional rate limiting strategies\n\n## License\n\nThis project is licensed under the MIT License.\n",
"bugtrack_url": null,
"license": null,
"summary": "MCP Server (SSE) for searching via DuckDuckGo and Google Scholar",
"version": "0.1",
"project_urls": {
"Homepage": "https://github.com/wildoranges/duckduckgo-mcp-server-sse",
"Issues": "https://github.com/wildoranges/duckduckgo-mcp-server-sse/issues"
},
"split_keywords": [
"duckduckgo",
" http",
" mcp",
" search",
" sse",
" web-search"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ba626b9a61a84169dada401f5711eac38f07f981e7d92e185af22349efc316d0",
"md5": "af6cb4c12553ff7d4144ab867bfc870e",
"sha256": "f68958a24b1f6d52b3cbac106ef2aa93e41268e7ed3765b1f295e7d85d4a1d40"
},
"downloads": -1,
"filename": "scholar_mcp_server_sse-0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "af6cb4c12553ff7d4144ab867bfc870e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 7580,
"upload_time": "2025-08-13T10:17:01",
"upload_time_iso_8601": "2025-08-13T10:17:01.058038Z",
"url": "https://files.pythonhosted.org/packages/ba/62/6b9a61a84169dada401f5711eac38f07f981e7d92e185af22349efc316d0/scholar_mcp_server_sse-0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e5621ed8c490878b9ebad706afaca3249358beb928bc233c85408a5cd36edce5",
"md5": "553ea8bc55af605a8f3dedd5018536df",
"sha256": "5787fa17d1a4f3a4a37016aca7d9bb30acae865fa581cc58cf52640b1fd260b8"
},
"downloads": -1,
"filename": "scholar_mcp_server_sse-0.1.tar.gz",
"has_sig": false,
"md5_digest": "553ea8bc55af605a8f3dedd5018536df",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 25079,
"upload_time": "2025-08-13T10:17:03",
"upload_time_iso_8601": "2025-08-13T10:17:03.620352Z",
"url": "https://files.pythonhosted.org/packages/e5/62/1ed8c490878b9ebad706afaca3249358beb928bc233c85408a5cd36edce5/scholar_mcp_server_sse-0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-13 10:17:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "wildoranges",
"github_project": "duckduckgo-mcp-server-sse",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "scholar-mcp-server-sse"
}