Skip to content

feat(mcp): add SearXNG search tool#1988

Open
Zavianx wants to merge 6 commits into
tinyhumansai:mainfrom
Zavianx:codex/OH-1842-searxng-mcp-tool
Open

feat(mcp): add SearXNG search tool#1988
Zavianx wants to merge 6 commits into
tinyhumansai:mainfrom
Zavianx:codex/OH-1842-searxng-mcp-tool

Conversation

@Zavianx
Copy link
Copy Markdown
Contributor

@Zavianx Zavianx commented May 17, 2026

Summary

  • Adds a config-gated searxng_search tool for private, self-hosted web search through SearXNG.
  • Exposes the search flow through the agent tool registry, JSON-RPC controller registry, and MCP tools/list / tools/call surfaces.
  • Adds SearXNG config/env support with safe defaults, request timeout handling, category validation, and normalized result output.
  • Updates docs, capability catalog metadata, feature IDs, and focused Rust tests for config, registry, RPC/MCP validation, and integration behavior.

Problem

Solution

  • Added openhuman::integrations::searxng with a small HTTP client wrapper that calls SearXNG JSON search, enforces max result bounds, maps web to SearXNG general, skips invalid result rows, and logs grep-friendly checkpoints.
  • Added [searxng] config plus OPENHUMAN_SEARXNG_* / SEARXNG_* env overrides. The feature is disabled by default.
  • Registered searxng_search in optional agent tools, openhuman.tools_searxng_search in the controller registry, and MCP searxng_search as a config-gated tool.
  • Updated MCP docs, .env.example, the runtime capability catalog, feature IDs, and the coverage matrix.

Submission Checklist

If a section does not apply to this change, mark the item as N/A with a one-line reason. Do not delete items.

  • Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy
  • Diff coverage ≥ 80% — focused Rust tests cover the changed core/MCP/config paths; full merged pnpm test:coverage was not run locally, and CI diff-cover remains authoritative.
  • Coverage matrix updated — added 11.1.6 SearXNG MCP search to docs/TEST-COVERAGE-MATRIX.md.
  • All affected feature IDs from the matrix are listed in the PR description under ## Related.
  • No new external network dependencies introduced (mock backend used per Testing Strategy) — no mandatory dependency is added; the optional SearXNG HTTP endpoint is user-configured, disabled by default, and tested with a local mock.
  • Manual smoke checklist updated if this touches release-cut surfaces (docs/RELEASE-MANUAL-SMOKE.md) — N/A: no release-cut manual smoke surface changed.
  • Linked issue referenced without auto-closing; criteria 5-7 remain follow-up work.

Impact

  • Runtime/platform impact: Rust core, CLI/JSON-RPC controller registry, agent tool registry, and MCP server only. No React UI or Tauri shell behavior changed.
  • Security/privacy: SearXNG is disabled by default and only calls the configured base URL when explicitly enabled.
  • Compatibility: Existing MCP tools remain listed as before; searxng_search is omitted from tools/list unless enabled.
  • Performance: Search calls use a bounded timeout and bounded result count.

Related


AI Authored PR Metadata (required for Codex/Linear PRs)

Keep this section for AI-authored PRs. For human-only PRs, mark each field N/A.

Linear Issue

Commit & Branch

  • Branch: codex/OH-1842-searxng-mcp-tool
  • Commit SHA: 9e5d367cb39923131f436fb2735465d34ab1200f

Validation Run

  • pnpm --filter openhuman-app format:check
  • pnpm typecheck
  • Focused tests: cargo test --manifest-path Cargo.toml searxng -- --nocapture; cargo test --manifest-path Cargo.toml mcp_server -- --nocapture; cargo test --manifest-path Cargo.toml all_tools_registers_optional_search_lsp_and_tool_stats_when_enabled -- --nocapture; cargo test --manifest-path Cargo.toml about_app::catalog -- --nocapture; pnpm debug rust searxng
  • Rust fmt/check (if changed): cargo fmt --manifest-path Cargo.toml --all --check; cargo check --manifest-path Cargo.toml; cargo build --manifest-path Cargo.toml --bin openhuman-core
  • Tauri fmt/check (if changed): pnpm --filter openhuman-app rust:check via pre-push hook; Tauri shell unchanged.

Validation Blocked

  • command: N/A
  • error: N/A
  • impact: N/A

Behavior Changes

  • Intended behavior change: OpenHuman can expose searxng_search as a config-gated agent/RPC/MCP tool backed by a private SearXNG instance.
  • User-visible effect: Users who enable [searxng] can let agents search their configured self-hosted SearXNG endpoint from MCP-compatible clients.

