Skip to main content
Glama
jayanth-mkv

Open Agent Search

by jayanth-mkv

Set up with your agent

Copy this prompt into your coding agent:

Set up Open Agent Search for this project using
https://github.com/Jayanth-MKV/open-agent-search. Read its README and
skills/open-agent-search-setup/SKILL.md. Reuse uv if installed, otherwise
install it using the official uv instructions for my OS. Configure the
local stdio MCP server with the pinned package and managed Python version
from the repository's MCP manifest. Merge the server into this agent's
configuration without replacing existing servers. Install the
open-agent-search-setup and open-agent-search skills for this agent in
project scope. Verify the MCP connection and available tools, then try
one web search. Tell me if a client restart is needed. No API key is required.

Related MCP server: crawl4ai-mcp

Installation commands

With Node.js 22+ and uv installed:

npx --yes open-agent-search@1.0.5 --version
npx --yes open-agent-search@1.0.5 mcp
# Or start the HTTP API:
npx --yes open-agent-search@1.0.5 serve

The npm launcher uses the pinned Python core. It requires uv on PATH; uv manages Python 3.12 and dependencies.

With uv installed, run the MCP server in an isolated environment:

uvx --python 3.12 --from open-agent-search==1.0.5 oas-mcp

uv can download Python 3.12 when it is missing. The first run downloads dependencies; the client starts and stops this stdio process after configuration.

For a persistent PyPI installation and HTTP server:

uv tool install --python 3.12 open-agent-search==1.0.5
open-agent-search

The HTTP server listens on port 8000 on all interfaces. Use stdio for an agent that only needs local tools.

Install both skills for Codex in the current project:

npx --yes skills add Jayanth-MKV/open-agent-search --skill open-agent-search-setup open-agent-search --agent codex --copy --yes

Replace codex with claude-code, cursor, opencode, or your supported agent. Add --global only for installation across projects. Plugin and manual setup. Use either npm or PyPI above; both start the same Python implementation.

In Claude Code 2.1.275+, install both skills and the MCP configuration in one step:

/plugin install open-agent-search --marketplace Jayanth-MKV/open-agent-search --scope project

Open Agent Search (OAS) is an independent retrieval layer for AI agents and applications. It provides one consistent search and content surface across local and deployed integrations.

OAS replaces separate adapters for every search vertical with one consistent tool surface. Run it locally for a single coding agent or deploy the HTTP service for shared agent and application workloads.

Search sources, transports, and client integrations can evolve without changing the repository's core goal: give agents and applications a dependable retrieval boundary they can control.

Connect MCP or HTTP

Add search to Claude Code

claude mcp add oas -- uvx --python 3.12 --from open-agent-search==1.0.5 oas-mcp

Restart Claude Code, then ask it to search the web, news, images, videos, or books. The same uvx command works with Cursor, VS Code, Windsurf, OpenClaw, and other MCP clients.

{
  "mcpServers": {
    "open-agent-search": {
      "command": "uvx",
      "args": ["--python", "3.12", "--from", "open-agent-search==1.0.5", "oas-mcp"]
    }
  }
}

Run the HTTP API

uv tool install --python 3.12 open-agent-search==1.0.5
open-agent-search

Make a first search:

curl "http://localhost:8000/api/search/text?q=python+programming&max_results=5"

The server exposes REST endpoints at http://localhost:8000, interactive API docs at /docs, and streamable HTTP MCP at /ai/mcp.

Capabilities

  • One search layer, multiple transports. Use stdio MCP locally or serve REST and MCP over HTTP.

  • No provider API key required. Search is powered by the ddgs library.

  • Self-hostable. Run locally, in Docker, or deploy the HTTP service to Vercel.

  • Framework-independent. The protocol surface works across major MCP clients and agent stacks.

  • Production-minded defaults. Typed FastAPI routes, rate limiting, health checks, tests, and deployment guides are included.

Architecture

The local MCP command and the HTTP service share the same search and content capabilities. Choose the connection path that matches where the consuming agent or application runs.

Two deployment paths

Path

Command or endpoint

Best for

Local MCP

uvx --python 3.12 --from open-agent-search==1.0.5 oas-mcp

Giving a desktop or coding agent search with no persistent server

HTTP service

open-agent-search

Applications, shared agent environments, REST clients, and remote MCP

Search surface

Capability

REST endpoint

MCP availability

Text search

GET /api/search/text

Yes

Image search

GET /api/search/images

Yes

