solid-knowledge-ai
This server exposes two MCP tools for querying the Solid Knowledge AI knowledge base: semantic search over ingested documents and asking a self-reflective agent that returns grounded, cited answers.
search_kb(query, source_type?): Performs semantic search across ingested documents (PDF, Markdown, web pages). Optionally filter by source type (
pdf,md,web). Returns a list of matching document chunks.ask(question): Invokes the full agentic RAG pipeline: retrieves relevant context, grades and rewrites queries if needed, generates an answer, and self-checks for grounding. Returns a cited, truthful answer, or an honest "I don't know" if it can't ground one.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@solid-knowledge-aiWhat do orcas eat?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Solid Knowledge AI
A multi-source document knowledge assistant driven by a self-reflective LangGraph agent. It ingests PDF + Markdown + web pages into one vector store, then answers questions through an agent that grades its own retrieval and verifies its own answer for grounding — retrying with a rewritten query when either check fails, and refusing to fabricate when it can't ground an answer. Traced with Langfuse, quality-tested with DeepEval, and exposed over MCP.
Built to showcase agentic development: LangGraph · LiteLLM · ChromaDB · MCP · Langfuse · DeepEval.
Why this is not "just RAG"
The agent is a corrective / self-reflective RAG loop, not a linear
retrieve → generate chain:
question
│
▼
route ──chitchat/out_of_scope──▶ generate ──▶ END
│ kb
▼
retrieve ──▶ grade_docs ──irrelevant (rewrite query, retry)──▶ retrieve
│ relevant
▼
generate ──▶ self_check ──ungrounded (retry)──▶ retrieve
│ grounded / budget spent
▼
answer + citations (or an honest "I don't know")route — skips retrieval on small talk / out-of-scope questions.
grade_docs — an LLM relevance gate; on failure it rewrites the query and retries.
self_check — verifies the drafted answer is entailed by the retrieved context; if not, it retries or hedges instead of hallucinating.
A shared retry budget (
max_retries, default 2) bounds both loops.Memory — a SQLite checkpointer keeps multi-turn conversation state per
thread_id.
Related MCP server: PDF MCP Server
Quickstart
# 1. Install (Python 3.11+, uv)
uv sync
# 2. Configure — only ANTHROPIC_API_KEY is required
cp .env.example .env # then edit .env
# 3. Ingest the sample corpus (2 Markdown + 1 PDF + 1 Wikipedia article)
uv run skai ingest # -> builds ./.chroma (local MiniLM embeddings, no API)
# 4. Ask (defaults to Haiku 4.5; switch per-call with --model)
uv run skai ask "What do orcas eat?"
uv run skai ask "How do orcas communicate?" --source md
uv run skai ask "Summarize orca threats" --model sonnet # haiku | sonnet (Opus blocked)
# 5. Multi-turn chat (remembers the conversation)
uv run skai chat
# 6. Web UI (chat + feedback + live data ingestion)
uv run skai ui # http://localhost:7860
# 7. Serve over MCP (stdio) for Claude Desktop / an IDE
uv run skai mcpWeb UI
skai ui launches a Gradio app with the features a live demo needs:
Chat with per-session memory; every answer shows its sources, route, and model.
Feedback after every response — 👍/👎 + an optional comment, stored to SQLite (
.skai/feedback.sqlite) and pushed as a Langfuse score on that turn's trace when tracing is on. That's the closed loop: real usage becomes an eval signal.Example prompts to guide the first interaction.
Grow the knowledge base live — upload a
.md/.txt/.pdfor paste a URL and it's ingested into Chroma on the spot, so the demo isn't limited to the seed corpus.Model (haiku/sonnet) and source filter (all/pdf/md/web) selectors.
Feedback is exportable to a JSONL eval seed via skai.feedback.export_jsonl.
Commands
Command | What it does |
| Load → chunk → embed → persist to Chroma |
| One-shot question with citations |
| Interactive multi-turn chat with memory |
| Gradio web UI: chat, feedback, live ingestion |
| Run the MCP server exposing |
| Run the DeepEval quality suite (needs |
MCP client config
The server exposes two tools — search_kb(query, source_type?) (raw retrieval) and
ask(question) (full agent). Point an MCP client at it:
{
"mcpServers": {
"solid-knowledge-ai": {
"command": "uv",
"args": ["run", "skai", "mcp"],
"cwd": "/absolute/path/to/solid-knowledge-ai"
}
}
}Model selection
Default Haiku 4.5 (fast, cheap — good for a Q&A router+grader+generator loop).
Switch per call with --model, or globally via SKAI_MODEL in .env:
Value | Resolves to |
|
|
|
|
any LiteLLM id | passed through (e.g. |
Opus is intentionally blocked (resolve_model raises), so the assistant can't be
pointed at the most expensive tier by accident.
Observability
Set LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY (and optionally LANGFUSE_HOST) in
.env. Every graph run then produces one trace with a span per node and per LLM call.
Without keys, tracing is a clean no-op — nothing else changes.
Quality evaluation (DeepEval)
uv sync --group eval
export ANTHROPIC_API_KEY=...
uv run skai ingest
uv run --group eval pytest evals -v # or: skai evalThe judge is Claude via LiteLLM, so no OpenAI key is needed. Metrics: faithfulness, answer relevancy, contextual relevancy — plus a cheap keyword gate.
Tests
uv run pytest # 39 tests, fully offline: no network, no API keysThe LLM is dependency-injected, so the whole graph runs in tests against a deterministic stub, and Chroma uses a deterministic in-process embedding function.
How it's put together
src/skai/
config.py settings (.env) agent/llm.py ChatLiteLLM -> Claude
models.py Document/Chunk/AgentState agent/nodes.py route/retrieve/grade/generate/self_check
ingest/loaders.py pdf | md | web -> Document agent/prompts.py node prompts
ingest/chunk.py source-aware splitting agent/graph.py StateGraph + SQLite memory
ingest/store.py Chroma add/query observability.py Langfuse handler (or no-op)
cli.py ingest|ask|chat|mcp|eval mcp_server.py search_kb / ask as MCP tools
evals/ DeepEval suite tests/ offline unit + graph testsAgent graph & component diagrams (Mermaid): see docs/ARCHITECTURE.md.
Design rationale and tech trade-offs: see docs/DECISIONS.md.
Where it goes next (capability & use cases): see docs/CAPABILITY-ROADMAP.md.
Running it on Gemini Enterprise CX / Google Cloud: see docs/GEMINI-ENTERPRISE-PORT.md
Status
Verified: uv run skai ingest loads all three source types (2 md + 1 pdf + 1 web →
170 chunks) and real semantic retrieval returns relevant passages. 39 offline tests
pass. ask/chat/eval require an ANTHROPIC_API_KEY
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables intelligent search and question-answering over PDF documents using semantic similarity and keyword search. Supports OCR for scanned PDFs, persistent vector storage with ChromaDB, and maintains source tracking with page numbers.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered querying of PDF documents using hybrid retrieval (BM25 + vector search) and retrieval-augmented generation, returning structured answers with source citations and confidence scores.
- AlicenseAqualityAmaintenanceEnables AI agents to read and analyze PDF documents for natural language Q\&A. Supports multiple LLM providers including Google Gemini, Anthropic Claude, and OpenAI.1244Apache 2.0
- AlicenseNot gradedqualityCmaintenanceConvert PDF documents to Markdown and query them using AI with source attribution and confidence scoring, supporting multiple LLM providers.MIT
Related MCP Connectors
Governed, auditable knowledge your team curates for its AI assistants, self-hostable
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Your company's brain for AI agents. Cited, permission-aware knowledge across every system.
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/hailampy123/solid-knowledge-ai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server