Skip to main content
Glama
aisearch

aisearch

by PKrokosz

AiSearch — zamknięty ekosystem wyszukiwania + przeglądarka dla agentów

Zamknięty ekosystem wyszukiwania dla agentów AI: plan → propose → resolve → falsify → [SERP] → learn, z autokorektorem (redirect/Wayback), trzema cache'ami, feedami, nauką źródeł i detektorem driftu dokumentacji. Tam gdzie tekst się nie przewija (JS, SPA), wchodzi przeglądarka Obscura (V8) — a werdykt zawsze zostaje po stronie silnika. Jeden serwer MCP, trzy wejścia (MCP/HTTP/CLI), zero zależności runtime.

To nie jest kopia ani „jeszcze jeden wrapper". To synteza dwóch dojrzałych podejść w jednym czystym repo:

Warstwa

Skąd

Co wzięliśmy

Mózg — pipeline plan→propose→resolve→falsify→rank→[SERP]→learn→out, 3 cache'e, feedindex, prior/drift, ewaluacja z bramką CI

pkrokosz.pl/mcp/src/web/ (AiSearch)

cały rdzeń — jeden do jednego, z 49 testami i zielonym gate'm

Ręce — przeglądarka headless (38 narzędzi), render jako eskalacja

agentmg/tools/obscura/ (Obscura)

klient MCP + polityka renderowania + passthrough narzędzi browser_*

Interfejsy — jeden silnik, trzy wejścia

oba źródła

MCP stdio + HTTP + CLI-bridge; sandbox Python (tylko przestrzeń web)

Bez szumu — celowo usunięte: narzędzia YouTube (mają własne repo youtube-transcript-search), przestrzenie sandboxu niebędące web (posts/projects/agentmg…), zależności runtime (zero — npm install niepotrzebny), fork SDK MCP (JSON-RPC 2.0 po liniach napisany ręcznie — 4 metody, nie biblioteka), domeny własne w kodzie (przez WEB_SOURCE_LOCAL), PHP-warstwa (repo ją dostarcza samo, jeśli chce).

Szybki start

# 1. Bramka jakości — offline, deterministyczna (CI)
npm run eval            # replay + gate: hit_rate, repair_rate, false_positive
npm test                # wszystkie testy (Node + Python), bez sieci

# 2. Dashboard / ślad decyzji w języku naturalnym
npm run dashboard "PHP 8.4 release announcement changelog"

# 3. Serwer MCP dla agenta (opencode / Claude / inne)
#    package.json "bin": aisearch → src/mcp/server.mjs
#    albo ręcznie: node src/mcp/server.mjs

Rejestracja MCP (opencode / Claude)

{
  "mcpServers": {
    "aisearch": {
      "command": "node",
      "args": ["C:/Users/admin/Desktop/aisearch/src/mcp/server.mjs"]
    }
  }
}

Warstwa HTTP (sandbox, debug, integracje)

npm run http                                   # http://127.0.0.1:8787
curl -H "authorization: Bearer $WEB_API_KEY" http://127.0.0.1:8787/web/stats

Related MCP server: CrawlEyes

Narzędzia (jeden serwer, dwa światy)

Silnik (web.*) — 13 narzędzi:

Narzędzie

Po co

web.search

cały pipeline; wynik = ranked + provenance + ślad decyzji

web.brief

jedno wywołanie → zwinięty brief (rank/score/flags)

web.verify_links

partia kandydatów w jednym callu: survived/rejected/repaired

web.drift_report

drift dokumentacji + prior + werdykt w języku naturalnym

web.render

render jednej strony przez V8 (jawny, drogi)

web.trace

pełny ślad etapów — do debugowania „co się zadziało"

web.feedback

pętla użyteczności: used/ignored/rejected → prior

web.eval

metryki jakości + werdykt bramki (replay/live)

web.stats · web.drift · web.cache · web.feeds · web.configure

widok wnętrza ekosystemu

Przeglądarka (browser_*) — pełny passthrough Obscury (browser_navigate, browser_markdown, browser_links, browser_click, browser_fill, browser_evaluate, browser_screenshot, browser_pdf, zakładki…). Lista zależy od zainstalowanej wersji binarii. Gdy binaria nie ma — serwer i tak działa, tylko web.*.

Jak współpracują mózg i ręce