Parity Contract

  • Legacy behavior preserved: Existing MCP/base tools and controller dispatch behavior remain available; SearXNG is added only when enabled.
  • Guard/fallback/dispatch parity checks: MCP tools/list omits config-gated tools on disabled or failed config load; tools/call rejects unknown args/categories and validates result limits before RPC dispatch.

Duplicate / Superseded PR Handling

  • Duplicate PR(s): None found via gh pr list --repo tinyhumansai/openhuman --state open --search "searxng OR SearXNG OR 1842".
  • Canonical PR: This PR.
  • Resolution (closed/superseded/updated): N/A

Summary by CodeRabbit

  • New Features

    • Added SearXNG self‑hosted search integration with enable/disable env vars, configurable base URL, per‑query max results, default language, and request timeout. New MCP tool "searxng_search" appears when enabled.
  • Documentation

    • MCP docs and capability catalog updated with SearXNG usage, configuration examples, and test‑coverage matrix entry.
  • Tests

    • New unit and integration tests for config/env parsing, tool/schema parameters, and result normalization.
  • Chores

    • Added feature ID 11.1.6.

Review Change Stack

@Zavianx Zavianx requested a review from a team May 17, 2026 06:57
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 17, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a configurable SearXNG MCP tool: new config/schema with env overrides, a reqwest-based SearXNG client that normalizes results, MCP tool-specs and RPC handlers, orchestrator registration, tests, and documentation updates. The tool is listed and registered only when enabled.

Changes

SearXNG Self-Hosted Web Search Tool Integration

Layer / File(s) Summary
Configuration schema and environment loading
src/openhuman/config/schema/tools.rs, src/openhuman/config/schema/types.rs, src/openhuman/config/schema/mod.rs, src/openhuman/config/mod.rs, src/openhuman/config/schema/load.rs, src/openhuman/config/schema/load_tests.rs, .env.example
Adds SearxngConfig and root Config.searxng; env overlays for OPENHUMAN_SEARXNG_* (with aliases), validation/clamping, defaults, and unit tests for parsing and TOML alias timeout_seconds.
SearXNG HTTP client and result normalization
src/openhuman/integrations/searxng.rs, src/openhuman/integrations/mod.rs
Implements SearxngSearchTool (reqwest client, timeouts), raw JSON deserialization, category normalization, result normalization to {title,url,snippet,source}, argument parsing, helpers, and unit + async integration tests.
MCP tool registration and RPC dispatch
src/openhuman/mcp_server/tools.rs, src/openhuman/mcp_server/protocol.rs
Adds searxng_search tool spec and JSON-schema, tool_specs() now includes searxng, list_tools_result() is config-gated, build_rpc_params parses/validates params including optional_max_results, and tests validate listing and param behavior.
Orchestrator tool registration and execution
src/openhuman/tools/ops.rs, src/openhuman/tools/schemas.rs, src/openhuman/tools/ops_tests.rs
Registers searxng_search in runtime when enabled, implements tools_searxng_search controller and handle_searxng_search handler with input validation and invocation of SearxngSearchTool, adds optional_string_array helper and tests.
User-facing documentation and capability catalog
src/openhuman/about_app/catalog.rs, src/openhuman/about_app/catalog_tests.rs, gitbooks/developing/mcp-server.md, docs/TEST-COVERAGE-MATRIX.md, scripts/feature-ids.json, .env.example
Adds intelligence.searxng_search capability and privacy mapping, updates docs with config and env examples, updates test-coverage matrix (adds 11.1.6), and appends feature id 11.1.6.

Sequence Diagram

sequenceDiagram
  participant Client as Agent/MCP Client
  participant Protocol as tools_schemas / MCP call
  participant Tool as SearxngSearchTool
  participant Searxng as SearXNG Instance

  Client->>Protocol: tools_searxng_search {query,categories,language,max_results}
  Protocol->>Tool: parse args & call search()
  Tool->>Searxng: GET /search?format=json&q=...&categories=...&language=...
  Searxng-->>Tool: raw JSON response
  Tool->>Tool: parse & normalize results -> {title,url,snippet,source}[]
  Tool-->>Protocol: SearxngSearchResponse {query, results}
  Protocol-->>Client: JSON-RPC success
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • senamakel

Poem

🐰 I hopped to a SearXNG door,

