Soludev Logo

    mcp-raganything is not a RAG product

    mcp-raganything wraps RAG-Anything as two MCP tools, index_corpus and ask_corpus. A socket for Claude, Codex, or Cursor. Not tenancy, rights, or production RAG.

    Follow on LinkedIn

    mcp-raganything is an MCP server. You connect it to Claude, Codex, or Cursor. Two tools: index_corpus on a folder, ask_corpus on a question. That's the whole pitch.

    It does not implement RAG. It wraps RAG-Anything, the HKUDS framework built on LightRAG, with MinerU for the parse. PDFs, Office, images, tables, equations. Under the hood: process_document_complete, then aquery in hybrid mode.

    I like that for a local pile of documents. I would not put it behind a customer-facing agent and say the job is done.

    Yohan already wrote the buy-vs-build note. RAG-Anything was the first standard brick we looked at. Cognee looked more finished for industrialisation: vectors, graph, MCP, S3. What was missing is a straight answer on mcp-raganything itself.

    What mcp-raganything actually exposes

    A thin socket:

    • Recursively index a directory (PDF, DOCX, PPTX, XLSX, PNG, JPG, markdown)
    • Ask the corpus. Hybrid vector plus graph, via LightRAG
    • Persistent RAG instances per directory so you can query again without re-parsing everything

    The agent sees two tools. RAG-Anything still does the parse and the graph. MCP is the socket. You still have to build everything around it.

    That two-tool shape is the good version. Other community ports explode into insert, batch, extract entities, visualise the graph, clear the database. If you expose one tool per micro-operation, you burn tokens on schemas before anyone asks a real question. mcp-raganything stays at index_corpus and ask_corpus. Keep it that way.

    Four jobs

    People glue mcp-raganything into Claude, Codex, or Cursor and announce a knowledge base. At best they finished one of four jobs. Sometimes two.

    Jobmcp-raganythingWhat we actually ship
    Parse messy filesMinerU inside RAG-AnythingA parser you chose on purpose. I standardise that step on Xberg when inventory and prose must not share a pipe.
    RetrieveLightRAG hybrid via ask_corpusVectors plus graph. Cognee-shaped if you need something closer to a product.
    Talk to the modelTwo MCP toolsMCP or an API. Few tools. Broad capability.
    Who may see the docThe machine running the clientPermissions, audit, tenant isolation. Still your problem.

    The implant catalog is the fence I actually care about: stocked sizes in tables, preference notes in chunks. A multimodal parser helps with the files. It does not invent that split.

    When mcp-raganything is the right tool

    Use it when the corpus lives on your disk and the only reader is you. A research folder, an internal PDF dump, equations and figures that naive chunking wrecks. Claude, Codex, or Cursor as the client, one user, one machine. If the index is wrong, you see it the same afternoon.

    Fine as a lab. A bad way to serve other people's documents.

    When it is not

    Building the RAG is no longer the hard part. Cost, rights, observability. mcp-raganything does not touch any of that.

    • Several people, several permission sets: the intern should not retrieve the board pack.
    • Files in S3, not in ~/Documents.
    • You need traces: which chunk, which tool, which identity.
    • You need a parse you can replay in CI, not just inside a local session.

    MCP still makes sense when the agent talks to a custom API the model has never seen. That is a different job from "MCP everywhere." Indexing a folder for Claude, Codex, or Cursor is a private convenience. A retrieval API for documents that belong to someone else is a product.

    What I would ship

    RAG-Anything for multimodal parse and a LightRAG graph, on my machine. mcp-raganything only so the agent can index and ask. For other people: the fence, the rights, the traces, and a parser I trust when the files are ugly.

    Keep the first two on your laptop if they help you read your own files. Do not ship the socket and call it the stack.