plan → propose → resolve (fetch, redirecty, cache) → renderPass (Obscura, auto) → falsify → rank → [SERP] → learn → out
                                                    └── tylko JS-shelle: 200, ale treści < WEB_RENDER_MIN_TEXT

Zasady (wynikione z pułapek obu światów, opis w docs/ARCHITECTURE.md):

  1. Fetch zostaje na głównej ścieżce — szybki, liczy redirecty (na nich stoi detektor driftu), deterministyczny w replay.

  2. Przeglądarka eskalacjią, nie fetcherem — walkRedirects liczy hop'y; przeglądarka followuje je po cichu i zepsułaby ten licznik.

  3. Budżet i jawność — WEB_RENDER_MAX (domyślnie 3) na zapytanie; tryb all tylko świadomie; błąd przeglądarki nie wywala pipeline'u.

  4. Replay jest czysty — bez renderera nie ma requestów: ewaluacja offline pozostaje deterministyczna, bramka CI nie może „pogięzić" wyniku siecią.

Sandbox Python (receptury)

python src/sandbox/launch.py --recipe web_search_brief --args '{"query":"PHP 8.4 release changelog"}'
python src/sandbox/launch.py --recipe web_verify_links  --args '{"urls":["https://www.php.net/releases/8.4/en.php","https://ten-url-nie-istnieje.example"]}'
python src/sandbox/launch.py --recipe web_render_page  --args '{"url":"https://example.com"}'

Receptury: web_search_brief, web_verify_links, web_drift_report, web_render_page. Antywzorzec: model pcha jedno wywołanie, partia dzieje się w silniu. Sesje (--workspace --session ID) trzymają WORKSPACE między wywołaniami (TTL 15 min, max 50). W repo jest tylko przestrzeń web — reszta sandboxu jest celowo pusta.

Bramki

npm run syntax         # node --check + py_compile na wszystkim
npm run test:unit      # browser/render, serwer MCP (ze stubem), HTTP/bridge
npm run test:web       # 49 testów rdzenia (plan/propose/resolve/falsify/cache/feeds/dashboard)
npm run test:py        # 10 testów receptur + 10 testów sesji/launchera (offline)
npm run eval           # ewaluacja replay + gate regresji
npm run eval:live      # to samo z prawdziwą siecią

Wynik na dziś: syntax 0 błędów · 49 + 3 Node · 20 Python · eval gate PASS.

Layout

src/
  engine/     rdzeń AiSearch (16 modułów) + instance.mjs (wspólna instancja) + dashboard
  browser/    client.mjs (NDJSON MCP → Obscura) · render.mjs (polityka eskalacji)
  mcp/        server.mjs — jeden serwer: web.* + browser_* (zero zależności)
  http/       server.mjs (REST) · bridge.mjs (CLI stdin→stdout)
  sandbox/    client.py · launch.py · tools.py (mock) · sessions.py · redact.py · recipes/
test/         testy Node (stub Obscury w test/stub-obscura.mjs)
fixtures/     web-eval.json — nagrania do deterministycznego replay
scripts/      web-eval.mjs · check-syntax.mjs
bin/          tutaj ląduje obscura.exe (gitignored — pobierz z Releases)
docs/         ARCHITECTURE.md

Wymagania

  • Node ≥ 20 (do silnika, MCP, HTTP, testów)

  • Python ≥ 3.11 (sandbox + receptury; tylko stdlib)

  • Obscura opcjonalna — bez niej silnik działa (fetch, SERP, nauka), render i browser_* są wyłączone. Binaria: GitHub Releases projektu Obscura → bin/ albo OBSCURA_BIN.

Konfiguracja

Pełna lista z komentarzami: .env.example (→ .env, nigdy do gita). Najważniejsze: WEB_RENDER (auto/all/off), WEB_RENDER_MAX, WEB_SERP_ENABLED, WEB_COVERAGE_THRESHOLD, WEB_CONCURRENCY, WEB_HTTP_PORT, WEB_API_KEY.

Available Tools

13 tools
web.briefB

Jedno wywołanie → zwinięty brief: ranking + provenance (repaired/rendered/fromCache) + coverage + uwagi. Do raportów, nie do debugu.

NameRequiredDescriptionDefault
topNo
urlsNo
queryYes

TDQS

