knowledge-base-mcp
README.md
# knowledge-base-mcp
An [MCP](https://modelcontextprotocol.io) server exposing a knowledge base to LLM clients through tools, resources, and prompts.
## Layout
```
knowledge_base_mcp/
├── __init__.py
├── __main__.py # `python -m knowledge_base_mcp`
├── context.py # AppContext + app_lifespan (constructs the store)
├── server.py # FastMCP instance, CLI entry point (main)
├── tools.py # @mcp.tool() definitions (add_document, search)
├── resources.py # @mcp.resource() definitions (get_document)
├── prompts.py # @mcp.prompt() definitions
└── store/ # pluggable persistence layer
├── __init__.py # create_store() factory
├── base.py # KnowledgeBaseStore Protocol
└── sqlite.py # SQLite reference implementation
tests/
├── conftest.py # shared anyio_backend fixture
├── unit/ # SqliteKnowledgeBaseStore, in isolation
├── integration/ # tools/resources via an in-memory MCP session
└── e2e/ # real subprocess over stdio (not in the default run)
```
See [docs/specs/knowledge-base-store.md](docs/specs/knowledge-base-store.md) for the design and [docs/adrs/](docs/adrs/) for why things are the way they are.
## Setup
```bash
uv sync
```
## Run
```bash
uv run knowledge-base-mcp # stdio transport (default)
uv run knowledge-base-mcp --transport streamable-http --port 8000
```
Or inspect it interactively with the [MCP Inspector](https://github.com/modelcontextprotocol/inspector):
```bash
uv run mcp dev knowledge_base_mcp/server.py
```
## Test
```bash
uv run pytest # unit + integration, gated at 90% coverage
uv run pytest tests/e2e --no-cov # e2e: spawns the real server subprocess over stdio
```
`uv run pytest` fails outright if coverage drops below 90% (`--cov-fail-under=90` in `pyproject.toml`). `tests/e2e` is excluded from that default run (see `testpaths`) since it's slower and its coverage isn't collected in-process.
## Lint / type-check
```bash
uv run ruff check .
uv run pyright
```
TDQS
A3.6/5.0
Scored across 2 tools
Disambiguation5/5
add_document and search have completely distinct purposes: adding vs. finding documents. There is no overlap in functionality.
Naming Consistency4/5
Both tool names are verbs, but add_document uses verb_noun while search uses a bare verb. The pattern is mostly consistent with a minor deviation.
Tool Count2/5
Only 2 tools for a knowledge base server is too few. Typical operations like get, update, and delete are missing, making the surface feel incomplete.
Completeness2/5
The tools cover only 'add' and 'search', lacking retrieval by ID, update, and delete. This severely limits agent workflows for managing a knowledge base.
Maintenance
ActivityMaintained
ResponsivenessSyncing