UltraRAG
CAUTIONgrade B · trust 82/100A Low-Code MCP Framework for Building Complex and Innovative RAG Pipelines
deepseekdemoeasyembeddingflaskgpthuggingface transformersllmOverview
From the repository's own README, as read at the audited commit.
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="./docs/ultrarag_dark.svg"> <source media="(prefers-color-scheme: light)" srcset="./docs/ultrarag.svg"> <img alt="UltraRAG" src="./docs/ultrarag.svg" width="55%"> </picture></p><h3 align="center">Less Code, Lower Barrier, Faster Deployment</h3><p align="center"><a href="https://trendshift.io/repositories/18747" target="_blank"><img src="https://trendshift.io/api/badge/repositories/18747" alt="OpenBMB%2FUltraRAG | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a></p><p align="center"> <a href="https://ultrarag.github.io/"><img src="https://img.shields.io/badge/Homepage-6ABED8?style=for-the-badge&logoColor=white" alt="Homepage"/></a> <a href="https://ultrarag.openbmb.cn/pages/en/getting_started/introduction"><img src="https://img.shields.io/badge/Documentation-66B89E?style=for-the-badge&logo=bookstack&logoColor=white" alt="Documentation"/></a> <a href="https://modelscope.cn/datasets/UltraRAG/UltraRAG_Benchmark"><img src="https://img.shields.io/badge/Dataset-DE8EA6?style=for-the-badge&logo=databricks&logoColor=white" alt="Dataset"/></a> <a href="https://github.com/OpenBMB/UltraRAG/tree/rag-paper-daily/rag-paper-daily"><img src="https://img.shields.io/badge/Paper_Daily-A48BC8?style=for-the-badge&logo=arxiv&logoColor=white" alt="Paper Daily"/></a></p><p align="center"> <a href="./docs/README_zh.md"><b>简体中文</b></a> | <b>English</b></p>---**Latest News** 🔥- **[2026.01.23]** 🎉 UltraRAG 3.0 Released: Say no to "black box" development—make every line of reasoning logic clearly visible 👉 [📖 Blog](https://github.com/OpenBMB/UltraRAG/blob/page/project/blog/en/ultrarag3_0.md)- **[2026.01.20]** 🎉 AgentCPM-Report Model Released! DeepResearch is finally localized: 8B on-device writing agent AgentCPM-Report is open-sourced 👉 [🤗 Model](https://huggingface.co/openbmb/AgentCPM-Report)<details><summary><b>Previous News</b></summary><br
Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add frontend --env EXA_API_KEY=${EXA_API_KEY} --env LLM_API_KEY=${LLM_API_KEY} --env RETRIEVER_API_KEY=${RETRIEVER_API_KEY} --env TAVILY_API_KEY=${TAVILY_API_KEY} -- npx -y [email protected]{
"mcpServers": {
"frontend": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"EXA_API_KEY": "${EXA_API_KEY}",
"LLM_API_KEY": "${LLM_API_KEY}",
"RETRIEVER_API_KEY": "${RETRIEVER_API_KEY}",
"TAVILY_API_KEY": "${TAVILY_API_KEY}"
}
}
}
}Exposed tools (47) 41 read · 6 write · 0 destructive
| Tool | Risk | Description |
|---|---|---|
assign_citation_ids | read | Assign sequential citation IDs to passages. |
assign_citation_ids_stateful | read | Assign unique citation IDs to passages using stateful registry. |
build_image_corpus | read | Build image corpus from PDF files by extracting pages as images. |
build_mineru_corpus | read | Build text and image corpus from MinerU parsing results. |
build_text_corpus | read | Build text corpus from various file formats. |
check_model_state | write | Check if model should continue or stop based on search token. |
chunk_documents | read | Chunk documents using various chunking strategies. |
evaluate | read | Evaluate predictions against ground truths using specified metrics. |
evaluate_trec | read | Evaluate retrieval results in TREC format using IR metrics. |
evaluate_trec_pvalue | write | Compare two TREC run files using permutation test to calculate p-values. |
evisrag_output_extract_from_special | read | Extract content from <answer>...</answer> tags for EvisRAG. |
get_data | read | Load benchmark data from file with key mapping and optional shuffling. |
get_global_memory | read | Read global memory from MEMORY.md. |
greet | read | Greet a person by name. |
init_citation_registry | read | Initialize citation registry for stateful citation assignment. |
ircot_check_end | read | Check if IRCoT answers are complete based on completion phrase. |
ircot_extract_ans | read | Extract final answer from IRCoT responses using |
ircot_get_first_sent | read | Extract first sentence from answers for IRCoT pipeline. |
iterretgen_nextquery | read | Generate next query by combining previous query with answer. |
merge_passages | write | Merge temporary passages into retrieved passages. |
mineru_parse | read | Parse PDF files using MinerU tool. |
output_extract_from_boxed | read | Extract content from LaTeX \\boxed{} expressions in answers. |
r1_searcher_check | read | Check if r1_searcher answers are complete based on EOS tokens. |
r1_searcher_query_extract | read | Extract search queries from answer list using <|begin_of_query|> tags. |
route1 | read | Route queries to state1 or state2 based on query value. |
route2 | read | Route all queries to state2. |
save_memory | write | Save one round of user-assistant dialogue into daily project memory. |
search_o1_combine_final_information | read | Combine extracted final information into total list for Search-o1. |
search_o1_combine_list | read | Combine extracted queries and reasons into total lists for Search-o1. |
search_o1_extract_final_information | read | Extract final information section from answers for Search-o1. |
search_o1_init_list | read | Initialize lists for Search-o1 pipeline. |
search_o1_query_extract | read | Extract search queries from answers using Search-o1 tags. |
search_o1_reasoning_extract | read | Extract reasoning content before search query tags for Search-o1. |
search_r1_check | read | Check if search-r1 answers are complete based on EOS tokens. |
search_r1_query_extract | read | Extract search queries from answer list using <search> tags. |
surveycpm_after_extend | read | Process responses after extend-plan action in SurveyCPM pipeline. |
surveycpm_after_init_plan | read | Process responses after init-plan action in SurveyCPM pipeline. |
surveycpm_after_write | write | Process responses after write action in SurveyCPM pipeline. |
surveycpm_check_completion | read | Check completion status based on step count only. |
surveycpm_format_output | read | Format final survey output as clean Markdown. |
surveycpm_init_citation_registry | read | Initialize citation registry for SurveyCPM pipeline. |
surveycpm_parse_search_response | read | Parse search responses from LLM for SurveyCPM pipeline. |
surveycpm_process_passages | read | Process and deduplicate passages for SurveyCPM pipeline. |
surveycpm_process_passages_with_citation | read | Process passages and assign unique citation IDs for SurveyCPM. |
surveycpm_state_init | read | Initialize state for SurveyCPM pipeline. |
surveycpm_update_state | write | Update state based on cursor and extend results. |
webnote_check_page | read | Check if WebNote pages are complete or incomplete. |
Details
- Source
- openbmb/ultrarag
- npm
frontend@0.0.0- PyPI
ultrarag- Transports
- stdio · streamable-http
- Credentials it reads
EXA_API_KEYLLM_API_KEYRETRIEVER_API_KEYTAVILY_API_KEYULTRARAG_SESSION_SECRETZHIPUAI_API_KEY- License
- Apache-2.0
- Stars
- 5,694 · pushed 0d ago
Trust audit
Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (7 observation(s))
- Network
- declared (7 observation(s))
- Shell
- declared (2 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (17)
module = importlib.import_module(module_path, package=__package__)
module = importlib.import_module(module_path, package=__package__)
PATH="/root/.local/bin:/ultrarag/.venv/bin:${PATH}"if ".." in path_str or path_str.startswith("/etc/") or path_str.startswith("/proc/"):target: "http://127.0.0.1:5050",
.env.dev
exec(compile(module, str(BENCHMARK_SRC), "exec"), namespace)
exec(compile(module, str(EVALUATION_SRC), "exec"), namespace)
base_url: http://127.0.0.1:65501/v1 # [!code ++]
base_url: http://127.0.0.1:65504/v1 # [!code ++]
retriever_url: http://127.0.0.1:64501
- `/api` -> `http://127.0.0.1:5050`
@radix-ui/react-dialog, @radix-ui/react-dropdown-menu, @radix-ui/react-select, @radix-ui/react-slot, @radix-ui/react-tabs, @tanstack/react-query, @xyflow/react, class-variance-authority
curl -LsSf https://astral.sh/uv/0.12.0/install.sh | sh
curl -LsSf https://astral.sh/uv/0.12.0/install.sh | sh
curl -LsSf https://astral.sh/uv/install.sh | sh
ui/frontend/dist/assets/index-CJkYAW3o.js
Gates applied: no_behavioural_pass.
Audited 2026-09-16 · audit v0.4.0 · source sha 80d07c4833c7 · full audit: observations/trust-audit/mcp-server/openbmb__ultrarag.json · Report an issue or request a re-scan
Audit history
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-16 | 80d07c4833c7 | CAUTION | B | 82 | first audit |
Alternatives
Other servers in the same categories, safer ones first.
Questions
What is the UltraRAG MCP server?
A Low-Code MCP Framework for Building Complex and Innovative RAG Pipelines
What tools does UltraRAG expose?
47 in total: 41 read-only, 6 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is UltraRAG safe to connect to an agent?
With care. The audit graded it B (82/100) and found 17 things worth knowing before you trust this server, listed below with the exact line each was found on.
What credentials does UltraRAG need?
It reads EXA_API_KEY, LLM_API_KEY, RETRIEVER_API_KEY, TAVILY_API_KEY, ULTRARAG_SESSION_SECRET and ZHIPUAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does UltraRAG run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as frontend at 0.0.0.
How current is this page?
The grade is for one exact copy of the source (80d07c4833c7), read on 2026-09-16. The repository is watched and re-audited when it changes.
Provenance: OBSERVED · read 2026-09-16 · job trust-audit-2026-09-16