MCPedia
MCPedia
Eine inhaltsorientierte Wissensdatenbank – lesbar als Markdown/MDX in Git, abfragbar von Menschen über eine Web-UI und von KI-Agenten über das Model Context Protocol (MCP).
MCPedia hält Inhalte als einfache Markdown-Dateien unter content/. Eine in Git nachverfolgte Quelle der Wahrheit, indexiert in PostgreSQL (Metadaten + eine tsvector-Volltextspalte) und bereitgestellt über eine einzige Core-Schicht, die alle Schnittstellen (Web, MCP) gemeinsam nutzen – keine Geschäftslogik wird pro Oberfläche dupliziert.
Monorepo-Layout
mcpedia/
├── apps/
│ ├── web/ # Next.js 16 (Turbopack) — human-facing docs UI + search
│ ├── mcp/ # MCP server (stdio) — AI-agent interface (tools + resources)
│ └── api/ # Hono + tRPC v11 API on :4020 (+ /hooks/* git-sync webhooks)
├── packages/
│ ├── types/ # shared domain types (DocSection, Document, SearchHit, ...)
│ ├── config/ # loads .env (repo root) as authoritative dev config
│ ├── db/ # Drizzle ORM schema + client + drizzle-kit config
│ ├── parser/ # frontmatter (gray-matter) parsing
│ ├── search/ # Postgres FTS query (ts_rank + ts_headline)
│ ├── embeddings/ # embedding provider + chunker
│ ├── queue/ # Redis (ioredis) + BullMQ worker/queue (Phase 3)
│ └── core/ # Document/Content/Search/Index/Revision — the only business logic
├── content/ # docs/ writeups/ research/ notes/ (the knowledge base)
└── scripts/ # indexer.ts (full reindex), enqueue.ts (one-shot job enqueue)Related MCP server: astra-knowledge-base-mcp
Architekturprinzip
Web ─┐
├──► Core ──► Repository (@mcpedia/db) ──► PostgreSQL
MCP ─┘Alle Schnittstellen laufen über @mcpedia/core. Nichts außerhalb von packages/db und packages/core greift direkt auf die Datenbank zu.
Schnellstart
bun install # install workspace deps
cp .env.example .env # set DATABASE_URL (dev uses imrnes Postgres :6432)
bunx turbo run build # typecheck + build every package
bun run index # walk content/ -> upsert into Postgres
bun --cwd apps/web run dev # Web UI on :3000
bun run mcp # MCP server on stdio (pipe to an MCP client)Datenbank
Das Schema ist in packages/db/src/schema.ts definiert (documents mit einem gewichteten search_vector-tsvector + GIN-Index und document_chunks mit einem embedding real[]). Die pgvector-Erweiterung ist nicht verfügbar auf dem gemeinsamen imrnes-Postgres, daher speichert die semantische Suche Vektoren als real[] und sortiert nach Kosinus-Ähnlichkeit in der Anwendung.
Migrationen liegen in packages/db/drizzle/. Sie wurden manuell über psql angewendet (drizzle-kit push ist unter PgBouncer-Transaktions-Pooling unzuverlässig); um sie auf einer frischen DB erneut anzuwenden:
psql $DATABASE_URL -f packages/db/drizzle/0000_grey_toro.sql
psql $DATABASE_URL -f packages/db/drizzle/0001_document_chunks.sqlHinweis: auf imrnes (PgBouncer
:6432) kann eine ausgelaufeneDATABASE_URL-Shell-Variable.envüberschatten.@mcpedia/configlädt.envzuletzt, sodass die Repo-Konfiguration für lokal/Dev immer gewinnt.
Inhalt
Jede Markdown-Datei trägt YAML-Frontmatter:
---
id: websocket-contract
title: WebSocket Contract
type: documentation
tags: [typescript, websocket, rpc]
status: published
author: asep
created_at: 2026-08-19
updated_at: 2026-08-19
---slug = relativer Pfad unter content/ (z. B. docs/websocket/contract). Der in der UI angezeigte body wird immer aus der Datei auf der Festplatte gelesen (Quelle der Wahrheit); die DB speichert Metadaten + den Suchvektor.
MCP-Tools
Tool | Zweck |
| Postgres-FTS über das Korpus (sortiert + Ausschnitt) |
| Embedding-/Kosinus-Suche über gechunkte Inhalte |
| FTS + semantisch fusioniert über RRF |
| Vollständiger Markdown-Body per Slug |
| Auflisten, optional nach Abschnitt gefiltert |
| Dokumente, die Tags mit einem bestimmten Slug teilen |
MCP-Ressourcen
URI | Zweck |
| Alle veröffentlichten Dokumente auflisten |
| Vollständiger Markdown-Body (von der Festplatte gelesen) |
| Vorschau der eingebetteten semantischen Chunks |
| Zusammenfassung des Revisionsverlaufs |
({+slug} verwendet die reservierte Erweiterung von RFC 6570, sodass ein Slug wie docs/websocket/contract zur Vorlage passt.)
Smoke-Test (In-Memory-Transport, echtes JSON-RPC):
bun --cwd apps/mcp run smokeAPI (Phase 2 + Phase 3)
Eine tRPC-v11-API wird über Hono auf :4020 bereitgestellt (alle Prozeduren spiegeln die MCP-Tools). Phase 3 fügt asynchrone Job- und Revisions-Prozeduren sowie Git-Sync-Webhooks hinzu:
bun run api # http://localhost:4020 (GET /health, POST/GET /trpc/*)tRPC-Prozeduren: search, semanticSearch, hybridSearch, getDocument, listDocuments, related (Phase 2); plus revisions, getRevision, restoreRevision, jobStatus, queueStatus (Phase 3).
Git-Sync-Webhooks (stellen BullMQ-Jobs in die Warteschlange; der Worker verarbeitet sie):
POST /hooks/reindex— Vollkorpus-Reindex (weisen Sie den Push-Webhook Ihres Git-Anbieters hierher, um bei Push automatisch neu zu indexieren).POST /hooks/index?slug=<slug>— ein einzelnes Dokument neu indexieren.
Sicherheit: beide Webhooks erfordern einen
x-webhook-secret-Header, der mitWEBHOOK_SECRETübereinstimmt (in.envgesetzt). Die API weigert sich zu starten, wennWEBHOOK_SECRETnicht gesetzt ist, sodass die Hooks nie offen bleiben.
bun run index chunkt und embeddet jetzt auch (Phase-2-Indexer) und erstellt einen Revisions-Snapshot, wann immer sich der Body ändert (Phase 3). Siehe .env.example für die Variablen EMBED_* / REDIS_* / QUEUE_PREFIX / WEBHOOK_SECRET.
Als überwachter Dienst ausführen (Phase 4)
deploy/mcpedia-api.service + deploy/mcpedia-worker.service sind systemd-Units (Restart=on-failure, EnvironmentFile=.env, WorkingDirectory=/home/code/mcpedia). Aktivieren Sie sie mit:
sudo cp deploy/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now mcpedia-api mcpedia-worker
# tail logs
journalctl -u mcpedia-api -u mcpedia-worker -fDie API sollte für TLS hinter Caddy (oder Ihrem Reverse-Proxy) sitzen; exponieren Sie nur :4020 intern und die Web-App öffentlich.
Status
Phase 1 — MVP (FERTIG): Monorepo, Core, Web-UI (Start/Dokument/Suche), MCP-Server, Postgres-FTS-Stichwortsuche, Inhaltsindexierung.
Phase 2 — Semantisch + API (FERTIG): Embeddings-Anbieter (OpenRouter über 9router), gechunkte document_chunks, semanticSearch + hybridSearch (RRF), tRPC/Hono-API (apps/api, :4020), MCP-Tools semantic_search/hybrid_search, Web-Hybrid-Umschalter.
Phase 3 — Async + Skalierung (FERTIG): Redis + BullMQ-Hintergrund-Indexierungs-/Embedding-Worker (packages/queue, apps/worker), Git-Sync-Webhooks (POST /hooks/*), Dokument-Revisionssystem (document_revisions + Wiederherstellung) und MCP-Ressourcen (mcpedia://docs/...). Siehe PHASES.md.
pgvector ist nicht installiert auf dem gemeinsamen imrnes-Postgres, daher ist die Vektorspeicherung eine
real[]-Spalte mit Kosinus-Ähnlichkeit in der Anwendung (sofort bei KB-Skalierung). pgvector ist der Skalierungspfad für Phase 4. SiehePHASES.md.
Siehe PHASES.md für Phase 3–4 (Redis/BullMQ, Auth, Revisionen, Skalierung).
This server cannot be deployed
Maintenance
Related MCP Connectors
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
MCP server for querying Forkast documentation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceTransforms Markdown documentation into an intelligent knowledge base with AI-powered search and Q\&A through an MCP server.4 npm9MIT
- AlicenseAqualityBmaintenanceMCP server for managing and searching multi-tenant knowledge bases backed by SQLite with FTS5, enabling AI agents to persist and retrieve content via full-text search.132MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that exposes one or more documentation folders (Markdown, MDX, TXT) to AI agents, enabling listing, reading, and searching of documentation files.-
- AlicenseNot gradedqualityAmaintenanceA lightweight MCP server for semantic search over markdown knowledge bases, enabling AI coding agents to index, search, and answer questions from local markdown documents.82 PyPIMIT