B3.4/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, and it does disclose the composition of the result (ranking + provenance + coverage + notes) plus the single-invocation aggregation behavior, which is genuinely useful. It says nothing about side effects, permissions, latency or how urls/top affect the aggregation, so mutation and safety profile remain unknown.

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?

Two short clauses, outcome first and usage constraint second, with zero filler. The density comes at the cost of some opacity (the repaired/rendered/fromCache triple is unpacked but 'zwinięty brief' and 'coverage' are left as jargon).

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 read-style aggregator with no output schema, the description does outline the returned sections, which is the most important missing piece. But with no annotations and 0% schema coverage, three undocumented parameters and no statement of side effects remain significant holes for correct invocation.

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?

Schema description coverage is 0% across three parameters (query, top, urls), and the description supplies no parameter meaning at all — no mention of what 'top' caps, whether 'urls' restricts the candidate set, or the query's role. The agent must infer everything from bare type declarations.

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 names a concrete outcome vocabulary: a condensed brief bundling ranking, provenance flags (repaired/rendered/fromCache), coverage and notes, produced in a single call. That is specific enough to distinguish it from web.search (raw results) and web.drift_report (diagnostics), though 'brief' itself is never defined and there is no title to anchor it.

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

Usage Guidelines4/5

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

'Do raportów' states the intended use case and 'nie do debugu' explicitly excludes the debugging scenario, which usefully routes the agent away from web.trace/web.eval. It stops short of naming the alternative sibling to call instead, so it misses the top band.

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

web.cacheC

Stan lub czyszczenie cache (resolve/content/feeds).

NameRequiredDescriptionDefault
actionNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, yet it never says that 'clear' is a destructive, irreversible mutation, whether it affects all namespaces or one, whether it requires elevated permissions, or whether concurrent requests are impacted. Naming the cache domains is the only extra context, and the description doesn't explain whether the tool operates on all of them or one at a time.

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?

A single short sentence with no filler, and the resource is front-loaded. It is terse to the point of under-specification, but nothing is redundant or padded.

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 one-parameter tool this is close to adequate, but with no annotations and no output schema the description should at minimum state that one mode destroys data and what each mode returns. The mention of three cache domains without explaining their relationship to the single action parameter leaves a real gap.

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

Parameters3/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; it partially does by mapping 'stats' to state inspection and 'clear' to clearing, and by naming cache domains. But the enum values themselves are never explained, no default for the optional action is stated, and the listed domains (resolve/content/feeds) have no corresponding parameter in the schema, creating ambiguity about whether they are selectable at all.

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

Purpose3/5

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

The description states the resource (cache) and names the two modes (state vs. clearing) plus the cache domains (resolve/content/feeds), which does separate it from siblings like web.stats or web.feeds. However, it is a noun phrase rather than a clear verb+resource statement, and the Polish wording leaves an agent to infer which mode the tool actually performs on a given call.

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 guidance on when to call this versus web.stats (which plausibly returns metrics) or web.configure. Nor does it state when inspection ('stats') is appropriate versus when invalidation ('clear') is warranted, leaving the choice entirely to the schema enum.

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

web.configureC

Rozstrzygnięta konfiguracja + stan renderera.

NameRequiredDescriptionDefault

No parameters

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 behavioral burden and supplies almost nothing: no indication of whether the call is read-only or mutating, whether it refreshes or caches, or what it returns. The name suggests a write operation while the description reads like a status snapshot, leaving the mutation/read profile genuinely ambiguous.

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?

It is certainly short and free of padding, but it is a sentence fragment rather than a front-loaded statement of action and scope. Brevity here comes from under-specification rather than from efficient editing.

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?

The tool is structurally simple (no params, no nested objects), which lowers the bar, but with no output schema and no annotations the description must explain what the two named artifacts are and when they are useful, and it does not. An agent cannot confidently decide to call it.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already shows. Baseline 4 applies for a parameterless tool.

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

Purpose2/5

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

The description is a noun phrase ("Rozstrzygnięta konfiguracja + stan renderera") with no verb, so it never says whether the tool returns resolved configuration plus renderer state, applies a configuration, or something else. It also does not distinguish "configure" from siblings such as web.stats or web.render, which plausibly surface overlapping status information.

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 guidance, no prerequisites, and no named alternative among the twelve web.* siblings. An agent has no basis for choosing this over web.stats or web.render when it needs configuration or renderer status.

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

web.driftC

Detektor driftu: domeny z przyspieszonymi przekieraniami.