Video search

GET /api/search/videos

Yes

News search

GET /api/search/news

Yes

Book search

GET /api/search/books

Yes

Unified search

GET /api/search/all

Yes

Fetch one page

GET /api/content/fetch

Yes

Fetch multiple pages

POST /api/content/fetch-multiple

Yes

See the API reference and MCP tool reference for parameters and response shapes.

Privacy model

OAS does not require an OAS account or a search-provider API key, and it can run on infrastructure you control. Search queries still have to reach upstream search providers through DDGS, so this project should not be treated as an anonymity network. Review your deployment logs, network policy, and upstream-provider terms for sensitive workloads.

Install and deploy

From source

git clone https://github.com/jayanth-mkv/open-agent-search.git
cd open-agent-search
uv sync
uv run open-agent-search

Docker

docker compose up -d

Deploy with Vercel

Deployment details: Docker · Vercel

Documentation

Registries and agent discovery

  • Packages: npm and PyPI.

  • Local MCP bundle: Smithery. It runs on your machine and requires Node.js 22+ and uv.

  • MCP Registry namespace: io.github.jayanth-mkv/open-agent-search. The release workflow publishes server.json after both packages are available. Check the registry record.

  • Agent skills: Open Agent Search and setup are published on ClawHub. You can also install them from GitHub using the commands above. The skills.sh directory discovers skills through real installations; a repository alone does not guarantee a listing.

  • Glama: glama.json declares the GitHub maintainer. Directory submission and ownership verification require a separate Glama sign-in.

The npm path requires Node.js 22+ and uv. The PyPI path uses uv to manage Python 3.12. This project provides a local server and deployment code; it does not provide a shared hosted search endpoint.

The local MCPB bundle is built with python scripts/build_mcpb.py. It contains the pinned npm launcher and requires Node.js 22+ and uv on PATH. Its first launch downloads the Python core and dependencies. No credentials are bundled.

ClawHub distributes its skill copies under MIT-0, as required by that registry. This repository and its packages remain MIT licensed. GitHub Actions previews skill changes on pushes to main and publishes them on releases when CLAWHUB_TOKEN and the repository variable PUBLISH_CLAWHUB=true are configured. The workflow checks that the authenticated ClawHub owner matches the source repository owner.

Development

uv sync --group dev
uv run pytest
uv run ruff check .

Open Agent Search is currently beta software. Bug reports and focused pull requests are welcome; see CONTRIBUTING.md.

License

MIT

Maintained by Xplormity Collective.

Available Tools

8 tools
fetch_contentA

Fetch and extract content from a URL with intelligent trimming (non-blocking).

Args: url: URL to fetch content from (required) timeout: Request timeout in seconds, 5-30 (default: 10) max_length: Maximum content length in characters, 100-20000 (default: 2000)

Returns: Extracted content with title, description, and intelligently trimmed text

NameRequiredDescriptionDefault
urlYes
timeoutNo
max_lengthNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It usefully discloses that fetching is non-blocking, that content is intelligently trimmed, and that timeout and max_length constrain the operation, but it omits important network-fetch behavior such as error handling, auth requirements, redirects, or content-type limitations.

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 front-loaded with the core action and then cleanly structured into Args and Returns. It is appropriately sized for a three-parameter tool, and no sentence is wasted even though the Returns section partially overlaps with the output schema.

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?

The tool is simple, the input parameters are fully documented in the description, and an output schema exists, so the return format need not be fully explained. The main remaining gap is usage guidance relative to sibling tools, not missing invocation-critical parameter details.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does. It documents all three parameters, marks url as required, gives timeout and max_length ranges beyond the schema, and states defaults for both optional parameters.

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

Purpose4/5

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

The description states a specific verb and resource: fetch and extract content from a URL. It is naturally distinguishable from the search_* siblings and from fetch_multiple_contents because it operates on a single URL, but it does not explicitly name or differentiate those alternatives.

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?

Usage is implied by the purpose: use this when you have a URL and need its extracted content. However, the description gives no explicit when-to-use guidance, no exclusions, and no comparison to fetch_multiple_contents or the search tools.

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

fetch_multiple_contentsA

Fetch and extract content from multiple URLs in parallel (max 10, non-blocking).

Args: urls: List of URLs to fetch (required, max 10) timeout: Request timeout in seconds, 5-30 (default: 10) max_length: Maximum content length per URL, 100-20000 (default: 2000)

Returns: Dictionary with list of extracted content from each URL

