(page_rag)= ## PETSc RAG MCP server or Provides a MCP agent that provides RAG context for a prompt related to PETSc ### Purpose The purpose of this MCP agent is to enable the implementation of "higher-level" PETSc MCP agents that use high-quality PETSc appropriate context without needing to implement the RAG infrastructure themselves. ### Usage The MCP agent may be tested from the command line using ```bash python petsc_rag_mcp_client.py [--stdio] [--url PETSC_MCP_SERVERS_URL] --get_documentation_rag_prompt request ``` or ```bash python petsc_rag_mcp_client.py [--stdio] [--url PETSC_MCP_SERVERS_URL] --get_developer_rag_prompt request ``` The client Python file also contains a `PetscRAGMCPClient()` class that connects to the server and has a (mirror) method for each tool provided by the server. This class can be used when writing new MCP agents that need to utilize RAG. To start the MCP server locally ```bash PETSC_DIR=xxx PETSC_ARCH=yyy python NVIDIA_API_KEY=zzz petsc_rag_mcp_server.py [--stdio] ``` The RAG vector databases are created with ```bash PETSC_DIR=xxx PETSC_ARCH=yyy python NVIDIA_API_KEY=zzz petsc_rag_mcp_generate_data.py ``` ### Limitations This currently uses the `nvidia/nv-embed-v1` embedding by default because that is the best one I could get working in a portable, open source environment. It would be better to default to a better embedding (the cost is not the issue). This currently uses `nv-rerank-qa-mistral-4b:1` for reranking, perhaps better rerankers are available.