Queries trimmed and quietly stored,
Results normalized, snippets neat,
Self-hosted answers, privacy sweet,
The rabbit dances — search complete.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 57.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(mcp): add SearXNG search tool' accurately summarizes the main change—adding a SearXNG-backed search tool to the MCP server. It is concise, specific, and clearly indicates the primary feature addition.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot added the working A PR that is being worked on by the team. label May 17, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/openhuman/integrations/mod.rs (1)

1-5: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update module documentation to reflect mixed integration patterns.

The module documentation states that all tools "proxy through the backend API" and "never talk to external services directly." However, the newly added SearXNG integration calls a user-configured SearXNG endpoint directly (not through the backend API). This creates confusion about the architectural and security model of this module.

📝 Proposed documentation update
-//! Agent integration tools that proxy through the backend API.
+//! Agent integration tools.
 //!
-//! Each tool calls a backend endpoint (authenticated via JWT Bearer token) which
-//! handles external API calls, billing, rate limiting, and markup. The client
-//! never talks to external services directly.
+//! Most tools proxy through the backend API (authenticated via JWT Bearer token)
+//! which handles external API calls, billing, rate limiting, and markup.
+//! Some integrations (e.g., SearXNG) call user-configured endpoints directly
+//! when enabled via configuration.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/openhuman/integrations/mod.rs` around lines 1 - 5, Module doc comment in
src/openhuman/integrations/mod.rs incorrectly states all tools "proxy through
the backend API" and "never talk to external services directly"; update that
top-level documentation to mention mixed integration patterns and explicitly
call out that some integrations (e.g., the SearXNG integration) may call
user-configured endpoints directly rather than via the backend. Edit the
module-level comment (the docstring around the existing description) to explain
the two patterns (backend-proxied vs. client-direct for user-configured
endpoints), reference the SearXNG integration by name to clarify its behavior,
and include a brief note about the associated security/usage implications so
readers are not misled.
🧹 Nitpick comments (2)
src/openhuman/tools/schemas.rs (1)

588-606: 💤 Low value

Consider aligning string array parsing with the MCP layer.

The optional_string_array helper here does not trim whitespace or filter blank entries, unlike the similar helper in tools.rs (lines 645-686) which trims and drops empty strings. While category validation via normalize_categories will catch invalid entries, whitespace-only categories like " " would pass validation here but fail later.