NameRequiredDescriptionDefault
urlsYes
timeoutNo
max_lengthNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses parallel fetching, max batch size, non-blocking behavior, timeout and max_length constraints, but does not explain partial failures, per-URL error handling, auth/rate limits, or what 'non-blocking' means operationally.

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 opening sentence is front-loaded and efficient, followed by structured Args and Returns sections. It is appropriately sized, though the Returns section is somewhat redundant because an output schema exists.

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 an external-fetch tool with no annotations, the description covers the key batch and parameter constraints and summarizes the return shape. However, it omits error semantics, partial-failure behavior, and content extraction limitations, leaving meaningful gaps for correct invocation in failure cases.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: it defines urls as required with max 10, timeout in seconds with range 5-30 and default 10, and max_length per URL with range 100-20000 and default 2000. It adds useful ranges and meaning beyond the bare schema, though URL formatting/validation is not addressed.

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

Purpose4/5

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

States a specific verb and resource: fetch and extract content from multiple URLs, with parallel execution and a max batch of 10. It is distinguishable from fetch_content by the plural/parallel batch behavior, though it does not explicitly name the sibling as the single-URL alternative.

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?

Provides practical constraints such as max 10 URLs and non-blocking behavior, but gives no explicit guidance on when to use this versus fetch_content or search tools. Usage is implied by the batch nature rather than stated as routing guidance.

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

search_booksB

Search for books.

Args: query: Book search query (required) max_results: Maximum results, 1-100 (default: 10)

Returns: List of books with title, authors, and links

NameRequiredDescriptionDefault
queryYes
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It documents the argument names and the 1-100 range for max_results, but says nothing about ranking/relevance behavior, pagination or truncation past 100 results, rate limits, or whether results are cached — all relevant for a search tool with zero annotation coverage.

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 operative sentence is front-loaded and the parameter list is short and scannable. The Args:/Returns: block partially duplicates the schema and output schema, but at this length the redundancy costs little.

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 two-parameter read-only search tool with an output schema already covering return shape, the description is adequate — though the explicit Returns block is partly wasted effort given the output schema exists. What is missing for full completeness is routing guidance against the six sibling search tools and any note on result ordering.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it largely does: it marks query as required and adds a 1-100 bound plus the default for max_results that the bare schema does not express (the schema only carries default: 10, no maximum). It stops short of describing query syntax or what happens when max_results exceeds available matches.

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

Purpose4/5

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

States a clear verb+resource ("Search for books") that an agent can immediately map to an intent. The book domain implicitly separates it from search_web/search_images, but the description never explicitly differentiates from siblings like search_everything, which could also return books.

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?

Usage is only implied by the resource name — an agent infers "use this when you want books." There is no explicit when-to-use statement, no exclusion of search_everything for broad queries, and no note on when to prefer fetch_content for following result links.

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

search_everythingA

Search all sources at once (text, images, videos, news, books).

Args: query: Search query (required) region: Region code (default: 'us-en') max_results_per_type: Results per category, 1-20 (default: 5) safesearch: Safe search: 'on', 'moderate', 'off' (default: 'moderate')

Returns: Dictionary with results from all search types

NameRequiredDescriptionDefault
queryYes
regionNous-en
safesearchNomoderate
max_results_per_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that results come back as a dictionary keyed by search type and gives per-category limits (1-20), but says nothing about request cost/latency of aggregating five sources, rate limits, result ordering, or pagination.

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 opening sentence is front-loaded and the Args/Returns blocks are easy to scan. It loses a little by restating schema defaults verbatim, but there is no padding or filler.

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?

An output schema exists, so return values need no elaboration, and all four parameters are covered in the description. What is missing is behavioral context an agent would want for a fan-out search: relative cost versus the single-source siblings and how results are ordered or truncated.

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

Parameters4/5

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

Schema description coverage is 0%, so the Args block does real work: it marks query required, supplies the 'us-en' region default, the 1-20 range and default of max_results_per_type, and enumerates safesearch values ('on'/'moderate'/'off') that the schema itself does not constrain. Only the region code format is left unexplained.

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?

States a specific verb (search) plus an explicit scope: all sources at once, enumerated as text, images, videos, news and books. That enumeration is exactly what separates it from the per-source siblings (search_web, search_images, search_news, etc.), so an agent can route correctly without opening any schema.

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?

'Search all sources at once' implies this is the aggregate alternative to the per-source tools, but the description never says when to prefer this over search_images or search_web, nor that it costs more because it fans out to five sources. Usage is inferable rather than stated.

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

