{
  "version": "2",
  "generatedAt": "2026-11-06T20:51:57.517Z",
  "listing": {
    "slug": "infiniflow--ragflow",
    "name": "RAGFlow",
    "tagline": "Self-hosted RAG engine with deep document parsing, agents, a REST API and an MCP endpoint.",
    "shortTagline": "Self-hosted RAG engine",
    "description": "RAGFlow is a retrieval-augmented generation engine that parses complex documents into chunks, answers questions with citations, and runs agent workflows. The Go API server exposes a documented REST API with API-key auth and, built in, a three-tool MCP endpoint for retrieval and listing. It needs a heavy stack: a document engine, MySQL, MinIO and Redis-compatible services.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "notes-knowledge",
    "alternativeTo": [],
    "shape": "product",
    "formFactor": "web-app",
    "executionModel": "hybrid",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "Go",
        "Python",
        "TypeScript"
      ],
      "frameworks": [],
      "packageManager": null,
      "database": [
        "MySQL",
        "Elasticsearch",
        "Infinity"
      ],
      "hostingTarget": [
        "docker"
      ]
    },
    "modelStack": {
      "providers": [
        "any LLM, embedding and reranker provider added in the UI"
      ],
      "models": [],
      "requiredKeys": [],
      "promptLocations": [
        "internal/rag/prompts/*.md",
        "internal/agent/component/prompts"
      ],
      "tools": [
        "ragflow_retrieval",
        "ragflow_list_datasets",
        "ragflow_list_chats"
      ]
    },
    "repos": [
      {
        "url": "https://github.com/infiniflow/ragflow",
        "owner": "infiniflow",
        "name": "ragflow",
        "license": "Apache-2.0",
        "stars": 93689,
        "lastCommit": "2026-11-06"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://ragflow.io/docs/dev/http_api_reference",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Create datasets and upload documents",
        "reachable": true,
        "evidence": "REST POST /api/v1/datasets, POST /api/v1/datasets/{dataset_id}/documents"
      },
      {
        "job": "Parse and ingest documents into chunks",
        "reachable": true,
        "evidence": "REST POST /api/v1/datasets/{dataset_id}/chunks and POST /api/v1/documents/ingest"
      },
      {
        "job": "Edit, add and delete chunks and metadata",
        "reachable": true,
        "evidence": "REST POST/PATCH/DELETE on /api/v1/datasets/{dataset_id}/documents/{document_id}/chunks; POST .../metadata/update"
      },
      {
        "job": "Retrieve chunks from datasets",
        "reachable": true,
        "evidence": "MCP tool ragflow_retrieval; REST POST /api/v1/retrieval"
      },
      {
        "job": "Create and configure chat assistants",
        "reachable": true,
        "evidence": "REST POST/PUT/PATCH/DELETE /api/v1/chats"
      },
      {
        "job": "Chat with an assistant and manage sessions",
        "reachable": true,
        "evidence": "REST POST /api/v1/chat/completions, /api/v1/chats/{chat_id}/sessions; OpenAI-compatible POST /api/v1/openai/{chat_id}/chat/completions"
      },
      {
        "job": "Create, edit and run agent workflows",
        "reachable": true,
        "evidence": "REST POST/PUT/DELETE /api/v1/agents, POST /api/v1/agents/chat/completions, agent versions endpoints"
      },
      {
        "job": "Memory for agents",
        "reachable": true,
        "evidence": "REST /api/v1/memories and /api/v1/messages endpoints"
      },
      {
        "job": "Add LLM, embedding and reranker model providers",
        "reachable": false,
        "evidence": "Not in the Builder's HTTP API reference. PUT /api/v1/providers and POST /api/v1/providers/{name}/instances in internal/router/router.go, behind the same AuthMiddleware that takes an API key; sdk/python/test/conftest.py calls them. The routes exist in source, so this may change if they are documented."
      },
      {
        "job": "Connect external data sources and sync them",
        "reachable": false,
        "evidence": "Not in the Builder's HTTP API reference. GET/POST/PATCH/DELETE /api/v1/connectors, plus /rebuild and /test, in internal/router/router.go behind the same API key auth. Google Drive, Gmail and Box need a browser OAuth step. The routes exist in source, so this may change if they are documented."
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/infiniflow/ragflow"
          },
          {
            "kind": "container",
            "url": "https://hub.docker.com/r/infiniflow/ragflow",
            "command": "git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker && git checkout v1.0.0 && docker compose -f docker-compose.yml up -d"
          }
        ]
      },
      {
        "name": "Cloud Free",
        "price": {
          "amount": 0,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://cloud.ragflow.io"
          }
        ]
      },
      {
        "name": "Cloud Starter",
        "price": {
          "amount": 29,
          "currency": "USD",
          "period": "month",
          "note": "limited-time price; list price is $59"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://cloud.ragflow.io"
          }
        ]
      },
      {
        "name": "Cloud Pro",
        "price": {
          "amount": 129,
          "currency": "USD",
          "period": "month",
          "note": "limited-time price; list price is $259"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://cloud.ragflow.io"
          }
        ]
      },
      {
        "name": "Enterprise",
        "price": null,
        "open": false,
        "distributions": []
      }
    ],
    "skills": {
      "kind": "contributor",
      "paths": [
        ".agents/skills/*/SKILL.md"
      ],
      "install": null,
      "note": "The only skill found under .agents/skills is go-naming, which is for people working on the repo."
    },
    "customization": {
      "summary": "docker/.env and docker/service_conf.yaml.template hold deployment values: document engine choice, database and object store hosts and passwords, ports, and the optional MCP listener (RAGFLOW_MCP_* variables). Business behavior is set in the web UI and stored in the database: dataset parser settings, chat assistant prompts, agent workflows, and model providers. The same objects are reachable over the REST API. Built-in prompts in internal/rag/prompts are compiled into the binary, and agent templates in internal/agent/templates are copied into the image, so changing those means a rebuild.",
      "envVars": [
        "DOC_ENGINE",
        "DB_TYPE",
        "MYSQL_HOST",
        "MINIO_HOST",
        "REDIS_PASSWORD",
        "RAGFLOW_MCP_ENABLED",
        "RAGFLOW_MCP_LAUNCH_MODE",
        "RAGFLOW_MCP_HOST_API_KEY"
      ],
      "configFiles": [
        "docker/.env",
        "docker/service_conf.yaml.template",
        "docker/docker-compose.yml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "surfaceKind": "admin-ui",
      "editCount": 11
    },
    "useWhen": [
      "you want your agent to search and cite answers from a large pile of PDFs, Word files and spreadsheets",
      "you want to build a question-answering assistant over company documents and call it from your own code"
    ],
    "accounts": [
      "LLM, embedding and reranker provider accounts or a local model server"
    ],
    "active": true,
    "lastActivity": "2026-11-06",
    "gotchas": [
      "README recommends 4 CPU cores, 16 GB RAM and 50 GB disk; the stack runs several services",
      "The built-in MCP endpoint exposes only retrieval and listing of datasets and chats; uploads, parsing and agent edits need the REST API",
      "Cloud Free has no API key, so an agent needs Cloud Starter or higher; self-hosted API keys are not gated",
      "The provider and connector routes work with an API key but are missing from the HTTP API reference, so read internal/router/router.go",
      "Cloud prices on ragflow.io are limited-time; ragflow.io/pricing/details shows $59 and $259 under the names Small team and Medium team",
      "1.0 removed several older API routes (docs/references/http_api_reference.md, Migrate to 1.0)",
      "macOS is not currently supported for the Docker deployment per the README",
      "Model provider and connector routes accept an API key but are not in the HTTP API reference, so they can change without notice."
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: Docker deployment with web UI",
      "executionModel": "deterministic parsing and retrieval plus LLM-backed chat and agents",
      "operability": "docs/references/http_api_reference.md lists endpoints with Authorization Bearer API key; docs/develop/mcp/mcp_tools.md lists three MCP tools; both published by infiniflow. Provider and connector routes read from internal/router/router.go.",
      "effort": "docker/.env and service_conf.yaml.template read: deployment values only. Prompts and workflows live in the UI and database. internal/rag/prompts/templates.go embeds the built-in prompts with go:embed; Dockerfile line 279 copies agent templates into the image; docker-compose.yml mounts only service_conf.yaml.template and entrypoint.sh.",
      "editions": "ragflow.io home page pricing section: Free $0, Starter $29 (struck $59), Pro $129 (struck $259), Enterprise Contact us, all per month; Free reads API key not available. ragflow.io/pricing/details: billed monthly, limited-time discounts. internal/handler/auth.go returns \"API key requires a Starter or Pro plan\" only when billing is on; internal/service/billing/stub.go leaves billing off in the open build.",
      "active": "commits on 2026-11-06; release v1.0.0 published 2026-11-06"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.8,
      "operability": 0.9,
      "effort": 0.7,
      "reach": 0.85,
      "editions": 0.9
    },
    "openQuestions": [],
    "sources": [
      {
        "url": "https://ragflow.io",
        "foundBy": "sourcing:notes-knowledge:curated"
      },
      {
        "url": "https://github.com/infiniflow/ragflow/blob/main/docs/develop/mcp/mcp_tools.md",
        "foundBy": "analysis"
      },
      {
        "url": "https://github.com/infiniflow/ragflow/blob/main/docs/references/http_api_reference.md",
        "foundBy": "analysis"
      },
      {
        "url": "https://ragflow.io/pricing/details",
        "foundBy": "verification"
      },
      {
        "url": "https://github.com/infiniflow/ragflow/blob/main/internal/router/router.go",
        "foundBy": "verification"
      }
    ],
    "published": true,
    "lastCheckedAt": "2026-11-06",
    "research": {
      "stage": "verified",
      "verdict": "dispute",
      "reason": "Gates pass: Apache-2.0, 93,689 stars, commits and v1.0.0 on 2026-11-06. REST API and three MCP tools confirmed in source and docs. Cloud prices confirmed on ragflow.io. Provider and connector routes found, so both unreachable rows moved, and the file surface stays deployment only.",
      "disputed": [
        {
          "field": "customization.effort",
          "reason": "docker/.env and service_conf.yaml.template are deployment settings; assistant prompts, parsers and agent workflows live in the web UI and database. config-only stands for the deployment step with surfaceKind admin-ui."
        }
      ]
    },
    "url": "apps/infiniflow--ragflow.html",
    "coverage": "partial",
    "paid": true,
    "source": "research/verified/infiniflow--ragflow.json"
  }
}
