.kilocode — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited .kilocode (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
knowledge-mcp is a MCP server designed to bridge the gap between specialized knowledge domains and AI assistants. It allows users to create, manage, and query dedicated knowledge bases, making this information accessible to AI agents through an MCP (Model Context Protocol) server interface.
The core idea is to empower AI assistants that are MCP clients (like Claude Desktop or IDEs like Windsurf) to proactively consult these specialized knowledge bases during their reasoning process (Chain of Thought), rather than relying solely on general semantic search against user prompts or broad web searches. This enables more accurate, context-aware responses when dealing with specific domains.
Key components:
This project utilizes LightRAG (HKUDS/LightRAG) as its core engine for knowledge base creation and querying. LightRAG is a powerful framework designed to enhance Large Language Models (LLMs) by integrating Retrieval-Augmented Generation (RAG) with knowledge graph techniques.
Key features of LightRAG relevant to this project:
By using LightRAG, knowledge-mcp benefits from advanced RAG capabilities that go beyond simple vector search.
Ensure you have Python 3.12 and uv installed.
uv pip install -e .), you can run the CLI using uvx: # General command structure (use either --config or --base)
uvx knowledge-mcp --config <path-to-your-config.yaml> <command> [arguments...]
uvx knowledge-mcp --base <path-to-dir-containing-config.yaml> <command> [arguments...]
# Example: Start interactive shell
uvx knowledge-mcp --config <path-to-your-config.yaml> shellconfig.yaml. {
"mcpServers": {
"knowledge-mcp": {
"command": "uvx",
"args": [
"knowledge-mcp",
"--config",
"<absolute-path-to-your-config.yaml>",
"mcp"
]
}
}
}MCP Client Configuration (Docker) For clients like Claude Desktop, Cursor, Windsurf, etc.:
Spawn new container per request (simplest):
{
"mcpServers": {
"knowledge-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-v",
"/Users/yourusername/kb:/app/kb",
"knowledge-mcp"
]
}
}
}This runs knowledge-mcp --base /app/kb mcp inside the container.
Persistent server (better for frequent use):
docker run -d --name knowledge-mcp-server -v ~/kb:/app/kb knowledge-mcpThen configure your client to connect to the running instance if it supports that.
config.example.yaml to config.yaml..env.example to .env.config.yaml and .env to add your API keys (e.g., OPENAI_API_KEY) and adjust paths or settings as needed. The knowledge_base.base_dir in config.yaml specifies where your knowledge base directories will be created.#### Build the image
docker build -t knowledge-mcp .#### Quick commands (with mounted knowledge base) Start persistent MCP server:
docker run -d --name knowledge-mcp -v ~/kb:/app/kb knowledge-mcpRun one-off commands:
docker run -it --rm -v ~/kb:/app/kb knowledge-mcp shell
docker run -it --rm -v ~/kb:/app/kb knowledge-mcp create my-notes
docker run --rm -v ~/kb:/app/kb knowledge-mcp list#### Using docker-compose (recommended) Edit docker-compose.yml to point the volume to your real folder, then:
docker compose up -d
docker compose down
docker compose logs -f
docker compose run --rm knowledge-mcp create work-kb
docker compose run --rm knowledge-mcp shell#### Required host setup
mkdir -p ~/kb
cp config.example.yaml ~/kb/config.yaml
cp .env.example ~/kb/.envThen edit:
~/kb/config.yaml → set knowledge_base.base_dir: /app/kb~/kb/.env → add your OPENAI_API_KEYConfiguration is managed via YAML files.
When using Docker, set knowledge_base.base_dir: /app/kb in your config.yaml (the one you mount from your host).
knowledge_base.base_dir), LightRAG parameters (LLM provider/model, embedding provider/model, API keys via ${ENV_VAR} substitution), and logging settings. Refer to config.example.yaml for the full structure and available options. knowledge_base:
base_dir: ./kbs
lightrag:
llm:
provider: "openai"
model_name: "gpt-4.1-nano"
api_key: "${OPENAI_API_KEY}"
# ... other LLM settings
embedding:
provider: "openai"
model_name: "text-embedding-3-small"
api_key: "${OPENAI_API_KEY}"
# ... other embedding settings
embedding_cache:
enabled: true
similarity_threshold: 0.90
logging:
level: "INFO"
# ... logging settings
env_file: .env # path to .env filemode (default: "hybrid"), top_k results (default: 40), context token limits, text_only parsing mode, and user_prompt for response formatting. This file is automatically created with defaults when a KB is created and can be viewed/edited using the config CLI command.knowledge_base.base_dir in your main config.yaml. The structure typically looks like this: <base_dir>/ # Main directory, contains a set of knowledge bases
├── config.yaml # Main application configuration (copied from config.example.yaml)
├── .env # Environment variables referenced in config.yaml
├── kbmcp.log
├── knowledge_base_1/ # Directory for the first KB
│ ├── config.yaml # KB-specific configuration (query parameters)
│ ├── <storage_files> # The LightRAG storage files
└── knowledge_base_2/ # Directory for the second KB
├── config.yaml
├── <storage_files>By default, knowledge-mcp processes documents using both text content and metadata (like document structure, formatting, etc.). You can now configure knowledge bases to use text-only parsing for faster processing and reduced token usage.
Benefits:
Configuration: Add text_only: true to your knowledge base's config.yaml:
# In <base_dir>/<kb_name>/config.yaml
description: "My knowledge base with text-only parsing"
mode: "hybrid"
top_k: 40
text_only: true # Enable text-only parsingUsage:
# Create a new KB and configure it for text-only parsing
knowledge-mcp --config config.yaml create my_text_kb
knowledge-mcp --config config.yaml config my_text_kb edit
# Add text_only: true to the config file
# Add documents - they will be processed with text-only parsing
knowledge-mcp --config config.yaml add my_text_kb ./documents/You can now customize how the LLM formats and structures its responses for each knowledge base by configuring a user_prompt. This allows you to tailor the response style to match your specific use case.
Benefits:
Configuration: Add a user_prompt field to your knowledge base's config.yaml. The prompt supports multi-line YAML syntax:
# In <base_dir>/<kb_name>/config.yaml
description: "Technical documentation KB"
mode: "hybrid"
top_k: 30
max_entity_tokens: 2000
max_relation_tokens: 3000
max_total_tokens: 6000
response_type: "Multiple Paragraphs"
user_prompt: |
Please provide a comprehensive analysis with citations.
- Focus on actionable information
Keep your response clear, concise, and well-organized.Example Configurations:
user_prompt: |
Structure your response for business stakeholders:
**Executive Summary** (2-3 sentences)
Brief overview of the main points and business impact.
**Key Findings**
• Most critical insights
• Relevant metrics or data points
• Risk factors or opportunities
**Recommendations**
• Specific actionable steps
• Priority levels (High/Medium/Low)
• Expected outcomesuser_prompt: |
You are a technical documentation expert. Please structure your response with:
1. **Context**: Brief background on the topic
2. **Implementation**: Step-by-step technical details
3. **Best Practices**: Recommended approaches and common pitfalls
4. **Examples**: Concrete code examples or use cases where applicable
Use clear headings, bullet points, and code blocks for readability.user_prompt: |
Please provide a scholarly response that includes:
• **Introduction**: Context and scope of the topic
• **Analysis**: Critical examination of key concepts and evidence
• **Synthesis**: How different pieces of information connect
• **Conclusion**: Main findings and implications
Support your points with specific references from the knowledge base.Usage:
# Configure user prompt for an existing KB
knowledge-mcp --config config.yaml config my_kb edit
# Add your user_prompt configuration to the YAML file
# Query the KB - responses will follow your configured format
knowledge-mcp --config config.yaml query my_kb "What are the main concepts?"Notes:
user_prompt empty or omit it to use default LLM behaviorThe primary way to interact with knowledge-mcp is through its CLI, accessed via the knowledge-mcp command (if installed globally or via uvx knowledge-mcp within the activated venv).
All commands require either `--config <path-to-config.yaml>` or `--base <directory-containing-config.yaml>` (e.g. Docker uses `--base /app/kb`).
uv run knowledge-mcp --config /path/to/config.yaml shellAvailable Commands (Interactive Shell):
| Command | Description | Arguments | |
|---|---|---|---|
create | Creates a new knowledge base directory and initializes its structure. | <name>: Name of the KB.<br> ["description"]: Optional description. | |
delete | Deletes an existing knowledge base directory and all its contents. | <name>: Name of the KB to delete. | |
list | Lists all available knowledge bases and their descriptions. | N/A | |
add | Adds a document: processes, chunks, embeds, stores in the specified KB. | <kb_name>: Target KB.<br><file_path>: Path to the document file. | |
remove | Removes a document and its associated data from the KB by its ID. | <kb_name>: Target KB.<br><doc_id>: ID of the document to remove. | |
config | Manages the KB-specific config.yaml. Shows content or opens in editor. | <kb_name>: Target KB.<br>`[show | edit]`: Subcommand (show default). |
query | Searches the specified knowledge base using LightRAG. | <kb_name>: Target KB.<br><query_text>: Your search query text. | |
clear | Clears the terminal screen. | N/A | |
exit | Exits the interactive shell. | N/A | |
EOF | (Ctrl+D) Exits the interactive shell. | N/A | |
help | Shows available commands and their usage within the shell. | [command] (Optional command name) |
Example (Direct CLI):
# Create a knowledge base named 'my_docs'
knowledge-mcp --config config.yaml create my_docs
# Add a document to it
knowledge-mcp --config config.yaml add my_docs ./path/to/mydocument.pdf
# Search the knowledge base
knowledge-mcp --config config.yaml query my_docs "What is the main topic?"
# Start the interactive shell
knowledge-mcp --config config.yaml shell
(kbmcp) list
(kbmcp) query my_docs "Another query"
(kbmcp) exituv pip install -e ".[dev]".uvx test or pytest.pyproject.toml. Use uv pip install <package> to add and uv pip uninstall <package> to remove dependencies, updating pyproject.toml accordingly.[project.scripts] in pyproject.toml.hatch build and then twine upload dist/*. "knowledge-mcp": {
"command": "uvx",
"args": [
"--project",
"/path/to/knowledge-mcp",
"knowledge-mcp",
"--config",
"/path/to/knowledge-mcp/kbs/config.yaml",
"mcp"
]
}npx @modelcontextprotocol/inspector uv "run knowledge-mcp --config /path/to/config.yaml mcp"or
npx @modelcontextprotocol/inspector uvx --project . knowledge-mcp "--config ./kbs/config.yaml mcpAssumes a local config file at ./kbs/config.yaml
uvx shell - Starts the interactive shelluvx insp - Starts the MCP Inspector~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.