kb-rag-mcp
kb-rag-mcp
Standalone MCP server exposing agentic-RAG tools over a pgvector-backed knowledge base. Designed for public internet deployment (Render) with bearer-token auth; embeddings via Azure OpenAI; LLM/agent side lives in Azure AI Foundry (or any MCP-capable client).
Tools
Tool | Purpose |
| Hybrid retrieval (vector + full-text, RRF-fused, MMR-diversified). Returns chunks + citations + confidence. |
| Full article body by |
| Categories + article counts — for scoping a refined search. |
| Chunk/article counts + last ingest time — distinguishes "empty KB" from "no match". |
| Official Microsoft docs (Microsoft Learn) — external fallback for Microsoft-product questions. One tool, three modes: |
The agentic loop lives in the client agent: search the internal KB → check low_confidence →
refine / scope by category / fetch full article → answer with citations. For Microsoft-product
questions the KB doesn't cover, it falls back to Microsoft Learn (clearly labeled as external).
Microsoft Learn tools proxy the official public MS Learn MCP server
(https://learn.microsoft.com/api/mcp, no auth). They cover Microsoft products only (Azure,
M365, Windows, Entra, Intune, PowerShell, Graph, …) and fail soft if that endpoint is unreachable.
Configurable via MS_LEARN_MCP_URL.
Setup
cp .env.example .envand fill in every value (see comments in that file).Create the schema: paste
scripts/schema.sqlinto the Neon SQL editor (orpsql "$DATABASE_URL" -f scripts/schema.sql).Ingest articles:
python scripts/ingest.py scripts/data/kb_dummy_200.jsonRun locally:
uvicorn server:app --port 8080
Auth
Every /mcp request needs Authorization: Bearer <key> where <key> is listed in
MCP_API_KEYS (comma-separated; one key per client, rotate by adding/removing).
No keys configured = all requests rejected. /health is open (used by Render health checks).
Deploy (Render)
Push this directory to a GitHub repo.
Render → New → Blueprint → select the repo (
render.yamlis picked up automatically).Fill the
sync: falseenv vars in the Render dashboard (same values as your local.env).Your MCP endpoint:
https://<service>.onrender.com/mcp
Free-tier note: Render spins the service down after idle; first request after idle takes ~30-60s. Fine for testing; use a paid instance for a client-facing demo.
Smoke test
curl https://<service>.onrender.com/health
curl -X POST https://<service>.onrender.com/mcp \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/n1khll/kb-rag-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server