Skip to main content
Glama
nacho4d

mcp-web-search

by nacho4d

mcp-web-search

A local MCP server that gives Claude or IBM Bob or other Agents web search and page-fetching capabilities. Built to work around:

  • the network restrictions that Claude organisation accounts operate under.

  • no built-in "web search" capabilities.

Why this exists

Claude.ai organisation accounts restrict outbound network access to a fixed domain allowlist. General web search and browsing are blocked and regular members cannot change that. Personal accounts have built-in web search and don't have this problem.

This server runs locally on your machine — where the internet is unrestricted — and proxies web requests back to Claude via the MCP protocol. If you've ever hit host_not_allowed with no way to fix it, this is for you.

IBM Bob does not have built-in web-browsing or internet capability due.

Related MCP server: DuckDuckGo MCP Server

What it does

Two tools, nothing more:

Tool

Description

search_list

Search the web via DuckDuckGo and return up to 10 ranked results

access_site

Fetch any URL, follow redirects, and return its content as plain text

Tech stack

Component

Technology

Version

Language

Python

≥ 3.12

MCP framework

FastMCP (mcp package)

≥ 1.28.1

Search backend

DuckDuckGo (ddgs package)

≥ 9.14.4

Package manager

uv

any recent

Architecture

graph TD
    AIAgent[AI Agent] -->|MCP stdio / HTTP| Server[mcp-web-search<br/>FastMCP server]
    Server -->|HTTPS| DDG[DuckDuckGo API]
    Server -->|HTTPS| Web[Any public URL]

AI agent calls one of the two tools over MCP. The server makes the outbound request from the local machine (bypassing Claude and/or IBM Bob's network restrictions) and returns structured JSON.

Key design decisions

No authentication on the server Decision: The server accepts all requests without any auth token or API key. Why: It only binds to 127.0.0.1 by default and is intended as a personal local tool — adding auth would be friction with no real security benefit in that context. Do not change because: adding auth here would also require changes to every Claude Desktop config that uses this server.

Raw urllib instead of httpx / requests Decision: access_site uses the stdlib urllib.request only. Why: Avoids an extra dependency for a single HTTP call. ddgs already handles the search transport. Do not change because: it keeps the dependency surface minimal; only revisit if redirect handling or TLS behaviour becomes a problem.

Setup & contributing

See CONTRIBUTING.md.

Available Tools

2 tools
access_siteA

Fetch the contents of a URL, following redirects, and return as plain text.

Args: url: The URL to fetch

Returns: JSON with the page content and metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose all behavioral traits. It mentions redirect-following and return format (plain text, JSON with metadata) but omits error handling, size limits, authentication needs, or whether it modifies anything. The description is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence for the main action, followed by structured Args and Returns sections. No extraneous information, and the core action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (one parameter) and the presence of an output schema (which likely details the return format), the description covers the essential: tool purpose, parameter, and high-level return. Minor omissions (error handling, restrictions) are acceptable for this simple fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It restates 'url: The URL to fetch' which adds minimal meaning beyond the schema's property name. No format constraints, examples, or further clarification are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetch the contents of a URL'), the resource ('URL'), and details like following redirects and returning plain text. This distinctly differentiates from the sibling tool 'search_list', which likely searches rather than fetches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (fetch a URL) but provides no explicit guidance on when to use versus alternatives like 'search_list' or when not to use. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_listB

Search the web using DuckDuckGo and return ranked results.

Args: query: The search query string

Returns: JSON with results including rank, title, url, and snippet

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It mentions using DuckDuckGo and returning ranked results, but lacks details on rate limits, query limitations, result count, or error handling. Minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the main action. It uses a structured Args/Returns format, but the Args section is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with one parameter and an output schema, the description provides the search engine and return fields. However, it omits potential issues like pagination, result limits, or authentication, which are relevant for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only repeats the schema's parameter name and type ('query' as a string). With 0% schema description coverage, it does not compensate by adding syntax, examples, or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches the web using DuckDuckGo and returns ranked results. It distinguishes itself from the sibling tool 'access_site' which likely accesses a site, not search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus the sibling 'access_site'. No exclusions or context provided, leaving the agent to infer usage.

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. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.0
    • First observedaccess_site
    • First observedsearch_list

TDQS

A3.7/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: search_list handles web searches returning ranked results, while access_site fetches the content of a specific URL. There is no overlap or ambiguity.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (access_site, search_list), using clear verbs and nouns. Strong naming convention.

Tool Count4/5

With 2 tools, the set is minimal but appropriately scoped for a web search server. It covers the core actions (searching and fetching) without unnecessary redundancy, though slightly thin.

Completeness4/5

The tool surface covers the essential web search workflow: searching and retrieving page content. Missing advanced features like cached results or filtering, but no critical gaps for basic use.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nacho4d/mcp-web-search'

If you have feedback or need assistance with the MCP directory API, please join our Discord server