NameRequiredDescriptionDefault
thresholdNo

TDQS

C2.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 burden, yet it says nothing about whether this is a read-only scan, what output shape it returns, whether it scans a single domain or the whole crawl, or how long it takes. Only the detection target is disclosed.

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

Conciseness2/5

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

One short sentence is not wasteful, but here brevity is under-specification rather than crispness: it front-loads a label and omits everything an agent needs. It also switches to Polish while the tool name and all siblings are English, costing clarity for no gain.

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?

The tool is structurally simple (one optional param, no nested objects, no output schema), so the bar is low, but the description still fails to explain the sole parameter or the return behavior, and there are no annotations to fill the gap.

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?

Schema description coverage is 0% and the single parameter 'threshold' is a bare number with no type, unit, default, or scale meaning. The description does not mention 'threshold' at all, so the agent cannot know whether it is a redirect count, a rate, or a sensitivity score.

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

Purpose3/5

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

The description names a specific detector for a specific signal (domains with accelerated/heightened redirects), which is more than a restatement of the name. However, 'drift' and 'przekierania' are not defined, and with a sibling named web.drift_report the agent cannot easily tell whether this detects drift or reports it. Purpose is implied, not pinned down.

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 call this, when to prefer web.drift_report or web.search, or what prerequisite data is needed. The only guidance is what the tool nominally detects, which the agent must infer into a use case.

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

web.drift_reportC

Raport driftu dokumentacji + prior źródeł + werdykt w języku naturalnym. Domeny, które zaczęły przekierowywać = docs się przestawiły.

NameRequiredDescriptionDefault
thresholdNopróg redirect_ratio (domyślnie 0.25)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full burden of behavioral disclosure and falls short. It does not say whether the tool performs live crawling (and the associated cost/latency), whether it is strictly read-only, whether it consumes a pre-built index, or what the 'prior źródeł' actually represents.

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?

Two short sentences with the deliverable front-loaded and no padding. The second sentence is somewhat telegraphic and uses unexplained jargon ('prior źródeł'), which costs a little clarity but not length.

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 no-annotation, no-output-schema analysis tool, the description covers what is produced but not how, at what cost, or in what format the verdict arrives. It is minimally sufficient to try the tool but leaves real gaps an agent would want filled.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter (threshold, default 0.25), so the schema already documents it. The description mentions redirect behaviour but never explains how threshold changes the reported drift, so it adds no meaning beyond the schema; baseline 3 applies.

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 concrete deliverable: a documentation drift report bundled with a source prior and a natural-language verdict, so the verb+resource are identifiable. It never distinguishes this tool from the sibling 'web.drift', which by name appears to overlap heavily, leaving the agent to guess which one to call.

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 explicit when-to-use, when-not-to-use, or alternative routing guidance. The clause about domains that started redirecting hints at the signal that defines drift, but the agent is not told when to pick this over web.drift or web.verify_links.

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

web.evalC

Ewaluacja jakości (replay offline / live) + opcjonalnie werdykt bramki regresji.

NameRequiredDescriptionDefault
gateNo
modeNo
thresholdsNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden and does not meet it. It does not say whether live mode performs network calls, whether the gate verdict can fail/block a pipeline, what happens when thresholds are unmet, or whether the call is expensive or long-running.

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?

A single short sentence with no fluff, but it is terse to the point of under-specification, and the parenthetical mode list is doing work that belongs in prose. There is nothing to cut, but also little structure to front-load information beyond the two mode names.

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?

With three parameters (one nested), no annotations, no output schema, and zero parameter documentation, an agent cannot determine what the tool returns or how to construct thresholds. The definition is far from complete for a tool whose output apparently includes a pass/fail gate verdict.

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?

Schema description coverage is 0%, so the description must compensate. It glosses 'mode' (replay/live) and implies 'gate' triggers a verdict, but 'thresholds' is a nested object with completely undocumented shape and keys in both schema and description.

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

Purpose3/5

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

The description names an activity (quality evaluation) with two modes (offline replay / live) plus an optional regression-gate verdict, which is more than a restatement of the name. However, 'jakość' (quality) of what is never specified — pages, search results, or answers — and nothing distinguishes it from siblings like web.verify_links or web.drift_report, both of which also assess output quality.

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 indication of when to pick this over web.verify_links, web.drift_report, or web.stats, nor when replay vs live mode is appropriate. The parenthetical mode names hint at a choice but give no selection criteria.

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