search_imagesA

Search for images.

Args: query: Image search query (required) region: Region code (default: 'us-en') max_results: Maximum results, 1-100 (default: 10) safesearch: Safe search: 'on', 'moderate', 'off' (default: 'moderate') size: Image size filter: 'small', 'medium', 'large', 'wallpaper' color: Color filter: 'color', 'monochrome', 'red', 'orange', 'yellow', 'green', 'blue', 'purple', 'pink', 'brown', 'black', 'gray', 'teal', 'white'

Returns: List of images with title, image url, thumbnail, source, and more

NameRequiredDescriptionDefault
sizeNo
colorNo
queryYes
regionNous-en
safesearchNomoderate
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose parameter defaults and the shape of results ("title, image url, thumbnail, source, and more"), which implies a read-only operation, but it says nothing about rate limits, result-count caps, ordering, or failure behavior for a network-backed search.

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 intent sentence is front-loaded, and the Args block is dense with usable detail rather than filler — each line adds constraints the schema lacks. Length is justified given 0% schema description coverage.

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?

An output schema exists, so the Returns section is mildly redundant but confirms result fields. Everything needed to construct a call is present; only pagination, result ordering, and behavioral limits are absent, which are peripheral for a stateless search.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate and largely does: it documents all six parameters with defaults, the 1-100 bound on max_results, and enumerates the allowed size and color values that the schema leaves as bare strings. Only region's code format is under-explained beyond the 'us-en' example.

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

Purpose4/5

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

States a specific verb and resource ("Search for images") and the resource noun implicitly separates it from search_web, search_books, search_videos, and search_news. It stops short of naming those siblings or search_everything, so the differentiation is inferential rather than explicit.

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?

Usage is only implied by the tool name and the image-specific purpose; there is no statement of when to prefer this over search_web or search_everything, and no exclusions or prerequisites. An agent can infer intent, but the definition does no routing work.

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

search_newsA

Search for news articles.

Args: query: News search query (required) region: Region code (default: 'us-en') max_results: Maximum results, 1-100 (default: 10) safesearch: Safe search: 'on', 'moderate', 'off' (default: 'moderate') timelimit: Time limit: 'd' (day), 'w' (week), 'm' (month)

Returns: List of news articles with title, body, url, date, and source

NameRequiredDescriptionDefault
queryYes
regionNous-en
timelimitNo
safesearchNomoderate
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden; it does disclose the return shape (title, body, url, date, source) and parameter defaults and constraints. It says nothing about rate limits, result freshness/staleness, pagination, or that this is strictly a read-only network call — reasonable assumptions for a search tool, but not stated.

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?

Front-loaded one-line purpose followed by a compact Args/Returns block; every line adds information. The docstring formatting ("Args:", indentation) is slightly noisy for an agent prompt but nothing is redundant.

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?

All five parameters are fully characterized and the return fields are enumerated, which is more than most search tools offer. The Returns section is partly redundant with the existing output schema, and the absence of any note on result limits beyond max_results or on tool-selection versus siblings leaves a small gap.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does: it explains query is required, region is a region code with default 'us-en', max_results range 1-100, safesearch allowed values 'on'/'moderate'/'off', and timelimit values 'd'/'w'/'m'. These enum-like acceptable values are absent from the schema and are essential to correct invocation.

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

Purpose4/5

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

States a specific verb+resource: "Search for news articles" — clearly distinguishable from search_web, search_books, search_images and search_videos by resource. It does not, however, say how it relates to search_everything or when news specifically is the right corpus, so sibling differentiation is implicit rather than explicit.

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?

There is no when-to-use / when-not-to-use guidance and no mention of any alternative tool such as search_web or search_everything, even though six similar search siblings exist. The agent must infer selection purely from the word "news".

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

search_videosB

Search for videos.

Args: query: Video search query (required) region: Region code (default: 'us-en') max_results: Maximum results, 1-100 (default: 10) safesearch: Safe search: 'on', 'moderate', 'off' (default: 'moderate') resolution: Video resolution: 'high', 'standard' duration: Video duration: 'short', 'medium', 'long'

Returns: List of videos with title, description, url, duration, and more

NameRequiredDescriptionDefault
queryYes
regionNous-en
durationNo
resolutionNo
safesearchNomoderate
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden; it discloses the return shape (title, description, url, duration) and the max_results bound of 1-100. It says nothing about rate limits, auth, pagination, or result caps beyond that, which is a meaningful gap for a network-backed search tool.

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?

