Skip to main content
Glama
financesaur

ollama-web-tools-mcp

by financesaur

Ollama Web Tools MCP

Python 3.12+ MCP server preserving the Ruby oracle's web_search and web_fetch contracts and adding cluesift_domain_fetch. It uses the official Python MCP SDK, stdio by default, and stateless JSON streamable HTTP at / with --http.

Configuration

Production (prod or production in the first set of ENVIRONMENT, CLUESIFT_ENV, or ENV) requires OLLAMA_KEY_POOL_FILE. The reloadable UTF-8 JSON document has exactly this useful shape; array order is strict priority and duplicates are removed while preserving first occurrence:

{"keys":["primary-ollama-tools-key","secondary-ollama-tools-key"]}

The file is re-read when its mtime changes or after a two-second TTL. Outside production only, comma-separated OLLAMA_CLOUD_API_KEYS, then OLLAMA_API_KEY, are fallback inputs. Keys are never logged; diagnostics identify them only by the first 12 lowercase hex characters of SHA-256.

Optional Ollama timeouts: OLLAMA_OPEN_TIMEOUT=10, OLLAMA_READ_TIMEOUT=60, OLLAMA_WRITE_TIMEOUT=30. ClueSift aliases use complete endpoint URLs (not base URLs):

  • cluesift-test: CLUESIFT_ARTIFACT_TEST_URL and _TOKEN

  • cluesift-prod: CLUESIFT_ARTIFACT_PROD_URL and _TOKEN

Each pair must be wholly present or absent. Callback timeout defaults are CLUESIFT_ARTIFACT_OPEN_TIMEOUT=2, ...READ_TIMEOUT=5, and ...WRITE_TIMEOUT=5. Callback failures are content-free telemetry and never replace a successful fetch result. Callback URLs are complete absolute HTTP(S) endpoints, may use only their scheme's default port, and may not contain userinfo, a query, or a fragment. Fetched public URLs reject trailing-dot hosts rather than canonicalizing them.

Related MCP server: web-mcp-server

Run and develop

python -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/ollama-web-tools-mcp
.venv/bin/ollama-web-tools-mcp --http --port 8767
.venv/bin/ruff check .
.venv/bin/ruff format --check .
.venv/bin/pytest

The three tools are exactly web_search, web_fetch, and cluesift_domain_fetch. The ClueSift tool accepts only url, artifact_target, request_id, and case_id; see the copied implementation brief for its full security and delivery contract.

Available Tools

3 tools
cluesift_domain_fetchC

Fetch a public page and best-effort deliver it to a fixed ClueSift target.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
case_idYes
request_idYes
artifact_targetYes

TDQS

C2.4/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 burden of behavioral disclosure. The only behavioral hint is 'best-effort', implying possible delivery failure, but it does not explain error handling, retries, output format, or side effects. This leaves significant transparency gaps.

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 a single, concise sentence with no redundant wording. It delivers the primary purpose upfront, but its brevity comes at the cost of missing critical details, so it is efficient yet under-specified.

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

Completeness1/5

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

With four required parameters, no output schema, and no annotations, the description is severely incomplete. It fails to explain the full workflow, the role of each parameter, the destination of the fetched page, or how the agent should handle failures. This tool cannot be invoked confidently based on the description alone.

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

Parameters1/5

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

The input schema has 0% description coverage, and the tool description does not explain any of the four required parameters (url, artifact_target, request_id, case_id). The description adds no meaning beyond what the schema already shows, which is just types and an enum, leaving the agent without context for request_id and case_id.

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 clearly states the core action ('Fetch a public page and best-effort deliver it to a fixed ClueSift target'), which distinguishes it from siblings like web_fetch or web_search. However, 'fixed ClueSift target' is ambiguous given the artifact_target parameter, which can be 'cluesift-test' or 'cluesift-prod'.

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 is provided on when to use this tool versus the sibling tools (web_search, web_fetch). There is no mention of prerequisites, exclusions, or recommended use cases, leaving the agent to infer usage from the name and description alone.

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

web_fetchC

Fetch web page content using Ollama's web fetch API.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
truncateNo
max_charsNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'fetch web page content' with no mention of rate limits, authentication, output format, or how truncation/max_chars affect behavior.

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

Conciseness3/5

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

The description is a single concise sentence, but it is under-specified. It keeps the core action clear but omits necessary operational details, so it is not fully effective conciseness.

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

Completeness2/5

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

This is a simple fetch tool with 3 parameters and no output schema or annotations. The description does not cover truncation behavior, character limits, return types, or use cases, leaving a gap in operational understanding.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain any of the three parameters (url, truncate, max_chars). The description adds no value over the bare schema, and the agent gets no hints about parameter meanings.

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 clearly states the tool fetches web page content and identifies the specific API (Ollama's web fetch API). It distinguishes from sibling web_search by focusing on fetching content rather than searching, though it doesn't explicitly compare to cluesift_domain_fetch.

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 is provided about when to use this tool versus alternatives like web_search or cluesift_domain_fetch. It does not mention any prerequisites, contexts, or exclusions.

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. 3 tool updatesv0.1.0
    • First observedcluesift_domain_fetch
    • First observedweb_fetch
    • First observedweb_search

TDQS

B3/5.0

Scored across 3 tools

Disambiguation4/5

web_search clearly differs from the fetch tools. web_fetch and cluesift_domain_fetch both fetch pages, but cluesift_domain_fetch has a distinct delivery target, reducing confusion. One or two could be confused but descriptions clarify.

Naming Consistency4/5

web_search and web_fetch follow a consistent noun-verb pattern. cluesift_domain_fetch deviates by adding a longer domain prefix, but still ends with a verb and uses consistent snake_case.

Tool Count4/5

3 tools is on the lower end but appropriate for a focused web search/fetch server; each tool has a clear purpose, though the server may seem slightly thin.

Completeness4/5

The core web operations of search and fetch are covered, plus a specialized fetch-to-target. Minor gaps exist (e.g., no tool for parsing or summarizing pages) but not critical for the primary use case.

Maintenance

ActivityMaintained
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