EZ Web Search MCP Server
Performs web searches via DuckDuckGo's HTML interface and returns a list of search results including title, URL, and description.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EZ Web Search MCP Serversearch for latest news on AI"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EZ Web Search MCP Server
A simple Model Context Protocol (MCP) server that provides web search functionality using DuckDuckGo.
Features
Performs web searches via DuckDuckGo's HTML interface.
Returns a list of search results including title, URL, and description.
Configurable limit for the number of results.
Related MCP server: ddg-mcp-search
Setup and Installation
This server is built with TypeScript and runs on Node.js.
Prerequisites:
Node.js (v16 or newer recommended)
npm (comes with Node.js)
TypeScript (will be installed as a project dependency)
Clone/Download:
Ensure this server's code is in its directory (e.g.,
~/.mcphub/servers/ez-web-search-mcp/).
Install Dependencies:
Navigate to the server's directory:
cd /path/to/ez-web-search-mcp # Example: cd ~/.mcphub/servers/ez-web-search-mcpInstall dependencies:
npm install
Build the Server:
Compile the TypeScript code:
npm run buildThis will create a
builddirectory with the compiled JavaScript (build/index.js).
Running the Server
This server is designed to be launched by an MCP client like mcphub.nvim via its stdio. The mcphub.nvim configuration in servers.json should point to the compiled build/index.js file.
Example entry for your MCP client's servers.json (e.g., ~/.config/mcphub/servers.json):
{
"mcpServers": {
// ... other servers ...
"ez-web-search-mcp": {
"command": "node",
"args": [
"/full/path/to/your/home/.mcphub/servers/ez-web-search-mcp/build/index.js"
// It's generally best to use an absolute path here.
],
"disabled": false
}
}
// ... other configurations ...
}(Remember to replace /full/path/to/your/home/ with the actual absolute path to your home directory.)
Usage
Once the server is configured and running via an MCP client, it provides one tool:
Tool Name:
searchDescription: Performs a web search using DuckDuckGo and returns a list of results.
Input Schema:
query(string, required): The search term.limit(number, optional, default: 10): Maximum number of results to return.
Output:
The tool returns an MCP content block, typically a series of text items, each representing a search result with its title, URL, and description.
Example MCP client call:
use_mcp_tool
server_name: "ez-web-search-mcp"
tool_name: "search"
tool_input:
query: "latest AI advancements"
limit: 5Development
Source code is in the
srcdirectory.After making changes to
*.tsfiles, rebuild withnpm run build.
Available Tools
1 toolsearchB
Performs a web search using DuckDuckGo and returns a list of results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states that a search is performed and results are returned, but does not mention potential limitations, error behavior, rate limits, or how results are structured. This is minimal disclosure for a tool that could have nuanced behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that conveys the essential purpose without unnecessary verbosity. It is front-loaded with the main action and resource, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description is somewhat adequate, but it omits details that would help the agent understand the output format. There is no output schema or mention of what fields are in each result, error handling, or pagination. The description is minimal and does not fully cover the context needed for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions, and the description adds no explanation of the parameters beyond their names. 'query' and 'limit' are reasonably self-explanatory, but the description does not clarify how 'limit' affects results or that 'query' might have format constraints. This leaves the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a web search using DuckDuckGo and returns a list of results. It uses a specific verb (performs) and identifies the resource (DuckDuckGo), making the purpose unmistakable. With no sibling tools to differentiate from, this is fully sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any exclusion criteria. Since no sibling tools exist, the lack of alternatives is not an issue, but the description still provides no context about appropriate usage scenarios or prerequisites, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
search
TDQS
Scored across 1 tool
With only a single tool, there is no possibility of ambiguity or overlap. The tool's purpose is clearly defined as performing a web search.
The tool name 'search' is a clear verb and, being the only tool, there is no inconsistency in naming patterns.
The server has only one tool, which is on the thin side. However, for a focused web search server, a single tool can be sufficient, but it still falls into the borderline category of 1-2 tools.
The domain is web search, and the single tool directly fulfills that purpose without obvious gaps. It performs a search and returns results, which covers the core functionality.
Maintenance
Related MCP Connectors
Serper MCP — wraps the Serper Google Search API (serper.dev)
MCP server for Google search results via SERP API
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceSmall Python MCP server that provides web search and page fetching tools via DuckDuckGo, requiring no API key.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA minimal MCP server that provides a DuckDuckGo search tool with configurable region, time limit, and safe search options.MIT
- AlicenseAqualityCmaintenanceMCP server that enables web search, image search, and image download using DuckDuckGo.3MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that provides web search scraping from DuckDuckGo (with Mojeek fallback) and URL content fetching as markdown/text or raw HTML.1-