For consistency, consider trimming entries and filtering blanks, or document the expected behavior difference.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/openhuman/tools/schemas.rs` around lines 588 - 606, The
optional_string_array helper currently returns raw strings and will allow
whitespace-only entries; update optional_string_array to mirror the MCP layer
behavior by trimming each item and filtering out empty/blank strings before
returning, i.e., in function optional_string_array iterate over items (in the
existing map/collect path), call trim() on each string, skip entries that become
empty after trimming, and return the filtered Vec<String>; reference
normalize_categories/tools.rs's trimming-and-filtering logic to ensure
consistent behavior with category validation downstream.
gitbooks/developing/mcp-server.md (1)

26-42: 💤 Low value

Consider adding a conditional indicator in the tools table.

Line 26 lists searxng_search alongside always-available tools without a visual cue (e.g., asterisk, note column) that it appears only when SearXNG is enabled, even though line 34 correctly documents this behavior. This could improve scannability for users checking tool availability.

📝 Optional table enhancement

Add a note column or footnote marker to indicate conditional tools:

 | MCP tool | Backing RPC | Purpose |
 | --- | --- | --- |
-| `searxng_search` | `openhuman.tools_searxng_search` | Search a configured self-hosted SearXNG instance. |
+| `searxng_search`* | `openhuman.tools_searxng_search` | Search a configured self-hosted SearXNG instance. |
 | `memory.search` | `openhuman.memory_tree_search` | Keyword search over memory-tree chunks. |
+
+\* Only listed when enabled in config
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@gitbooks/developing/mcp-server.md` around lines 26 - 42, The tools table
currently lists searxng_search alongside always-available tools (memory.search,
memory.recall, tree.*) without a visual cue that searxng_search is conditional;
add a concise indicator (e.g., an asterisk next to `searxng_search` or a
dedicated "Note" column) and include a matching footnote or inline note that
"searxng_search is present only when SearXNG is enabled" so the table and the
explanatory sentence about SearXNG are consistent; update the row for
`searxng_search` and the table header/footnote text so readers scanning the
table immediately see the conditional availability while keeping the existing
descriptive sentence intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/openhuman/integrations/searxng.rs`:
- Around line 307-312: The current assignment to snippet uses
item.content.or(item.snippet) which preserves a Some(content) even when that
content trims to an empty string, losing a non-empty snippet; change the logic
so you select item.content only if it is Some and its trimmed string is
non-empty, otherwise fall back to item.snippet, and finally to default. Locate
the snippet variable assignment and implement the conditional selection using
item.content and item.snippet (e.g., test trimmed content.is_empty() before
choosing it) so snippet ends up with a trimmed, non-empty value when available.
- Around line 360-369: Change the current tolerant parsing of language and
max_results so that presence with the wrong type produces an error instead of
being treated as missing: for language, inspect object.get("language"): if None
set language = None; if Some(value) then if value.as_str() yields a non-empty
trimmed string set language = Some(string) else return Err("invalid 'language'
parameter"); for max_results, inspect object.get("max_results"): if None set
max_results = None; if Some(value) then if value.as_u64() succeeds convert,
clamp to 1..=MAX_RESULTS and set max_results = Some(usize) else return
Err("invalid 'max_results' parameter"); update the code that constructs language
and max_results (the variables named language and max_results in this file) to
follow this logic and return a clear error on malformed inputs.

---

Outside diff comments:
In `@src/openhuman/integrations/mod.rs`:
- Around line 1-5: Module doc comment in src/openhuman/integrations/mod.rs
incorrectly states all tools "proxy through the backend API" and "never talk to
external services directly"; update that top-level documentation to mention
mixed integration patterns and explicitly call out that some integrations (e.g.,
the SearXNG integration) may call user-configured endpoints directly rather than
via the backend. Edit the module-level comment (the docstring around the
existing description) to explain the two patterns (backend-proxied vs.
client-direct for user-configured endpoints), reference the SearXNG integration
by name to clarify its behavior, and include a brief note about the associated
security/usage implications so readers are not misled.

---

Nitpick comments:
In `@gitbooks/developing/mcp-server.md`:
- Around line 26-42: The tools table currently lists searxng_search alongside
always-available tools (memory.search, memory.recall, tree.*) without a visual
cue that searxng_search is conditional; add a concise indicator (e.g., an
asterisk next to `searxng_search` or a dedicated "Note" column) and include a
matching footnote or inline note that "searxng_search is present only when
SearXNG is enabled" so the table and the explanatory sentence about SearXNG are
consistent; update the row for `searxng_search` and the table header/footnote
text so readers scanning the table immediately see the conditional availability
while keeping the existing descriptive sentence intact.

In `@src/openhuman/tools/schemas.rs`:
- Around line 588-606: The optional_string_array helper currently returns raw
strings and will allow whitespace-only entries; update optional_string_array to
mirror the MCP layer behavior by trimming each item and filtering out
empty/blank strings before returning, i.e., in function optional_string_array
iterate over items (in the existing map/collect path), call trim() on each
string, skip entries that become empty after trimming, and return the filtered
Vec<String>; reference normalize_categories/tools.rs's trimming-and-filtering
logic to ensure consistent behavior with category validation downstream.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2564aea9-cdd4-4277-a0ca-aa98efe6f696

📥 Commits

Reviewing files that changed from the base of the PR and between 780510f and 4aee3f1.

📒 Files selected for processing (19)
  • .env.example
  • docs/TEST-COVERAGE-MATRIX.md
  • gitbooks/developing/mcp-server.md
  • scripts/feature-ids.json
  • src/openhuman/about_app/catalog.rs
  • src/openhuman/about_app/catalog_tests.rs
  • src/openhuman/config/mod.rs
  • src/openhuman/config/schema/load.rs
  • src/openhuman/config/schema/load_tests.rs
  • src/openhuman/config/schema/mod.rs
  • src/openhuman/config/schema/tools.rs
  • src/openhuman/config/schema/types.rs
  • src/openhuman/integrations/mod.rs
  • src/openhuman/integrations/searxng.rs
  • src/openhuman/mcp_server/protocol.rs
  • src/openhuman/mcp_server/tools.rs
  • src/openhuman/tools/ops.rs
  • src/openhuman/tools/ops_tests.rs
  • src/openhuman/tools/schemas.rs

Comment thread src/openhuman/integrations/searxng.rs Outdated
Comment thread src/openhuman/integrations/searxng.rs Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 17, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 17, 2026
@Zavianx Zavianx mentioned this pull request May 17, 2026
12 tasks
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 18, 2026
Copy link
Copy Markdown
Contributor

@graycyrus graycyrus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough

Clean, well-structured addition of a config-gated searxng_search tool. The implementation follows existing integration patterns (Seltz sibling), has good test coverage, and all prior CodeRabbit feedback has been addressed. Two issues worth fixing: the Closes #1842 claim is premature since agent routing/priority/fallback aren't implemented, and the RPC handler rebuilds an HTTP client on every invocation.

Change Summary

File Change type Description
.env.example Modified Added SearXNG env vars
docs/TEST-COVERAGE-MATRIX.md Modified Added 11.1.6 row, bumped counts
gitbooks/developing/mcp-server.md Modified Added searxng_search to MCP tool table + config docs
scripts/feature-ids.json Modified Added 11.1.6
src/openhuman/about_app/catalog.rs Modified Added SearXNG capability entry
src/openhuman/about_app/catalog_tests.rs Modified Added searxng to catalog test
src/openhuman/config/mod.rs Modified Re-export SearxngConfig
src/openhuman/config/schema/load.rs Modified Env override parsing for searxng
src/openhuman/config/schema/load_tests.rs Modified Tests for searxng config loading
src/openhuman/config/schema/mod.rs Modified Re-export SearxngConfig
src/openhuman/config/schema/tools.rs Modified SearxngConfig struct + defaults
src/openhuman/config/schema/types.rs Modified Added searxng field to Config
src/openhuman/integrations/mod.rs Modified Added searxng module + exports
src/openhuman/integrations/searxng.rs New Core SearXNG tool implementation (546 lines)
src/openhuman/mcp_server/protocol.rs Modified list_tools now async
src/openhuman/mcp_server/tools.rs Modified SearXNG tool spec, config-gated listing, build_rpc_params
src/openhuman/tools/ops.rs Modified Register searxng_search in all_tools_with_runtime
src/openhuman/tools/ops_tests.rs Modified Test searxng registration
src/openhuman/tools/schemas.rs Modified Controller schema + handler for searxng_search

Per-file Analysis

src/openhuman/integrations/searxng.rs (new, 546 lines)

Well-written integration module. Follows the Seltz sibling pattern closely. Good error handling with anyhow::bail, proper logging with [searxng] prefix, trimming/validation on all inputs. The first_non_empty_trimmed helper elegantly solves the content/snippet fallback. Integration test with axum mock server is solid.

src/openhuman/tools/schemas.rs

The handle_searxng_search RPC handler reconstructs SearxngSearchTool (including a reqwest::Client) on every call. This is the main performance concern — see inline comment.

src/openhuman/mcp_server/tools.rs

Config-gated listing is correctly implemented. The list_tools_result gracefully degrades to base tools if config loading fails. build_rpc_params validates categories eagerly at the MCP boundary.

src/openhuman/mcp_server/protocol.rs

The test relaxation to contains checks reduces strictness — see inline comment.

Additional Findings

[major] PR uses Closes #1842 but does not implement acceptance criteria 5 (agent routing — agents with web-search skill auto-use searxng_search), 6 (priority logic — SearXNG over cloud search), or 7 (fallback handling). The PR itself is a valid, useful subset, but the issue link should be Relates to #1842 to avoid prematurely closing the issue. Alternatively, split criteria 5-7 into a follow-up issue.

[minor] Two separate constants define the same max-results cap: MAX_RESULTS: usize = 50 in integrations/searxng.rs and MAX_LIMIT: u64 = 50 in mcp_server/tools.rs. If one changes without the other, the MCP layer will reject at a different threshold than the tool layer clamps. Consider importing a single source of truth.

Comment thread src/openhuman/tools/schemas.rs
Comment thread src/openhuman/mcp_server/protocol.rs
@Zavianx
Copy link
Copy Markdown
Contributor Author

Zavianx commented May 18, 2026

Addressed @graycyrus review in 9e5d367:

  • PR body now uses Relates to #1842 and calls out agent routing / priority / fallback criteria 5-7 as follow-up work instead of closing the issue.
  • RPC SearXNG calls now reuse a shared reqwest::Client; timeout stays per configured request.
  • SearXNG max-results cap is exported from the integration and reused by MCP/RPC surfaces.
  • MCP tools/list protocol test is strict again for the base tool set, with only config-gated searxng_search excluded from the base comparison.

Validated locally with:

  • cargo fmt --manifest-path Cargo.toml --all --check
  • cargo test --manifest-path Cargo.toml searxng --lib
  • cargo test --manifest-path Cargo.toml mcp_server --lib

Pre-push checks also passed.

coderabbitai[bot]
coderabbitai Bot previously approved these changes May 18, 2026
@Zavianx
Copy link
Copy Markdown
Contributor Author

Zavianx commented May 18, 2026

@graycyrus I addressed the requested changes and CI is now green. Could you please re-review when you have a chance?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

working A PR that is being worked on by the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants