mcp-local-rag
mcp-local-rag
«примитивный» RAG-подобный сервер контекстного протокола веб-поиска (MCP), работающий локально. ✨ без API ✨
%%{init: {'theme': 'base'}}%%
flowchart TD
A[User] -->|1.Submits LLM Query| B[Language Model]
B -->|2.Sends Query| C[mcp-local-rag Tool]
subgraph mcp-local-rag Processing
C -->|Search DuckDuckGo| D[Fetch 10 search results]
D -->|Fetch Embeddings| E[Embeddings from Google's MediaPipe Text Embedder]
E -->|Compute Similarity| F[Rank Entries Against Query]
F -->|Select top k results| G[Context Extraction from URL]
end
G -->|Returns Markdown from HTML content| B
B -->|3.Generated response with context| H[Final LLM Output]
H -->|5.Present result to user| A
classDef default stroke:#333,stroke-width:2px;
classDef process stroke:#333,stroke-width:2px;
classDef input stroke:#333,stroke-width:2px;
classDef output stroke:#333,stroke-width:2px;
class A input;
class B,C process;
class G output;Установка
Найдите путь конфигурации MCP здесь или проверьте настройки клиента MCP.
Запустить напрямую через uvx
Это самый простой и быстрый метод. Вам нужно установить uv , чтобы это работало. Добавьте это в конфигурацию вашего сервера MCP:
{
"mcpServers": {
"mcp-local-rag":{
"command": "uvx",
"args": [
"--python=3.10",
"--from",
"git+https://github.com/nkapila6/mcp-local-rag",
"mcp-local-rag"
]
}
}
}Использование Docker (рекомендуется)
Убедитесь, что у вас установлен Docker . Добавьте это в конфигурацию вашего сервера MCP:
{
"mcpServers": {
"mcp-local-rag": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"ghcr.io/nkapila6/mcp-local-rag:latest"
]
}
}
}Аудиты безопасности
MseeP проводит аудит безопасности на каждом сервере MCP. Вы можете увидеть аудит безопасности этого сервера MCP, нажав здесь .
Клиенты МКП
Сервер MCP должен работать с любым клиентом MCP, который поддерживает вызов инструментов. Протестировано на следующих клиентах.
Клод Десктоп
Курсор
Гусь
Другие? Попробуйте!
Примеры на Claude Desktop
Когда LLM (например, Клоду) задают вопрос, требующий актуальной веб-информации, активируется mcp-local-rag .
При запросе на получение/поиск/выполнение поиска в Интернете модель предлагает использовать сервер MCP для чата.
В примере спросили его о последних моделях Gemma от Google, выпущенных вчера. Это новая информация, о которой Клод не знает.
Результат
mcp-local-rag выполняет поиск в Интернете в реальном времени, извлекает контекст и отправляет его обратно модели, предоставляя ей свежие знания:
Внося вклад
Есть идеи или хотите улучшить этот проект? Вопросы и запросы на внесение изменений приветствуются!
Лицензия
Данный проект лицензирован по лицензии MIT.
Available Tools
6 toolsdeep_researchDeep researchARead-only
Research a topic across several search terms and engines. Each term is searched on each backend, results are re-ranked locally by relevance, duplicates are removed, and the best pages are fetched as text.
Backends: auto, brave, duckduckgo, google, grokipedia, mojeek, startpage, wikipedia, yahoo.
"auto" (default): ddgs metasearch over several engines, skipping blocked ones. Most reliable.
"brave": fast and usually available.
"wikipedia": exact article lookups, best with title-like terms.
"google", "startpage", "yahoo", "mojeek": often blocked. Empty engines are reported as warnings, and if every chosen engine is empty the terms are retried with "auto".
| Name | Required | Description | Default |
|---|---|---|---|
| backends | No | Backends to use. Defaults to ["auto"]. Unknown names are skipped with a warning. | |
| include_urls | No | Whether to include each page's source URL. | |
| search_terms | Yes | 2-5 specific, related search queries covering different angles. Example: ["postgres query planner", "postgres index types", "EXPLAIN ANALYZE tutorial"] | |
| top_k_per_term | No | Number of top-ranked results to keep per search term per backend. | |
| num_results_per_term | No | Number of results to rank per search term per backend. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already declaring the safety profile, the description adds real value: it discloses the internal pipeline (search, local re-rank, dedupe, fetch page text) and the failure semantics (empty engines reported as warnings, retry with 'auto' if all chosen engines are empty). It stops short of disclosing cost/latency characteristics, which matters for a tool that fetches pages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a pipeline summary, then a scannable backend bullet list — well structured and mostly waste-free. The bullet list is slightly long but each entry carries decision-relevant information about reliability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return format need not be covered, and annotations cover the read-only/open-world profile; the description fills in pipeline and fallback behavior. The remaining gap is sibling disambiguation, which is the one thing an agent must know before choosing among the five search tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely enriches the 'backends' parameter by enumerating valid values and characterizing each one's reliability and best use, which the schema's one-line description does not do. The interaction between num_results_per_term and top_k_per_term (rank N, keep K) is implied but not explicitly explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Research a topic across several search terms and engines') and the following sentence spells out the pipeline: multi-term search, local re-ranking, deduplication, page fetching. It does not explicitly state how it differs from siblings like deep_research_google or deep_research_ddgs, though the backend list implies this tool is the superset that can target either.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Backend selection guidance is concrete and actionable: 'auto' is flagged as the most reliable default, 'brave' as fast, 'wikipedia' for title-like lookups, and google/startpage/yahoo/mojeek as often blocked with an auto-retry fallback. What is missing is guidance on when to pick this tool over the sibling search tools (search, rag_search_ddgs, deep_research_google), which an agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deep_research_ddgsDeep research (ddgs auto)ARead-only
Deep research using ddgs "auto" metasearch, which queries several engines per term and skips blocked ones. Results are re-ranked locally, de-duplicated and the best pages fetched as text. Same as deep_research with its default backend.
| Name | Required | Description | Default |
|---|---|---|---|
| include_urls | No | Whether to include each page's source URL. | |
| search_terms | Yes | 2-5 specific, related search queries. | |
| top_k_per_term | No | Number of top-ranked results to keep per search term. | |
| num_results_per_term | No | Number of results to rank per search term. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and openWorld, but the description adds real pipeline detail beyond them: multi-engine querying, skipping blocked engines, local re-ranking, de-duplication, and fetching of top pages as full text — which signals latency and network cost. It does not mention rate limits, failure modes, or how many pages get fetched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the backend mechanism first and the sibling equivalence last; every clause carries information an agent cannot get from the schema. No filler or repetition of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be explained, and annotations cover the safety profile. The description covers mechanism and scope well; only secondary operational facts such as cost, expected latency, or failure behavior are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (search_terms, top_k_per_term, num_results_per_term, include_urls) are already documented in the schema. The description adds no guidance on how many terms, how terms relate to each other, or how top_k interacts with the ranking stage, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (deep research) plus the exact backend mechanism: ddgs "auto" metasearch querying several engines per term while skipping blocked ones. It also explicitly relates itself to a sibling ("Same as deep_research with its default backend"), so an agent can distinguish it from deep_research without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence "Same as deep_research with its default backend" gives clear selection context: this is the default/alias variant rather than a distinct capability. It stops short of naming when to prefer deep_research_google or rag_search_ddgs instead, so there are no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deep_research_googleDeep research (Google)ARead-only
Deep research using only Google: each term is searched, re-ranked locally, de-duplicated and the best pages fetched as text. Google often blocks scrapers. If it returns nothing, the terms are retried with ddgs "auto" metasearch and a warning is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| include_urls | No | Whether to include each page's source URL. | |
| search_terms | Yes | 2-5 specific, related search queries. | |
| top_k_per_term | No | Number of top-ranked results to keep per search term. | |
| num_results_per_term | No | Number of results to rank per search term. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description discloses real behavioral facts: Google blocks scrapers, the pipeline re-ranks and de-duplicates locally, pages are converted to text, and a ddgs fallback fires with a warning when nothing is returned. That failure-mode and fallback disclosure is genuinely useful for an agent interpreting empty or warned results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what the tool does and followed by the failure mode and fallback. No filler, though the trailing fallback clause could be trimmed or merged for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-format explanation is unnecessary, and annotations cover the safety profile; the description supplies the pipeline, the scraping risk, and the fallback. What remains missing is guidance on choosing this over deep_research_ddgs or rag_search_google.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description loosely explains the rank-then-keep pipeline that underlies num_results_per_term versus top_k_per_term, but it never ties that pipeline to the parameter names, so it adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete pipeline: each term is searched, re-ranked locally, de-duplicated, and the best pages fetched as text. The 'using only Google' scoping gives a rough handle against the ddgs siblings, but the added note that it falls back to ddgs 'auto' metasearch blurs how it differs from deep_research_ddgs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the Google-flavored deep research option versus deep_research_ddgs, but no alternative is named and no when-not condition is stated. The fallback sentence describes internal behavior rather than telling the caller when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_search_ddgsWeb searchARead-only
Search the web and return the most relevant pages as text. Default choice for lookups. Uses ddgs "auto" metasearch, which queries several engines (DuckDuckGo, Brave, Wikipedia, ...) and skips any that are blocked. Results are re-ranked locally by semantic similarity to the query before the top pages are fetched.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query. Use natural language questions or keywords. Example: "latest developments in quantum computing" | |
| top_k | No | Number of top-ranked pages to fetch and return. Default: 5 | |
| num_results | No | Number of initial search results to rank. More results provide better coverage but increase processing time. Default: 10 | |
| include_urls | No | Whether to include each page's source URL for citation. Default: True |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, yet the description adds genuine behavioral detail: multi-engine metasearch, automatic skipping of blocked engines, local semantic re-ranking, and a subsequent page-fetch step. This tells the agent the call may be slow and that results are re-ordered, though latency and failure modes are not quantified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with the core action front-loaded first and the mechanism after; nothing is redundant with the schema. The standalone "Default choice for lookups" sentence is terse but slightly orphaned from the mechanism paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotations cover the safety profile, so the description's remaining job is mechanism and default-status — both covered. The only real gap is sibling differentiation across the five related search/research tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, which sets the baseline at 3. The description does implicitly explain the pipeline (broad initial results get re-ranked, then top pages are fetched), which clarifies why num_results and top_k are distinct, but it adds no explicit parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 and return the most relevant pages as text") and explains the underlying mechanism (ddgs "auto" metasearch over DuckDuckGo, Brave, Wikipedia). It calls itself the "Default choice for lookups," which weakly separates it from siblings, but it never contrasts the row with rag_search_google, search, or the deep_research variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Default choice for lookups" is an implied rule for when to reach for this tool, and the mechanism note hints at fallback behavior when an engine is blocked. However, no sibling is named as an alternative and there is no statement of when NOT to use it (e.g., versus rag_search_google or deep_research), leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_search_googleGoogle searchARead-only
Search Google and return the most relevant pages as text, re-ranked locally by semantic similarity. Google often blocks scrapers. When it returns nothing, this retries with ddgs "auto" metasearch and sends a warning saying so.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The query to search for. | |
| top_k | No | Number of top-ranked pages to fetch and return. | |
| num_results | No | Number of initial search results to rank. | |
| include_urls | No | Whether to include each page's source URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description adds real value: it discloses the local semantic re-ranking pass, that Google frequently blocks scrapers, that empty results trigger a ddgs 'auto' metasearch retry, and that a warning is emitted when that happens. This is exactly the kind of reliability context an agent needs. Return shape is left to the output schema, which is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler, leading immediately with what the tool does before the reliability caveat. The hard line breaks in the raw text are cosmetic and do not impede reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read-only search tool with a full output schema and annotation coverage, the description supplies the important missing context: local re-ranking, blocking risk, and the silent provider switch. Only the lack of sibling routing guidance keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both top_k and num_results are already documented in the schema; the description reinforces the two-stage model (rank N initial results, fetch and return the top K pages as text) but adds no syntax, format, or edge-case detail beyond that. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search Google and return the most relevant pages as text') and adds the distinguishing trait of local semantic re-ranking. It does not, however, contrast itself against the obvious siblings (rag_search_ddgs, deep_research_google), so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance relative to alternatives. The only routing information is an internal fallback to ddgs on empty results, which describes runtime behavior rather than when the agent should choose this tool over rag_search_ddgs or deep_research_google.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch (passages)ARead-only
Search the web and return only the passages that answer the query, not whole pages: usually about a tenth of the text of rag_search_ddgs. Use this first.
Tiers, cheapest first:
Search, then keep the top_pages results whose title/snippet match best.
Fetch those pages, split them into ~600-char passages, keyword-match them (BM25) against the query plus
keywords.Only if that leaves too many candidates, or matches nothing (a paraphrase), the local embedder ranks them by meaning. If nothing matched the keywords and the client can show questions, the user is asked whether they want the full pages instead.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The question or topic, in natural language. | |
| backend | No | Search backend, same names as deep_research. Default "auto". | auto |
| keywords | No | Terms a good answer would contain, including synonyms and exact phrases. Example for "how do I make postgres faster": ["index", "EXPLAIN ANALYZE", "query planner", "vacuum"]. Strongly improves results. | |
| top_pages | No | Pages to fetch and split. Default 5. | |
| num_results | No | Search results to consider. Default 10. | |
| max_passages | No | Passages to return. Default 8. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, but the description goes much further: it discloses the multi-tier ranking pipeline, that a local embedder may run, and that the client may prompt the user to switch to full pages. That is exactly the non-obvious behavioral context an agent needs before paying the cost of this call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is front-loaded and the tier list is scannable, with every tier conveying the cost tradeoff. It is on the long side for a search tool, and the closing sentence about the client asking about questions is a bit convoluted, but nothing is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation, and the description covers the remaining gaps: cost relative to siblings, fallback behavior, and where the `keywords` hint pays off. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline, but the description adds real meaning by tying parameters into the pipeline: `keywords` is matched via BM25 alongside the query, `top_pages` bounds stage 1, and the passage mechanics explain the ~600-char split. It stops short of explaining `backend` or `num_results` beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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') plus a precise output scope ('return only the passages that answer the query, not whole pages'), and explicitly contrasts itself with sibling rag_search_ddgs ('about a tenth of the text'). An agent can distinguish it from the rag_search_* siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this first', names rag_search_ddgs as the heavier alternative, and lays out the escalation order (cheap title/snippet filter -> fetch+BM25 -> embedder fallback). The condition that triggers the fallback path ('matches nothing, a paraphrase') is stated outright.
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.
6 tool updates
v1.1.1- Changed
deep_research5 fields changed- changed
Input schema / properties / backends / descriptionPrevious value: -"List of search backends to use. Defaults to [\"duckduckgo\", \"google\"].\n Can include: bing, brave, duckduckgo, google, grokipedia, \n mojeek, yandex, yahoo, wikipedia. If None, uses default."New value: +"Backends to use. Defaults to [\"auto\"]. Unknown names are skipped with a warning." - changed
Input schema / properties / include_urls / descriptionPrevious value: -"Whether to include URLs in the results."New value: +"Whether to include each page's source URL." - changed
Input schema / properties / num_results_per_term / descriptionPrevious value: -"Number of results to fetch per search term per backend."New value: +"Number of results to rank per search term per backend." - changed
Input schema / properties / search_terms / descriptionPrevious value: -"List of search terms to research. Provide multiple \n related search queries for comprehensive coverage.\n Example: [\"machine learning fundamentals\", \"neural networks\", \"deep learning best practices\"]"New value: +"2-5 specific, related search queries covering different angles.\n Example: [\"postgres query planner\", \"postgres index types\", \"EXPLAIN ANALYZE tutorial\"]" - changed
Input schema / properties / top_k_per_term / descriptionPrevious value: -"Number of top scored results to keep per search term per backend."New value: +"Number of top-ranked results to keep per search term per backend."
- Changed
deep_research_ddgs4 fields changed- changed
Input schema / properties / include_urls / descriptionPrevious value: -"Whether to include URLs in the results."New value: +"Whether to include each page's source URL." - changed
Input schema / properties / num_results_per_term / descriptionPrevious value: -"Number of results to fetch per search term."New value: +"Number of results to rank per search term." - changed
Input schema / properties / search_terms / descriptionPrevious value: -"List of search terms to research. The LLM should provide \n multiple related search queries for comprehensive coverage."New value: +"2-5 specific, related search queries." - changed
Input schema / properties / top_k_per_term / descriptionPrevious value: -"Number of top scored results to keep per search term."New value: +"Number of top-ranked results to keep per search term."
- Changed
deep_research_google4 fields changed- changed
Input schema / properties / include_urls / descriptionPrevious value: -"Whether to include URLs in the results."New value: +"Whether to include each page's source URL." - changed
Input schema / properties / num_results_per_term / descriptionPrevious value: -"Number of results to fetch per search term."New value: +"Number of results to rank per search term." - changed
Input schema / properties / search_terms / descriptionPrevious value: -"List of search terms to research. The LLM should provide \n multiple related search queries for comprehensive coverage."New value: +"2-5 specific, related search queries." - changed
Input schema / properties / top_k_per_term / descriptionPrevious value: -"Number of top scored results to keep per search term."New value: +"Number of top-ranked results to keep per search term."
- Changed
rag_search_ddgs3 fields changed- changed
Input schema / properties / include_urls / descriptionPrevious value: -"Whether to include source URLs in the results.\n If True, each result includes its URL for citation.\n Default: True"New value: +"Whether to include each page's source URL for citation.\n Default: True" - changed
Input schema / properties / num_results / descriptionPrevious value: -"Number of initial search results to fetch from DuckDuckGo.\n More results provide better coverage but increase processing time.\n Default: 10"New value: +"Number of initial search results to rank.\n More results provide better coverage but increase processing time.\n Default: 10" - changed
Input schema / properties / top_k / descriptionPrevious value: -"Number of top-scored results to include in the final output.\n These are the most semantically relevant results after scoring.\n Default: 5"New value: +"Number of top-ranked pages to fetch and return.\n Default: 5"
- Changed
rag_search_google3 fields changed- changed
Input schema / properties / include_urls / descriptionPrevious value: -"Whether to include URLs in the results."New value: +"Whether to include each page's source URL." - changed
Input schema / properties / num_results / descriptionPrevious value: -"Number of results to return."New value: +"Number of initial search results to rank." - changed
Input schema / properties / top_k / descriptionPrevious value: -"Use top \"k\" results for content."New value: +"Number of top-ranked pages to fetch and return."
- Added
search
5 tool updates
v1.0.4- Changed
deep_research5 fields changed- added
Input schema / properties / backends / descriptionAdded value: +"List of search backends to use. Defaults to [\"duckduckgo\", \"google\"].\n Can include: bing, brave, duckduckgo, google, grokipedia, \n mojeek, yandex, yahoo, wikipedia. If None, uses default." - added
Input schema / properties / include_urls / descriptionAdded value: +"Whether to include URLs in the results." - added
Input schema / properties / num_results_per_term / descriptionAdded value: +"Number of results to fetch per search term per backend." - added
Input schema / properties / search_terms / descriptionAdded value: +"List of search terms to research. Provide multiple \n related search queries for comprehensive coverage.\n Example: [\"machine learning fundamentals\", \"neural networks\", \"deep learning best practices\"]" - added
Input schema / properties / top_k_per_term / descriptionAdded value: +"Number of top scored results to keep per search term per backend."
- Changed
deep_research_ddgs4 fields changed- added
Input schema / properties / include_urls / descriptionAdded value: +"Whether to include URLs in the results." - added
Input schema / properties / num_results_per_term / descriptionAdded value: +"Number of results to fetch per search term." - added
Input schema / properties / search_terms / descriptionAdded value: +"List of search terms to research. The LLM should provide \n multiple related search queries for comprehensive coverage." - added
Input schema / properties / top_k_per_term / descriptionAdded value: +"Number of top scored results to keep per search term."
- Changed
deep_research_google4 fields changed- added
Input schema / properties / include_urls / descriptionAdded value: +"Whether to include URLs in the results." - added
Input schema / properties / num_results_per_term / descriptionAdded value: +"Number of results to fetch per search term." - added
Input schema / properties / search_terms / descriptionAdded value: +"List of search terms to research. The LLM should provide \n multiple related search queries for comprehensive coverage." - added
Input schema / properties / top_k_per_term / descriptionAdded value: +"Number of top scored results to keep per search term."
- Changed
rag_search_ddgs4 fields changed- added
Input schema / properties / include_urls / descriptionAdded value: +"Whether to include source URLs in the results.\n If True, each result includes its URL for citation.\n Default: True" - added
Input schema / properties / num_results / descriptionAdded value: +"Number of initial search results to fetch from DuckDuckGo.\n More results provide better coverage but increase processing time.\n Default: 10" - added
Input schema / properties / query / descriptionAdded value: +"The search query. Use natural language questions or keywords.\n Example: \"latest developments in quantum computing\"" - added
Input schema / properties / top_k / descriptionAdded value: +"Number of top-scored results to include in the final output.\n These are the most semantically relevant results after scoring.\n Default: 5"
- Changed
rag_search_google4 fields changed- added
Input schema / properties / include_urls / descriptionAdded value: +"Whether to include URLs in the results." - added
Input schema / properties / num_results / descriptionAdded value: +"Number of results to return." - added
Input schema / properties / query / descriptionAdded value: +"The query to search for." - added
Input schema / properties / top_k / descriptionAdded value: +"Use top \"k\" results for content."
6 tool updates
v1.0.1- Added
deep_research - Added
deep_research_ddgs - Added
deep_research_google - Removed
rag_search - Added
rag_search_ddgs - Added
rag_search_google
1 tool update
v1.0.0- Changed
rag_search1 field changed- added
Input schema / properties / include_urlsAdded value: +{ + "default": true, + "type": "boolean" +}
1 tool update
- First observed
rag_search
TDQS
Scored across 6 tools
There is substantial overlap: rag_search_ddgs and deep_research_ddgs differ mainly by single-term vs multi-term querying, and rag_search_google mirrors deep_research_google. The bare `search` tool also competes with rag_search_ddgs, though its passage-level output and 'use this first' guidance help differentiate it.
Most tools use a consistent snake_case, prefixed pattern (rag_search_* and deep_research_*). The bare `search` name and the parallel backend suffixes (`_ddgs`, `_google`) create minor inconsistency, but the overall naming remains readable and predictable.
Six tools is well-scoped for a web-search/RAG server. Each tool maps to a search mode (smart passage search, page search, deep multi-term research) with backend variants.
The surface covers single-query page search, passage search, and multi-term deep research across multiple engines. A direct fetch/extract-URL tool or explicit index-management operation is absent, but core research workflows are covered.
Maintenance
Related MCP Connectors
- fastCRWOAuthio.github.us
Scrape, crawl, map & search the web. Open-source, self-hostable Rust crawler & search for AI agents.
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Free web search for AI agents. No API key required. Hosted MCP in active development.
Web search and any page as LLM-ready Markdown for AI agents. Free keyless tier, no signup.
Related MCP Servers
- AlicenseBqualityCmaintenanceA Model Context Protocol server that enables LLM clients like VSCode, Copilot, and Claude Desktop to search the web using Google Programmable Search Engine API.127 npm12Apache 2.0
- AlicenseAqualityCmaintenanceA Model Context Protocol server for web scraping and searching, with automatic fallback from Tavily to Firecrawl for fetching web content.21MIT
- AlicenseAqualityFmaintenanceA Model Context Protocol server that exposes Google Search as a tool via scraping, requiring no API key.1MIT
- AlicenseNot gradedqualityFmaintenanceMCP server enabling local-first web search, fetch, extract, and caching with citeable excerpts, no API key required. Supports research workflows for agents and apps.42 npm1MIT