A one-line purpose followed by a compact parameter list and return summary; nothing is padded, and the schema lacks descriptions so this listing earns its space rather than duplicating structured data.

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?

Every parameter is covered and an output schema exists so return values need no elaboration. However, for a search tool with six parameters and no annotations, the absence of any guidance on result limits, pagination, or query semantics leaves it only adequate.

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

Parameters4/5

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

Schema description coverage is 0%, and the description fully compensates by documenting all six parameters, including defaults and, critically, the accepted values for safesearch, resolution, and duration that the schema leaves as unconstrained strings. Only minor gaps remain (no format detail for region beyond the example default).

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

Purpose4/5

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

States a specific verb and resource ('Search for videos'), which implicitly separates it from siblings like search_web, search_images and search_books. It does not explicitly name those alternatives, so it stops short of a 5.

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?

There is no statement of when to choose this over search_everything, search_web, or a fetch tool, and no exclusions or prerequisites. The agent must infer usage purely from the tool name.

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

search_webA

Search the web for text content.

Args: query: Search query string (required) region: Region code like 'us-en', 'uk-en', 'in-en' (default: 'us-en') max_results: Maximum number of results, 1-100 (default: 10) safesearch: Safe search level: 'on', 'moderate', 'off' (default: 'moderate')

Returns: List of search results with title, body, and url

NameRequiredDescriptionDefault
queryYes
regionNous-en
safesearchNomoderate
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose the return shape (title, body, url) and all defaults, but says nothing about rate limits, result truncation, latency, or whether results are cached — meaningful gaps for a search tool an agent may call repeatedly in a loop.

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 purpose sentence is front-loaded, then Args and Returns are laid out in a scannable order with defaults inline. Efficient overall, with minor waste in restating types the schema already declares ("Search query string", "integer").

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?

An output schema exists, so the Returns block is largely redundant, and the missing pieces are the ones not covered elsewhere: no safety/profile statement absent annotations, no guidance on calling this alongside fetch_content to get page bodies, and no note on result limits or pagination. Sufficient to invoke, not sufficient to use well.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate and largely does: it gives a required flag for query, concrete region code examples ('us-en', 'uk-en', 'in-en'), the 1-100 range for max_results, and the three allowed safesearch values. It does not explain what region actually changes (spelling, language, ranking), which would have made this a 5.

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

Purpose4/5

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

States a specific verb and resource ("Search the web for text content"), and the word "text" implicitly separates it from image/video/book/news siblings. It never names the closest alternatives, though, and does not distinguish itself from search_everything, so the differentiation is only partial.

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?

Usage is implied by "text content" — an agent can infer this is the sibling to pick for prose pages rather than images or videos. There is no explicit when-to-use/when-not statement, no mention of search_everything as a broader fallback, and no stated relationship to fetch_content for retrieving full pages.

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. 8 tool updatesv1.0.5
    • First observedfetch_content
    • First observedfetch_multiple_contents
    • First observedsearch_books
    • First observedsearch_everything
    • First observedsearch_images
    • First observedsearch_news
    • First observedsearch_videos
    • First observedsearch_web

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Most tools are cleanly split by media type (web, books, images, videos, news) plus single vs. batch fetching, so boundaries are clear. The only real overlap is search_web versus search_everything, which both return text results, and an agent could plausibly pick the wrong one for a plain web query.

Naming Consistency5/5

All names are snake_case and follow a predictable verb-first pattern: search_<media> for queries and fetch_content / fetch_multiple_contents for retrieval. The singular/plural contrast on the fetch pair is deliberate and readable.

Tool Count5/5

Eight tools is well-scoped for a search-and-fetch server: five media-specific searches, one aggregate search, and two content fetchers. Each tool earns its place with no redundant entries.

Completeness5/5

The surface covers every common retrieval mode (text, books, images, videos, news, aggregate) plus single and parallel URL content extraction, with rich filters per media type and max_results up to 100 compensating for the lack of pagination. No obvious dead ends for a search-oriented domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal MCP server for agent-friendly web extraction and search. Offers two tools: fetching real pages with Playwright and Crawl4AI, and searching across 7 engines with automatic fallback.
    3
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A self-hosted, MCP-native web-search backend for AI agents that provides meta-search, clean extraction, RAG with citations, and GitHub project selection.
    5
    MIT