web.feedbackC

Pętla użyteczności: used/opened/ignored/rejected → linklog → prior. Bez tego system uczy się rozstrzygać linki, a nie pomagać.

NameRequiredDescriptionDefault
urlYes
labelYes
queryNo

TDQS

C2/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose a downstream effect ('linklog → prior'), implying the submission influences future link scoring, which is genuinely useful context. However, it says nothing about whether records are persisted, idempotent, deduplicated by URL, or what the call returns, and the jargon ('prior', 'linklog') is never defined.

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

Conciseness2/5

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

At two short sentences it is brief, but brevity here comes from compression into internal jargon rather than from precision. The purpose is not front-loaded, and the arrow notation 'A → B → C' forces the reader to decode a pipeline instead of reading a plain statement of function.

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?

For a 3-parameter mutation-style tool with no annotations, no output schema, and zero schema description coverage, the description should establish what is written, where, and under what conditions. It gestures at the feedback loop concept but leaves the agent unable to invoke the tool confidently, particularly regarding the role of 'query' and the effect of each label.

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?

Schema description coverage is 0%, so the description must compensate for all three parameters. Instead it only echoes the four label enum values already present in the schema and adds no meaning for 'url' (is it required to match a prior search result?) or for the optional 'query' (is it the originating query context?). This leaves the most semantically important parameter undocumented.

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

Purpose2/5

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

The description never states a verb or resource: it opens with the abstract phrase 'Pętla użyteczności' (utility loop) and an arrow chain 'used/opened/ignored/rejected → linklog → prior'. Only by cross-referencing the tool name web.feedback and the label enum can an agent infer this records a feedback label against a URL. The listed labels merely restate the schema enum rather than naming the action.

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?

The second sentence gives a rationale ('Bez tego system uczy się rozstrzygać linki, a nie pomagać'), which hints at why feedback matters, but there is no statement of when to call this versus siblings such as web.trace, web.eval, or web.stats. No preconditions, no when-not-to-use, and no named alternative are provided.

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

web.feedsC

Rejestr kanałów RSS/Atom (warstwa świeżości): list/add/remove/reindex.

NameRequiredDescriptionDefault
urlNo
nameNo
actionNo
intentNo

TDQS

C2.2/5.0
Behavior1/5

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

No annotations are supplied, so the description carries the entire burden, yet it discloses nothing about behavior. It does not say whether 'remove' is destructive or reversible, whether 'add' validates or fetches the URL, what 'reindex' costs or triggers, whether state persists, or whether any permissions are required.

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?

It is a single compact sentence with the resource front-loaded and the operations trailing, so nothing is padded. But the compression is under-specification rather than efficient writing, and the Polish phrasing sits oddly against English sibling names.

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?

For a four-parameter, multi-action tool that includes a destructive 'remove' and an undefined 'reindex', with no annotations and no output schema, the definition is far too thin. An agent has no basis for choosing between actions or knowing their side effects.

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?

Schema description coverage is 0% across 4 parameters. The description echoes the four action enum values, giving marginal mapping value, but adds no meaning for 'url', 'name', and especially 'intent', which remains entirely opaque in both schema and description.

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

Purpose3/5

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

The description names a concrete resource ('Rejestr kanałów RSS/Atom') and enumerates the operations (list/add/remove/reindex), so the general purpose is inferable. However, 'warstwa świeżości' is the only hint at how this differs from siblings like web.search or web.cache, and the fragmentary phrasing leaves the tool's overall role vague.

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 given on when to register a feed versus using web.search, web.brief, or web.drift, nor any prerequisites or exclusions. The action list implies what operations exist but not the conditions that select this tool over its siblings.

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

web.renderB

Render jednej strony przez przeglądarkę (V8): JS, SPA, treść za interakcją. Zwraca markdown + tytuł. Drogie — używaj świadomie.

NameRequiredDescriptionDefault
urlYes
timeoutMsNo

TDQS

B3.3/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 and does disclose two important traits: it is expensive, and it returns markdown plus a title. It is silent on authentication, rate limits, and what timeoutMs does when exceeded, which matters for a costly browser render.

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 single compact sentence pair: what it does, what it returns, and the cost warning, all front-loaded with zero filler.

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?

