Agentoom Knowledge
OfficialAgentoom Knowledge is a self-hosted MCP server providing unified, intelligent retrieval across heterogeneous enterprise knowledge sources. It exposes three core tools:
search-knowledge: Perform unified search across all registered knowledge sources with a single query. Supports semantic (vector/embedding), structured (SQL/YAML/JSON), and hybrid (keyword + vector) search types. Apply structured filters, scope by namespace, and control result count. Results are automatically deduplicated, ranked via Reciprocal Rank Fusion (RRF), with recency-aware ranking and synonym expansion.list-sources: Discover all available knowledge sources and their capabilities, optionally filtered by namespace.get-source-schema: Inspect the detailed schema and capabilities of a specific source by provider class name or namespace, useful for constructing precise queries.
Supported knowledge sources: Markdown/docs, SQL databases, YAML/JSON configs, filesystem files (PDF, DOCX, etc. via Apache Tika), web pages (with recursive crawling and robots.txt compliance), vector stores (Typesense), and federated remote Agentoom Knowledge servers.
Additional capabilities:
Deterministic query planning (no LLM dependency for core retrieval) ensuring predictability, explainability, and cost efficiency
Federation across multiple Agentoom Knowledge servers with transparent result fusion
Admin UI for managing sources, API keys, and monitoring retrieval logs and health
API key authentication with granular scopes, rate limiting, and multi-tenancy readiness
Allows searching and retrieving content from Markdown files as a knowledge source.
Allows querying PostgreSQL databases for structured data.
Allows querying SQLite databases for structured data.
Allows querying YAML configuration files as a knowledge source.
Agentoom Knowledge
Agentoom Knowledge is a self-hosted Knowledge Server that exposes trusted enterprise context through the Model Context Protocol (MCP). It provides a unified retrieval layer over heterogeneous knowledge sources, ensuring that AI agents receive the most relevant context without needing to understand the underlying infrastructure.
Knowledge is heterogeneous. Retrieval should be too.
π Read the full article β | π Installation Guide β | π How to Use β | π Extending β
The Problem
Enterprise knowledge is inherently heterogeneous. It lives in fragmented systems, each optimized for a specific purpose:
Documentation and Policies reside in Markdown or PDF files.
Customer and Order Data live in relational SQL databases.
Invoices and Receipts are stored as structured documents.
System Configurations are managed in YAML or JSON.
External APIs provide real-time state from third-party services.
Current AI retrieval systems often attempt to force these diverse sources into a single strategy. Some systems convert everything into vectors for semantic search, losing the precision of structured data. Others attempt to model everything as a graph, introducing unnecessary complexity for simple document retrieval.
While each strategyβsemantic search, SQL queries, or API callsβis excellent within its own domain, no single strategy is optimal for every type of knowledge.
Related MCP server: MCP Local Context
Philosophy
Agentoom Knowledge is built on the principle that the retrieval strategy should match the nature of the knowledge.
Our goal is not to replace RAG, SQL, knowledge graphs, or APIs. Instead, the goal is to orchestrate them. Agentoom Knowledge acts as a deterministic abstraction layer that selects the most appropriate retrieval strategy for each query.
By separating the request for information from the execution of retrieval, we ensure that AI models remain focused on reasoning while the infrastructure handles the complexity of context gathering.
The Solution
Agentoom Knowledge is a self-hosted Knowledge Server designed for the enterprise. It exposes a trusted context window to AI agents via the Model Context Protocol (MCP).
Unlike orchestration frameworks that mix logic with retrieval, Agentoom Knowledge is focused purely on trusted context. The AI should never care whether a piece of information came from a vector database, a legacy SQL table, or a cloud API. It simply receives the unified context it needs to perform its task.
The Query Planner
At the heart of Agentoom Knowledge is the Query Planner. Inspired by database query optimizers, the planner is responsible for decomposing a context request into a set of executable tasks.
The Query Planner is deterministic and does not rely on an LLM for its core logic. This design choice provides several critical advantages:
Predictability: The same request will always result in the same retrieval plan.
Explainability: Every step of the retrieval process can be audited and understood.
Performance: Deterministic planning has significantly lower latency than LLM-based reasoning.
Cost Efficiency: No token costs are incurred during the planning phase.
The planner identifies which knowledge providers are relevant to a query, executes them in parallel or sequence, and merges the results into a coherent, ranked context window.
How It Works
The planning process follows a deterministic, multi-step pipeline:
Query Analysis: The planner receives a request containing the search query, optional namespaces, and requested search types (e.g., semantic or structured).
Provider Discovery: It consults the Metadata Registry to identify all registered knowledge providers that match the query's scope.
Capability-aware Routing: For each relevant provider, the planner determines the optimal operation based on the provider's capabilities. If a specific search type is requested and supported, it is prioritized; otherwise, it defaults to a general search.
Execution Planning: A structured Execution Plan is generated, consisting of discrete steps for each provider. Each step includes the specific parameters and operations needed.
Parallel Execution: The Retrieval Engine takes the plan and executes all steps in parallel using Laravel's concurrency features, ensuring that slow providers don't block the entire request.
Result Fusion: Finally, results from all providers are merged using Reciprocal Rank Fusion (RRF). This ensures that the most relevant information from diverse sources (e.g., a SQL table and a vector index) is ranked appropriately in the final context window.
Handling Conflicts, Priority, and Freshness
To ensure the context window is both accurate and authoritative, the Query Planner employs several advanced strategies:
Conflicting Information
The planner does not attempt to "resolve" factual conflicts at the retrieval layer. Instead, it uses Reciprocal Rank Fusion (RRF) to score snippets based on their consistency and relevance across multiple sources.
Deduplication: Results are keyed by content hash or unique ID. Identical information from different sources is merged, increasing its overall rank.
Contextual Diversity: When sources disagree, the planner preserves the conflicting perspectives in the final context. This allows the AI agent to see the "full picture" and apply its own reasoning to the evidence provided.
Source Priority & Authority
Not all knowledge is equal. The Query Planner respects the Source Priority defined in the Metadata Registry:
Weighted Planning: The planner sorts execution steps based on the priority of the underlying Knowledge Source. High-priority sources (e.g., Official Policies) are prioritized in the execution plan over lower-priority sources (e.g., Community Wikis).
Namespace Isolation: Authority is further enforced through Namespaces. By scoping queries to specific namespaces, users can ensure that only vetted, authoritative providers are consulted for sensitive requests.
Real-time vs. Cached Data
Agentoom Knowledge balances the speed of indexed search with the accuracy of live data:
Hybrid Execution: The system simultaneously queries real-time providers (SQL, Filesystems) and indexed providers (Typesense).
Discovery Caching: While retrieval is often real-time, the Metadata Registry is cached. This ensures the planner can identify the best sources in milliseconds without hitting the database on every request.
Parallel Resilience: By using Laravel's concurrency layer, the planner ensures that slow real-time lookups (like a complex SQL join) do not delay the delivery of faster cached results.
Retrieval Philosophy
Agentoom Knowledge combines retrieval strategies rather than forcing a "one size fits all" approach.
Knowledge | Retrieval Strategy | Provider Class |
Documentation / Manuals | Semantic Search |
|
Web Content | Semantic Search |
|
Multi-format Files | Full-text Scan |
|
Markdown Files | Full-text Scan |
|
SQL Databases | Structured Query |
|
YAML Configuration | Structured Query |
|
JSON Data | Structured Query |
|
Websites | HTTP Fetch + Parse |
|
Architecture
Agentoom Knowledge follows a deterministic flow from client request to context delivery.
graph TD
Client[AI Client]
MCP[MCP Interface]
QP[Query Planner]
Providers[Knowledge Providers]
subgraph Retrieval [Retrieval Strategies]
Semantic[Semantic Search]
SQL[SQL Queries]
YAML[YAML / JSON]
Filesystem[Filesystem]
Markdown[Markdown]
Web[Web Crawler]
Federation[Federated Servers]
end
Context[Unified Context]
Client --> MCP
MCP --> QP
QP --> Providers
Providers --> Semantic
Providers --> SQL
Providers --> YAML
Providers --> Filesystem
Providers --> Markdown
Providers --> Web
Providers --> Federation
Semantic --> Context
SQL --> Context
YAML --> Context
Filesystem --> Context
Markdown --> Context
Web --> Context
Federation --> Context
Context --> ClientImplementation Details
Embedding Generation
Agentoom Knowledge uses Managed Embeddings handled internally by the vector store (Typesense).
Internal Processing: When a document is processed by the
DocumentPipeline, theIndexChunkjob sends raw text content to Typesense.No External Latency: By offloading vectorization to Typesense's built-in machine learning capabilities, the system avoids the latency, cost, and privacy concerns associated with calling external services like OpenAI or Cohere during the indexing loop.
Consistency: This ensures that the same model is used for both indexing and query vectorization, maintained entirely within your self-hosted infrastructure.
Typesense Schema Management
The system avoids the complexity of mapping diverse enterprise schemas into a vector store by using a Hybrid Storage Strategy:
Unified Document Index: Unstructured data (Markdown, PDFs, etc.) is parsed and decomposed into a unified
knowledge_chunkscollection. This collection uses a fixed, flattened schema that includes content, sequence, and source metadata.Native Structured Retrieval: For SQL databases and YAML structures, the system does not attempt to force them into Typesense collections. Instead, the
SqlProviderandYamlProviderquery the source data natively and in real-time.Precision over Flattening: This approach preserves the relational integrity and precision of structured data while allowing semantic search to operate on the types of knowledge where it excels (documentation and prose).
Authentication & Authorization
Security is a first-class citizen in Agentoom Knowledge, especially given the sensitivity of enterprise data:
MCP API Guard: All requests to the MCP server are protected by a custom
mcp_apiauthentication guard.API Keys: Access is managed through API Keys with granular scopes (e.g.,
mcp:use,admin:*). These keys must be provided as Bearer tokens in the MCP connection.Multi-tenancy Ready: While currently focused on single-instance enterprise deployment, the core data models (
KnowledgeSource,Provider,Document,ApiKey) includetenant_idcolumns with foreign key constraints, ensuring that future multi-tenant deployments have logical isolation at the database and retrieval layers.Rate Limiting: The MCP API endpoint is protected by configurable per-API-key rate limiting (default: 60 requests/minute). Limits are managed from the Admin UI under Settings β Rate Limiting and can be disabled per deployment.
Lifecycle Automation & Syncing
The system handles the complexity of keeping knowledge sources in sync through an automated lifecycle:
Source Observers: When a
KnowledgeSourceis created or updated in the Admin panel, Eloquent Observers automatically manage the underlyingProvidermodels and their technical configurations.Pipeline Orchestration: New documents are automatically routed through a multi-stage pipeline (Discover β Parse β Normalize β Chunk β Enrich β Index) via batched queue jobs.
Artisan Commands:
knowledge:pipeline:runtriggers document discovery and processing for active sources.Scheduled Maintenance: The Laravel scheduler runs periodic tasks β Horizon metric snapshots every 5 minutes, federation capability sync every 15 minutes, and daily retrieval log pruning (configurable from Settings β Maintenance).
Observability & The Search Playground
Agentoom Knowledge provides deep visibility into its "black box" retrieval logic:
Retrieval Logging: Every request processed by the engine is logged with its full query, deterministic execution plan, fused results, and precise latency metrics.
Search Playground: An interactive internal tool allows administrators to simulate agent requests. It visualizes the Reasoning (the step-by-step execution plan) alongside the Evidence (the final ranked results), making it easy to debug retrieval quality.
Performance Metrics: The dashboard tracks real-time health, including Horizon queue status and vector store (Typesense) metrics, ensuring the system remains responsive under load.
Health Endpoint: A
GET /healthJSON endpoint reports the status of database, Redis, Typesense, and storage. Designed for Docker healthchecks, Kubernetes probes, and load-balancer monitoring β returns 200 when all services are healthy, 503 if any critical service is down.Notification Pipeline: Configurable email and webhook alerts for operational events β high search latency, consecutive sync failures, and federation errors. Thresholds, alert types, and cooldown windows are managed from the Admin UI under Settings β Notifications.
Enterprise Administration
Phase 9 adds the operational controls enterprises need to audit and maintain a knowledge deployment:
Activity / Audit Trail: Every knowledge source, API key, and settings mutation is recorded in an append-only
activity_logwith the actor, action, subject, IP address, and a property diff. Sensitive values β passwords, tokens, API keys, and hashes β are redacted before storage, so encrypted SQL credentials and key hashes never reach the audit trail. Browse and filter it under Admin β Activity Log (admin/operator only); settings deletion is audited too, and the Danger Zone reset truncates the same table.Document Reprocessing:
ParseDocumentretries transient Tika/OCR failures (3 attempts with 30s/120s backoff) before leaving a document inerror.PipelineOrchestrator::reprocess()resets an errored, non-web document todiscovered, de-indexes and clears its stale chunks, and re-queues parsing β reachable from the document detail page, the file manager, or theknowledge:documents:reprocessartisan command (--source=and--limit=). Web documents are re-fetched through their source pipeline, never reparsed from URL paths.Knowledge Source Templates: The create wizard ships versioned presets (
markdown_docs,filesystem_documents,web_docs,sql_table) that prefill name, namespace, and provider config. Templates never contain credentials, and a slug-collision check surfaces a field error instead of a database unique-key exception.
Federation
Agentoom Knowledge servers can be federated so that a single instance queries multiple servers transparently:
FederatedServer Model: Each remote server is registered with an endpoint URL, encrypted API token, and priority.
FederationPlanner: Extends the query planner to include federation steps alongside local providers. Local results take priority; remote results augment with lower rank weight.
FederationProvider: Acts as an MCP client β translates local
SearchQueryobjects into JSON-RPCtools/callrequests to the remote server'ssearch_knowledgeendpoint. Results are tagged with_federation_sourcefor traceability.Result Fusion: Remote results are fused with local results via RRF, so the AI receives a single unified context window regardless of how many servers contributed.
Admin UI: Full CRUD for federation servers with connection testing and remote capability syncing.
Chunking Strategies
The document pipeline uses content-type-aware chunking to preserve semantic meaning:
MarkdownChunking: Heading-aware splitting β splits on
#headers, falls back to paragraph boundaries.SemanticChunking: Paragraph and sentence boundary detection β produces coherent chunks that never break mid-thought.
SlidingWindowChunking: Overlapping windows for code and structured data β ensures no context is lost at chunk boundaries.
FixedSizeChunking: Character-based with word-boundary respect β the safe fallback.
The ChunkingStrategyRegistry automatically selects the best strategy based on MIME type and file extension.
Token-aware enforcement: Every chunk produced by any strategy passes through the TokenAwareChunker, which caps chunks at the configured knowledge.chunk_max_tokens ceiling (default 384, safely inside the installed managed embedding model's 512-token window) and splits oversized chunks at token boundaries with knowledge.chunk_overlap_tokens overlap (default 64). The TokenCounter uses a deterministic UTF-8 tokenizer so the persisted token_count, the indexing metadata, and the document detail view all report the same value. Both settings are managed under Settings β Search Config; on re-chunking, prior chunk vectors are de-indexed first so retries or config changes never leave orphaned vectors behind.
Search Quality
Phase 7 introduced four orthogonal search quality improvements that operate across the retrieval pipeline:
Hybrid Keyword+Vector Search
When search_type=hybrid, the SemanticProvider sends both a keyword query and a vector query to Typesense in a single request. Typesense fuses the results using its built-in hybrid ranking, balancing keyword precision with semantic recall.
Configurable Alpha: The keyword vs. vector weight is controlled by the
knowledge.hybrid_alphasetting (0.0β1.0, default 0.5). Admin UI provides a slider under Settings β Search Config.A/B Testing in Playground: The Search Playground includes a side-by-side comparison mode β toggle "A/B Compare" to run the same query with two different search types simultaneously and see which results each strategy surfaces (or misses), with rank-change indicators and a unique-chunk diff summary. This makes tuning the alpha slider actionable rather than guesswork.
Managed Embeddings: Uses the existing
ts/all-MiniLM-L12-v2model configured during indexing β no external embedding calls needed.Fully Optional: Default search (
search_typenull/absent) remains keyword-only for backward compatibility.
Content Deduplication via SHA-256
Duplicate content is detected and blocked at multiple stages of the document pipeline to prevent redundant indexing:
Upload-time dedup: The
FileManagercomputeshash_file('sha256', β¦)on every uploaded file and filters out records whose hash already exists in the database (excluding stale/error documents). Within-batch duplicates (same file dragged twice) are also caught via a local dedup map.Parse-stage dedup:
ParseDocumentcomputeshash('sha256', $content)after Tika extraction. If the content hash matches an existing non-stale document, the document is markedstatus = 'duplicate'(orange badge in the admin UI) and its chunks are de-indexed.Sync-time dedup:
SyncKnowledgeSourcefilters filesystem scans against known content hashes before inserting new records.Result filtering: The
SemanticProvidercross-references document IDs against the database, excluding any document whose status is notindexedfrom search results.
Configurable Synonym Expansion
Query-time synonym expansion rewrites search terms using administrator-defined synonym groups before sending the query to Typesense:
Synonym Groups: Defined via the Admin β Synonyms page. Each group is a set of equivalent terms (e.g.,
["car", "automobile", "vehicle"]).Query Rewriting: The
QueryRewriterexpands matching tokens by appending synonym terms to the query (Typesense'sqparameter works with term-appended expansion, not boolean OR syntax). For example,"deployment pipeline"becomes"deployment pipeline release automation \"continuous delivery\"".Toggleable: Controlled by the
knowledge.synonym_expansion_enabledsetting in Settings β Search Config. Disabling stops all expansion β no reindexing needed.Expansion Cap: A configurable
knowledge.synonym_expansion_max_termssetting (default 10, range 2β100) caps how many synonym variants are appended per token. Prevents over-expansion from large synonym groups causing query bloat and precision loss.Ranking behavior: Typesense's TF-IDF scoring treats synonym terms with equal weight to original query terms β a document matching 4 synonym terms may outrank one matching 2 original terms. The expansion cap is the primary defense: keep it low (default 10) for precision-biased deployments, raise it for recall-heavy ones.
Multi-word phrases: Multi-word synonyms are wrapped in double quotes to preserve phrase matching (e.g.,
"continuous delivery").
Synonym Weighting
When synonym groups grow large, expanded terms can drown out original-query matches in ranking. Phase 9 adds an optional two-pass weighting pass in the SemanticProvider:
Original-query first: When enabled, the provider runs a second search over the expanded query. Items matching the original terms keep their position, while synonym-only items are appended with their score multiplied by
knowledge.synonym_penalty_factor(default 0.5).Bounded recall: Both passes pull from a recall pool capped at 250 (
min(250, max(maxResults Γ 2, 50))), then truncate tomaxResultsbefore the indexed-document filter.Toggleable: Controlled by
knowledge.synonym_weighting_enabledin Settings β Search Config. Disabled (default) preserves the legacy single-pass ranking exactly.Local-provider only: Weighting applies to the local
SemanticProvider; federated results are unchanged since their protocol carries no original-term provenance.
Recency-Aware Reciprocal Rank Fusion
The RRF fusion strategy was extended with an optional recency boost that gives fresher content a scoring advantage:
Exponential Decay Formula:
final_score = rrf_score Γ (1 + boostFactor Γ e^(-Ξ» Γ days_since_indexed))whereΞ» = ln(2) / halfLifeDays.Configurable parameters:
knowledge.recency_boost_enabled(toggle),knowledge.recency_boost_factor(0.0β1.0, default 0.3), andknowledge.recency_boost_half_life_days(1β365, default 30). Managed from Settings β Search Config.Neutral for old content: Items without timestamps or very old content get a multiplier of ~1.0 β they are never penalized, just not boosted.
Timestamp source: The
SemanticProvidermaps Typesense's auto-addedcreated_atfield into the result item'sindexed_atfor recency scoring. Items from federation providers without timestamps receive neutral treatment.Backward compatible: The
RecencyBoostConfigparameter onResultFusionStrategy::fuse()is nullable β passingnullpreserves the original RRF behavior unchanged.
Retrieval Quality Metrics
Recency boost follows exponential decay β the boost halves every half-life period. A concrete example with defaults (boostFactor = 0.3, halfLifeDays = 30):
Age | Multiplier | Effect |
Brand-new (0 days) | 1.30Γ | Full bonus |
1 week | 1.28Γ | ~93% of bonus remaining |
1 month (half-life) | 1.15Γ | Half the bonus |
3 months | 1.04Γ | Bonus nearly gone |
1 year | ~1.00Γ | Effectively neutral β no penalty |
Items without timestamps (e.g., from federation providers that don't return indexed_at) receive a multiplier of exactly 1.0 β they are never disadvantaged, just not boosted.
Concrete Quality Evidence
Two A/B comparisons demonstrating Phase 7 improvements on real documents:
Hybrid vs. Keyword-only β query: "quarterly revenue"
Strategy | Results | Key Finding |
Keyword-only | 1 result β | Misses |
Hybrid | 5 results β includes | Vector similarity catches semantically related content that different vocabulary would hide |
Synonyms vs. No Synonyms β query: "deployment pipeline"
Synonym groups: ["deployment", "release", "ship"], ["pipeline", "automation", "continuous delivery"]
Strategy | Result | Query Sent |
No synonyms |
|
|
With synonyms |
|
|
Without synonyms, infra.txt β which describes the same concepts using different vocabulary β would never appear. Synonym expansion bridges that gap.
These comparisons were produced using the A/B Compare toggle in the Search Playground, which shows results side-by-side with rank-change indicators and a diff summary of chunks unique to each strategy.
Web Provider & Crawling
The WebProvider fetches and converts content from configured URLs into searchable Markdown via league/html-to-markdown. For larger documentation sites, it supports recursive crawling:
Crawl Configuration: Set
max_depth,max_pages,allowed_domains, andpoliteness_delay_msper source.Robots.txt Compliance: The
RobotsTxtutility fetches and cachesrobots.txtrules, respectingDisallowdirectives per user agent.Content Extraction: Navigation, footers, headers, scripts, and styles are stripped before Markdown conversion, leaving clean, structured text.
Recursive Discovery: The
CrawlWebSourcejob discovers<a href>links from each page and dispatches child jobs for the next depth level, respecting domain and pattern exclusions.Batched Processing: Each crawled page is stored as a
Documentand flows through the standard parsing/chunking/indexing pipeline.
Features
Self-hosted: Total control over your data and infrastructure β runs on Docker.
MCP Server: Native Model Context Protocol endpoint with
search_knowledge,list_sources, andget_source_schematools.Deterministic Query Planner: Reliable, auditable retrieval β no LLM in the retrieval path. Federation-aware: queries local and remote servers transparently.
Hybrid Providers: Filesystem (multi-format), Markdown, SQL, YAML, JSON, Web, Vector (Typesense), and Federation providers built in. Each provider searches in its native format β YAML returns key-value hits, SQL returns row results, Markdown uses heading-aware chunking. All filesystem-backed providers support UI uploads via a built-in file manager.
Recursive Web Crawling: Domain-scoped crawling with configurable depth, politeness, robots.txt compliance, and link exclusion patterns β ingested straight into the document pipeline.
HTML-to-Markdown: Web content and crawled pages are converted to clean Markdown via
league/html-to-markdown, preserving headings, lists, code blocks, and links.Advanced Chunking: Four chunking strategies (Semantic, Sliding Window, Markdown, Fixed Size) with content-type-aware auto-selection.
Reciprocal Rank Fusion: Results from multiple providers merged and deduplicated by rank.
Metadata Registry: Centralized, cached registry of all knowledge source capabilities and schemas.
Document Pipeline: Automated multi-stage pipeline (Discover β Parse β Chunk β Enrich β Index).
MCP Federation: Connect multiple Agentoom Knowledge servers together β queries execute across all federated peers with unified result fusion.
Provider SDK: Extensible architecture with 10 contracts,
make:knowledge-providergenerator, auto-discovery via config, and full extension guide.Admin UI: Livewire + Flux admin panel for managing sources, providers, federation servers, users, and settings.
Retrieval Logging: Full audit trail with query text, execution plans, fused results, and latency.
Search Playground: Interactive sandbox to test queries, visualize retrieval plans in real time, and A/B compare search types side-by-side with rank-change indicators and unique-result diff summaries.
Danger Zone Reset: One-click app reset from Settings β clears all knowledge data, search indexes, and logs while preserving users and configuration.
API Key Auth: Scoped API key authentication for MCP access with separate user/service-account keys and prefix-optimized lookups.
Rate Limiting: Configurable per-API-key rate limiting on the MCP endpoint to prevent abuse.
Health Endpoint:
GET /healthJSON endpoint for Docker healthchecks and load-balancer probes β checks database, Redis, Typesense, and storage.Notification Pipeline: Email and webhook alerts for high search latency, sync failures, and federation errors β configurable thresholds, alert types, and cooldown windows.
Scheduler Maintenance: Automated Horizon metric snapshots, federation capability sync, and retrieval log pruning via Laravel's scheduler.
Horizon Queues: Background indexing and document processing via Redis queues.
Hybrid Search: Combined keyword+vector search in Typesense with configurable alpha weighting β balances precision and semantic recall in a single query.
Content Deduplication: SHA-256 hashing at upload, parse, and sync stages prevents duplicate content from entering the index β duplicates are flagged and their chunks de-indexed.
Synonym Expansion: Configurable synonym groups append equivalent terms to queries at search time (e.g., "car" β "car automobile vehicle") with a per-token expansion cap to prevent query bloat β toggleable per deployment with no reindexing.
Recency-aware Ranking: Exponential-decay recency boost in RRF fusion β fresh content surfaces higher (configurable boost factor and half-life).
Activity / Audit Trail: Append-only audit log of knowledge source, API key, and setting changes with actor, action, subject, IP, and redacted properties β browsable under Admin β Activity Log.
Token-Aware Chunking: A deterministic UTF-8 tokenizer caps every persisted chunk within the configured LLM context window (default 384 tokens), regardless of the active chunking strategy.
Document Reprocessing:
ParseDocumentretries transient Tika/OCR failures automatically (3 attempts), and errored documents can be re-queued from the UI or theknowledge:documents:reprocesscommand.Knowledge Source Templates: One-click presets (Markdown docs, filesystem, web, SQL table) prefill the create wizard without shipping credentials.
Synonym Weighting: Two-pass search scores original-query matches above synonym-only matches (configurable penalty) to protect precision as synonym groups grow.
Apache Tika Integration: Robust parsing for hundreds of document formats (PDF, DOCX, etc.).
External Embedding Providers: OpenAI, Cohere, and local HuggingFace implementations through the
EmbeddingProvidercontract.MCP Resources: Browse documents and knowledge sources through MCP resources.
OCR Fallback: Local PaddleOCR processing for image documents when Apache Tika returns empty or near-empty content.
Passkeys + 2FA: Fortify-powered authentication with passkeys and TOTP two-factor auth.
Role-based Access: Admin, Operator, and Viewer roles for UI authorization.
Why Laravel?
Agentoom Knowledge is implemented using the Laravel framework. We chose Laravel because it is the premier ecosystem for building robust, maintainable infrastructure.
While Python is the standard for training AI models, this project is about orchestration and infrastructure. Laravel excels in the areas that matter most for a Knowledge Server:
Orchestration: Powerful dependency injection and service container.
Reliability: Mature queue systems (Horizon) and event broadcasting.
Extensibility: A world-class package ecosystem and clean architectural patterns.
Administration: Elegant tools for building secure, intuitive management interfaces.
Integration: Seamless handling of databases, filesystems, and external APIs.
By leveraging Laravel, we provide a stable, scalable foundation that enterprise engineers can trust and contribute to.
What This Project Is NOT
To maintain a focused vision, it is important to define what Agentoom Knowledge is not:
β AI Agent Framework: We provide context; we don't build the agents.
β Workflow Engine: We don't manage complex multi-step AI business logic.
β Prompt Library: We focus on data retrieval, not prompt engineering.
β LLM Wrapper: We are a standalone infrastructure component.
β Vector Database: We integrate with vector stores but provide much more.
β Graph Database: We are a retrieval layer, not a primary storage engine.
β AI Model: we do not train or host LLMs.
β RAG Framework: We are a complete Knowledge Server, not just a library.
Installation
See the Installation Guide for step-by-step setup instructions covering both development and production environments.
For day-to-day usage after installation, see the How to Use guide. To build custom providers, see the Extending guide.
Prerequisites
Docker and Docker Compose
Laravel Sail (included)
Quick Start (Development)
git clone https://github.com/agentoom/knowledge.git
cd knowledge
# Copy and configure environment
cp .env.example .env
# Start Docker containers (PostgreSQL, Redis, Typesense)
vendor/bin/sail up -d
# Install dependencies
vendor/bin/sail composer install
vendor/bin/sail npm install
# Generate app key and run migrations
vendor/bin/sail artisan key:generate
vendor/bin/sail artisan migrate --seed
# Index demo data and build the metadata registry
vendor/bin/sail artisan knowledge:chunks:index
vendor/bin/sail artisan knowledge:providers:sync
vendor/bin/sail artisan knowledge:registry:refresh
# Build frontend assets
vendor/bin/sail npm run build
# Start the dev server
vendor/bin/sail artisan serveThe application will be available at http://localhost:8000.
Testing
A .env.testing file is provided with CI-friendly defaults (SQLite in-memory database, array cache and session drivers, sync queue). To run tests without Docker services:
cp .env.testing .env
vendor/bin/sail artisan test --compactNote: some tests that exercise the vector store (Typesense) or Horizon will need Docker services running.
Default Admin User
The seeder creates an admin user. By default the email is admin@agentoom.com and a random password is generated and printed to the console during seeding (also written to storage/app/initial-admin-password.txt).
To use a fixed password instead (e.g., for automated evaluation environments), set both ADMIN_EMAIL and ADMIN_PASSWORD in your .env file before seeding.
# Example: override with known credentials
ADMIN_EMAIL=ci@example.com
ADMIN_PASSWORD=my-secure-passwordThe seeder is idempotent β you can safely re-run migrate --seed without duplicate key errors.
Queue Worker
For background document processing, start a queue worker:
vendor/bin/sail artisan horizonScreenshots
Screenshots coming soon.
Roadmap
Phase 1: Core MCP implementation, basic SQL/Semantic providers. β
Phase 2: Query Planner strategies, Reciprocal Rank Fusion, observability. β
Phase 3: Web Provider, Document Pipeline automation, Admin UI. β
Phase 4: Advanced chunking strategies, HTML-to-Markdown conversion, provider SDK formalization. β
Phase 5: True web crawling (domain recursive), MCP federation. β
Phase 6: Production hardening β Laravel scheduler for periodic maintenance (Horizon snapshots, federation sync, log pruning), rate limiting on the MCP API endpoint, health-check endpoint for Docker and load balancers, notification pipeline for sync failures and high-latency alerts. β
Phase 7: Search quality β hybrid keyword+vector search in Typesense, content deduplication via SHA-256 hashing in the parse stage, configurable synonym expansion for query rewriting, recency-aware scoring in Reciprocal Rank Fusion so fresher content surfaces higher. β
Phase 8: Provider completeness β external embedding provider implementation (OpenAI, Cohere, local HuggingFace) through the existing
EmbeddingProvidercontract, MCP resources for document and source browsing, OCR fallback for images: a local OCR engine (e.g., PaddleOCR) running in the same Docker stack that the pipeline calls only when Tika returns empty or near-empty content from image files (jpg, png, tiff, etc.), so image-based documents become searchable without external API dependencies. Non-image parsing stays on Tika; OCR is a targeted gap-filler, not a replacement. βPhase 9: Enterprise features β activity/audit trail tracking who changed what (sources, API keys, settings), token-aware chunking that respects LLM context windows, retry/reprocess mechanism for documents stuck in
errorstatus after transient Tika failures, knowledge source templates for one-click setup of common configurations, synonym weighting β score documents matching original query terms higher than those matching only expanded synonyms (two-pass search or post-retrieval score penalty) to prevent recall from drowning precision when synonym groups grow large. βPhase 10: Test coverage β dedicated tests for each provider (Yaml, Json, Markdown, Web, Sql), chunking strategy tests for all four strategies, Livewire component tests for Playground, ApiKeys, DangerZone, and Dashboard.
Phase 11: Future horizons β knowledge graph traversal, semantic caching of retrieval results, multi-tenancy with row-level data isolation (schema already has
tenant_idcolumns), fine-tuned embedding models for domain-specific knowledge, and additional OCR/parser improvements.
Plugin Ecosystem
Agentoom Knowledge is designed to be extended. Its modular architecture allows developers to contribute to a growing ecosystem:
Providers: Add support for new data sources (e.g., Jira, Salesforce, Slack).
Vector Stores: Integrate with Pinecone, Milvus, or Weaviate.
Embedding Providers: Use OpenAI, Cohere, or local HuggingFace models.
Planner Strategies: Implement custom logic for specialized domain retrieval.
Parsers: Extend Apache Tika with specialized document extractors.
Design Principles
Knowledge is heterogeneous. Retrieval should be too. Strategy must match the data.
Deterministic over magical. Prefer explainable logic over black-box LLM reasoning.
Infrastructure over framework. Be a reliable component, not a restrictive cage.
Self-hosted first. Privacy and data sovereignty are non-negotiable.
Open standards. Build on MCP and other interoperable protocols.
Replaceable components. Use Laravel Contracts to allow swapping any major driver.
Database-driven configuration. Manage the system through UI and API, not just files.
Future
The architecture of Agentoom Knowledge is built to support the next generation of AI infrastructure. See Phase 11 for forward-looking items including knowledge graphs, semantic caching, multi-tenancy, and fine-tuned embeddings.
Relationship with Agentoom
Agentoom Knowledge is extracted from the architecture behind Agentoom and released as a standalone open-source project because we believe the community benefits from a high-quality, self-hosted knowledge infrastructure that anyone can use.
License
The Agentoom Knowledge server is open-source software licensed under the MIT license.
Available Tools
3 toolsget-source-schemaGet Source SchemaA
Get the schema and capabilities for a specific knowledge source identified by its namespace or class name.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | No | The source identifier: either the provider class name or namespace (e.g., "App\Providers\Filesystem\FilesystemProvider" or "docs"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With empty annotations, the description carries burden. It accurately describes the tool as retrieval ('Get'), but does not disclose any potential side effects, error behaviors (e.g., if source does not exist), or auth requirements, which limits transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 18 words, front-loading the purpose. Every word is necessary, and there is no redundant or vague language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema), the description is sufficiently complete: it explains the tool's action and the parameter. However, it could explicitly mention the return format (e.g., 'returns schema and capabilities JSON'), but overall it covers the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents the parameter. The description adds no additional meaning beyond what is in the schema, earning a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'schema and capabilities for a specific knowledge source', and it distinguishes itself from sibling tools 'search-knowledge' and 'list-sources' by focusing on a specific source's schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need schema for a specific source, but it does not provide explicit guidance on when to use this tool versus alternatives like 'search-knowledge' or 'list-sources', nor does it mention conditions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-sourcesList SourcesA
List all available knowledge sources with their capabilities. Optionally filter by namespace.
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Optional namespace to filter sources by (e.g., "docs", "erp"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries the full burden. It states the tool lists sources with capabilities, implying a read operation, but does not disclose whether it requires permissions, has pagination, or any side effects. For a simple list, this is minimally adequate but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single concise sentence with no fluff. Every word serves a purpose, and it is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and no output schema. The description mentions 'capabilities' but does not specify the return format or any details about the list (e.g., pagination, sort order). It is adequate but could be more complete for an agent to fully understand the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description only repeats the optional filter capability already captured in the schema's parameter description. It adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists all available knowledge sources with their capabilities, and optionally filters by namespace. The verb 'List' and the resource 'knowledge sources' are specific, and the optional filter distinguishes it from sibling tools like search-knowledge (which likely searches within sources) and get-source-schema (which retrieves schema for a specific source).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings. For example, it does not explain when to use list-sources instead of search-knowledge or get-source-schema. The description only mentions the optional namespace filter, but no contextual cues for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-knowledgeSearch KnowledgeA
Unified search across all knowledge sources. The server determines the best retrieval strategy internally. Use filters for structured filtering and search_type to constrain the retrieval approach.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | The search query string. | |
| filters | No | Optional structured filters for narrowing results. Keys and values depend on the provider. | |
| namespace | No | Optional namespace to scope the search (e.g., "docs", "erp", "hr"). | |
| max_results | No | Maximum number of results to return. Defaults to 10. | |
| search_type | No | Optional search type: "semantic", "structured", or "hybrid". Defaults to "hybrid" which lets the planner decide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It reveals that the server determines the retrieval strategy internally, but does not disclose whether the operation is read-only, side effects, authentication needs, or rate limits. This is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose, followed by targeted parameter guidance. No unnecessary words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers basic usage and parameter hints, but lacks details on return format, pagination, or result structure. With no output schema, the description could provide more context about what results look like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context on filters and search_type beyond schema descriptions, reinforcing their purpose. However, it does not add significant new details for other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs a unified search across all knowledge sources, with a specific verb and resource. It distinguishes from siblings like list-sources and get-source-schema by focusing on searching rather than listing or schema retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on using filters and search_type parameters, and notes that the server determines the best strategy. However, it does not explicitly state when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
- First observed
get-source-schema - First observed
list-sources - First observed
search-knowledge
TDQS
Each tool has a clearly distinct purpose: search across sources, list sources, and get a source's schema. No ambiguity between them.
All tool names follow a consistent 'verb-noun' pattern with hyphens (search-knowledge, list-sources, get-source-schema), making them predictable.
With only 3 tools, the server feels minimal for a knowledge management system, though it may suffice for read-only queries. Slightly thin.
The set lacks essential operations like adding, updating, or deleting knowledge sources or items, leaving significant gaps for standard CRUD workflows.
Maintenance
Related MCP Connectors
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
The CustomGPT.ai MCP server is a fully managed, RAG-powered endpoint that connects large language models with private knowledge bases and external data sources. It provides tools for retrieval-augmented generation queries (send_message), data ingestion (upload_file), and source listing, enabling AI agents to query private documents like PDFs with high accuracy and real-time citations.
Document-to-Markdown MCP server β convert PDF, Office and HTML into LLM-ready Markdown.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server that provides a local-first RAG engine for your markdown documents. It uses a file-based Milvus vector database to index your notes, enabling LLMs to perform semantic search and retrieve relevant content from your local files.359Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA simple MCP server for local documentation with RAG capabilities, enabling AI assistants to access and search local documents.2MIT
- FlicenseNot gradedqualityCmaintenanceServes locally stored knowledge bases (e.g., Trading-Knowledge, Bug-Bounty-Knowledge) to MCP agents, enabling listing, searching, and fetching documents without GitHub authentication.-
- AlicenseAqualityAmaintenanceA local knowledge graph MCP server that provides AI agents with permanent, structured memory about codebases, enabling semantic search, blast radius analysis, and convention enforcement.82MIT
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/agentoom/knowledge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server