The return shape is covered in lieu of an output schema and the cost caveat is present. However, for a two-parameter tool where both parameters are undocumented and there are no annotations, the definition leaves real gaps for an agent to guess at.

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?

Schema description coverage is 0%, so the description must compensate and does not: neither 'url' nor 'timeoutMs' is explained. An agent gets no hint about URL format or what a timeout value means or defaults to.

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?

Names a specific verb and resource (render a single page via a V8 browser) and scopes it to JS/SPA content that only appears after interaction. That distinguishes it from lighter siblings such as web.search, though it never names an alternative explicitly.

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?

'Drogie — używaj świadomie' warns about cost and implies the tool should be a deliberate choice, which is useful guidance. But it gives no concrete when-to-use/when-not-to-use rule and does not point to a cheaper sibling (e.g. search or brief) for simpler fetches.

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

web.searchB

AiSearch: szukaj w zamkniętym ekosystemie (plan → propose → resolve → falsify → [SERP] → learn). Model zgaduje adresy, HTTP je weryfikuje i naprawia (redirect/Wayback). JS-shelle renderuje przeglądarka (auto), gdy treść < renderMinText. Wynik: ranked + provenance + ślad decyzji.

NameRequiredDescriptionDefault
topNoile najlepszych zwrócić (domyślnie 5)
serpNowymuś/wyłącz escape hatch do SERP
urlsNowłasne kandydaci URL (proposer inline, 0 kosztów)
limitNodocelowa liczba wyników (1-50)
queryYeszapytanie (PL lub EN)
renderNopolityka renderowania (domyślnie auto gdy przeglądarka dostępna)
intentsNowymuś intencje, np. ["advisory"]
stalenessNo

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the internal pipeline (plan → propose → resolve → falsify → SERP → learn), that HTTP verification repairs via redirect/Wayback, and that browser rendering kicks in automatically below a text threshold. It omits cost/latency, rate limits, and whether external network calls leave the 'closed ecosystem', which keeps it below a 5.

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?

A single dense block that front-loads internal pipeline stage names and arrow notation before stating the actual purpose and return shape. The pipeline enumeration is jargon that only partly earns its place for an agent selecting a tool, though nothing is truly redundant.

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 8-parameter tool with no annotations and no output schema, the description usefully compensates on the return side ('ranked + provenance + ślad decyzji'). However, it leaves sibling disambiguation, the undocumented 'staleness' parameter, and any cost/latency expectations unaddressed.

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

Parameters3/5

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

Schema description coverage is 88%, so the schema already documents nearly every parameter (including the serp escape hatch and render policy). The description adds only the renderMinText threshold concept, which is not itself a parameter; the enum-only 'staleness' param remains undocumented anywhere.

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 ('szukaj' / search) and adds scope ('w zamkniętym ekosystemie') plus what the output contains ('ranked + provenance + ślad decyzji'). It never names or contrasts a sibling tool (web.brief, web.verify_links, web.render), so an agent cannot tell from this text alone which sibling to pick.

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 when-to-use or when-not guidance relative to the twelve siblings. The only conditional language concerns internal mechanics ('renderuje przeglądarka (auto), gdy treść < renderMinText') and a SERP escape hatch, which explains behavior, not tool selection.

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

web.statsC

Wnętrze ekosystemu: cache, prior, drift, liczba wyszukań w sesji.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.2/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden: it must establish that this is a read of internal state, whether counters reset on read, whether values are per-session or global, and what shape the data takes. It does none of this. The noun list implies an internal-state inspection and hence a read-only operation, but that is inference, not disclosure.

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?

It is short, but the brevity comes from under-specification rather than economy — a colon-delimited fragment with no subject or verb. A handful more words stating what is reported would cost little and remove the ambiguity. Nothing is padded, but nothing is front-loaded either, since there is no main clause to front-load.

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?

With no output schema, no annotations, and no parameters, the description is the only channel for understanding the result, and it delivers a word list instead of a contract. An agent cannot tell whether the response is scalar counters, nested objects, or prose. For a zero-argument introspection tool this is the one place the return description was mandatory.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. No parameter-level meaning is missing because no parameters exist.

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

Purpose2/5

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

The description is a bare noun list ("cache, prior, drift, session search count") with no verb, so it never states what the tool actually does with those things — read them? reset them? aggregate them? It hints at the subject matter of "stats" but only broadens the name into adjacent nouns rather than specifying an operation. Siblings such as web.drift_report, web.cache, and web.drift overlap these same concepts, and nothing here distinguishes web.stats from them.

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

Usage Guidelines1/5

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

There is no when-to-use guidance, no when-not-to-use, and no reference to any of the twelve sibling tools. An agent seeing this next to web.cache, web.drift, and web.drift_report has no basis for choosing one over another. The listed terms arguably overlap three siblings, making the ambiguity worse rather than better.

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

web.traceC

Pełny ślad etapów w języku naturalnym (to, co dashboard rysuje) + statystyki. Do debugowania „co się zadziało".

NameRequiredDescriptionDefault
topNo
urlsNo
queryYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations exist, so the description bears the full burden. It does disclose the shape of the output (natural-language stage trace plus statistics, mirroring the dashboard), which is real value since there is no output schema, but it says nothing about whether the call is read-only, whether it re-runs a live query or replays recorded telemetry, cost/latency, or paging.

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?

Two short sentences, output described first, purpose second — well front-loaded with no filler. The parenthetical 'what the dashboard draws' is slightly cryptic and the whole definition is terse to the point of under-specification, but nothing is wasted.

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?

For a tool with three undocumented parameters, no annotations, and no output schema, the description is far too thin; an agent cannot tell what 'top' or 'urls' do or when to prefer this over web.stats. Only the output content is covered.

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% across three parameters (required 'query', plus 'top' and 'urls'), and the description explains none of them. 'top' and 'urls' are completely opaque from both schema and prose, so the description fails to compensate for the coverage gap.

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 resource: a full natural-language trace of pipeline stages plus statistics, framed as a debugging view of 'what happened'. That is more concrete than a restated name, though it never positions itself against the nearby web.stats or web.drift_report, which also surface pipeline data.

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?

Gives one implied trigger ('for debugging what happened') but names no alternatives and no exclusions (e.g., use web.stats for aggregate metrics only, use web.trace when you need stage-by-stage narrative). An agent must infer the boundary from sibling names alone.

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. 13 tool updatesv1.0.0
    • First observedweb.brief
    • First observedweb.cache
    • First observedweb.configure
    • First observedweb.drift
    • First observedweb.drift_report
    • First observedweb.eval
    • First observedweb.feedback
    • First observedweb.feeds
    • First observedweb.render
    • First observedweb.search
    • First observedweb.stats
    • First observedweb.trace
    • First observedweb.verify_links

TDQS

C2.8/5.0

Scored across 13 tools

Disambiguation3/5

Most tools occupy distinct niches (search, render, verify_links, feeds, cache, configure), but web.drift and web.drift_report clearly overlap, and web.stats vs web.trace both expose internal ecosystem state with only subtle wording differences. web.brief vs web.search is also a thin distinction (collapsed output for reports vs full ranked result). Descriptions help, but an agent can plausibly misselect among these pairs.

Naming Consistency4/5

All tools share a clean `web.` namespace with lowercase snake/compound names, which is highly predictable. The minor deviation is mixed grammatical style — some are verbs (search, render, verify_links, configure) and others plain nouns (stats, cache, feeds, drift), plus drift vs drift_report is an inconsistent granularity pair.

Tool Count4/5

13 tools sits comfortably in a well-scoped range and each maps to a recognizable stage of the search/resolve/learn pipeline. It is slightly heavy on introspection tools (stats, trace, cache, configure, eval) relative to the core search surface, but nothing feels gratuitous.

Completeness4/5

The lifecycle is essentially covered end-to-end: search, verify, brief, render, trace, feedback/learning loop, eval, caching, feeds and configuration all have entry points. Minor gaps include no explicit single-URL content extraction distinct from render, and no direct read of a stored linklog/prior record despite feedback writing to it.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to perform web searches with full content retrieval and multi-engine provenance, including trust scoring and local corpus persistence, via MCP integration.
    8 npm
    4
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to perform web searches and extract full-text content from web pages via standard MCP tools, with fallback search and semantic reranking.
    2
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to perform web research over MCP: search with a real browser, fetch JS-rendered pages, download PDFs and convert them to Markdown, then search and page through large documents using bounded previews so the context window isn't flooded.
    BSD Zero Clause
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to run web searches across configured providers and crawl individual pages or whole sites into clean Markdown or JSON, including authenticated crawls and local or HTTP MCP deployment.
    -