OpenZIM MCP Server Transform static ZIM archives into dynamic knowledge engines for AI models OpenZIM MCP transforms static ZIM archives into dynamic knowledge engines for Large Language Models. Unlike basic file readers, this tool provides intelligent, structured access that LLMs need to effectively navigate and understand vast knowledge repositories. Why LLMs Love OpenZIM MCP: - Smart Navigation
Add this skill
npx mdskills install cameronrye/openzim-mcpWell-documented MCP server with dual-mode access to offline knowledge archives
OpenZIM MCP Server
Transform static ZIM archives into dynamic knowledge engines for AI models
๐ NEW: Article Summaries & Table of Contents! Extract concise article summaries and hierarchical table of contents for quick content overview. Plus pagination cursors for seamless navigation! Learn more โ
Dual Mode Support: Choose between Simple mode (1 intelligent natural language tool, default) or Advanced mode (18 specialized tools) to match your LLM's capabilities.
OpenZIM MCP transforms static ZIM archives into dynamic knowledge engines for Large Language Models. Unlike basic file readers, this tool provides intelligent, structured access that LLMs need to effectively navigate and understand vast knowledge repositories.
Why LLMs Love OpenZIM MCP:
Whether you're building a research assistant, knowledge chatbot, or content analysis system, OpenZIM MCP gives your LLM the structured access patterns it needs to unlock the full potential of offline knowledge archives. No more fumbling through raw text dumps!
OpenZIM MCP is a modern, secure, and high-performance MCP (Model Context Protocol) server that enables AI models to access and search ZIM format knowledge bases offline.
ZIM (Zeno IMproved) is an open file format developed by the openZIM project, designed specifically for offline storage and access to website content. The format supports high compression rates using Zstandard compression (default since 2021) and enables fast full-text searching, making it ideal for storing entire Wikipedia content and other large reference materials in relatively compact files. The openZIM project is sponsored by Wikimedia CH and supported by the Wikimedia Foundation, ensuring the format's continued development and adoption for offline knowledge access, especially in environments without reliable internet connectivity.
# Install from PyPI (recommended)
pip install openzim-mcp
For contributors and developers:
# Clone the repository
git clone https://github.com/cameronrye/openzim-mcp.git
cd openzim-mcp
# Install dependencies
uv sync
# Install development dependencies
uv sync --dev
Download ZIM files (e.g., Wikipedia, Wiktionary, etc.) from the Kiwix Library and place them in a directory:
mkdir ~/zim-files
# Download ZIM files to ~/zim-files/
# Simple mode (default) - 1 intelligent natural language tool
openzim-mcp /path/to/zim/files
python -m openzim_mcp /path/to/zim/files
# Advanced mode - all 18 specialized tools
openzim-mcp --mode advanced /path/to/zim/files
python -m openzim_mcp --mode advanced /path/to/zim/files
# For development (from source)
uv run python -m openzim_mcp /path/to/zim/files
uv run python -m openzim_mcp --mode advanced /path/to/zim/files
# Or using make (development)
make run ZIM_DIR=/path/to/zim/files
OpenZIM MCP supports two modes:
zim_query) that accepts natural language queriesSee Simple Mode Guide for detailed information.
Simple Mode (default):
{
"openzim-mcp": {
"command": "openzim-mcp",
"args": ["/path/to/zim/files"]
}
}
Advanced Mode:
{
"openzim-mcp-advanced": {
"command": "openzim-mcp",
"args": ["--mode", "advanced", "/path/to/zim/files"]
}
}
Alternative configuration using Python module:
{
"openzim-mcp": {
"command": "python",
"args": [
"-m",
"openzim_mcp",
"/path/to/zim/files"
]
}
}
For development (from source):
{
"openzim-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/openzim-mcp",
"run",
"python",
"-m",
"openzim_mcp",
"/path/to/zim/files"
]
}
}
# Run all tests
make test
# Run tests with coverage
make test-cov
# Run specific test file
uv run pytest tests/test_security.py -v
# Run tests with ZIM test data (comprehensive testing)
make test-with-zim-data
# Run integration tests only
make test-integration
# Run tests that require ZIM test data
make test-requires-zim-data
OpenZIM MCP integrates with the official zim-testing-suite for comprehensive testing with real ZIM files:
# Download essential test files (basic testing)
make download-test-data
# Download all test files (comprehensive testing)
make download-test-data-all
# List available test files
make list-test-data
# Clean downloaded test data
make clean-test-data
The test data includes:
Test files are automatically organized by category and priority level.
# Format code
make format
# Run linting
make lint
# Type checking
make type-check
# Run all checks
make check
openzim-mcp/
โโโ openzim_mcp/ # Main package
โ โโโ __init__.py # Package initialization
โ โโโ __main__.py # Module entry point
โ โโโ main.py # Main entry point
โ โโโ server.py # MCP server implementation
โ โโโ config.py # Configuration management
โ โโโ security.py # Security and validation
โ โโโ cache.py # Caching functionality
โ โโโ content_processor.py # Content processing
โ โโโ zim_operations.py # ZIM file operations
โ โโโ exceptions.py # Custom exceptions
โ โโโ constants.py # Application constants
โโโ tests/ # Test suite
โโโ pyproject.toml # Project configuration
โโโ Makefile # Development commands
โโโ README.md # This file
No parameters required.
Required parameters:
zim_file_path (string): Path to the ZIM filequery (string): Search query termOptional parameters:
limit (integer, default: 10): Maximum number of results to returnoffset (integer, default: 0): Starting offset for results (for pagination)Required parameters:
zim_file_path (string): Path to the ZIM fileentry_path (string): Entry path, e.g., 'A/Some_Article'Optional parameters:
max_content_length (integer, default: 100000, minimum: 1000): Maximum length of returned contentSmart Retrieval Features:
Required parameters:
zim_file_path (string): Path to the ZIM fileReturns: JSON string containing ZIM metadata including entry counts, archive information, and metadata entries like title, description, language, creator, etc.
Required parameters:
zim_file_path (string): Path to the ZIM fileReturns: Main page content or information about the main page entry.
Required parameters:
zim_file_path (string): Path to the ZIM fileReturns: JSON string containing namespace information with entry counts, descriptions, and sample entries for each namespace (C, M, W, X, etc.).
Required parameters:
zim_file_path (string): Path to the ZIM filenamespace (string): Namespace to browse (C, M, W, X, A, I, etc.)Optional parameters:
limit (integer, default: 50, range: 1-200): Maximum number of entries to returnoffset (integer, default: 0): Starting offset for paginationReturns: JSON string containing namespace entries with titles, content previews, and pagination information.
Required parameters:
zim_file_path (string): Path to the ZIM filequery (string): Search query termOptional parameters:
namespace (string): Optional namespace filter (C, M, W, X, etc.)content_type (string): Optional content type filter (text/html, text/plain, etc.)limit (integer, default: 10, range: 1-100): Maximum number of results to returnoffset (integer, default: 0): Starting offset for paginationReturns: Filtered search results with namespace and content type information.
Required parameters:
zim_file_path (string): Path to the ZIM filepartial_query (string): Partial search query (minimum 2 characters)Optional parameters:
limit (integer, default: 10, range: 1-50): Maximum number of suggestions to returnReturns: JSON string containing search suggestions based on article titles and content.
Required parameters:
zim_file_path (string): Path to the ZIM fileentry_path (string): Entry path, e.g., 'C/Some_Article'Returns: JSON string containing article structure including headings, sections, metadata, and word count.
Required parameters:
zim_file_path (string): Path to the ZIM fileentry_path (string): Entry path, e.g., 'C/Some_Article'Returns: JSON string containing categorized links (internal, external, media) with titles and metadata.
Required parameters:
zim_file_path (string): Path to the ZIM fileentry_path (string): Entry path, e.g., 'C/Some_Article'Optional parameters:
max_words (integer, default: 200, range: 10-1000): Maximum number of words in the summaryReturns: JSON string containing a concise summary extracted from the article's opening paragraphs, with metadata including title, word count, and truncation status.
Features:
Required parameters:
zim_file_path (string): Path to the ZIM fileentry_path (string): Entry path, e.g., 'C/Some_Article'Returns: JSON string containing a hierarchical tree structure of article headings (h1-h6), suitable for navigation and content overview.
Features:
Required parameters:
zim_file_path (string): Path to the ZIM fileentry_path (string): Entry path, e.g., 'I/image.png' or 'I/document.pdf'Optional parameters:
max_size_bytes (integer): Maximum size of content to return (default: 10MB). Content larger than this will return metadata only.include_data (boolean): If true (default), include base64-encoded data. Set to false to retrieve metadata only.Returns:
JSON string containing:
path: Entry path in ZIM filetitle: Entry titlemime_type: Content type (e.g., "application/pdf", "image/png")size: Size in bytessize_human: Human-readable size (e.g., "1.5 MB")encoding: "base64" when data is included, null otherwisedata: Base64-encoded content (if include_data=true and under size limit)truncated: Boolean indicating if content exceeded size limitUse Cases:
{
"name": "list_zim_files"
}
Response:
Found 1 ZIM files in 1 directories:
[
{
"name": "wikipedia_en_100_2025-08.zim",
"path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"directory": "C:\\zim",
"size": "310.77 MB",
"modified": "2025-09-11T10:20:50.148427"
}
]
{
"name": "search_zim_file",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"query": "biology",
"limit": 3
}
}
Response:
Found 51 matches for "biology", showing 1-3:
## 1. Taxonomy (biology)
Path: Taxonomy_(biology)
Snippet: # Taxonomy (biology) Part of a series on
---
Evolutionary biology
Darwin's finches by John Gould
* Index
* Introduction
* [Main](Evolution "Evolution")
* Outline
## 2. Protein
Path: Protein
Snippet: # Protein A representation of the 3D structure of the protein myoglobin showing turquoise ฮฑ-helices. This protein was the first to have its structure solved by X-ray crystallography. Toward the right-center among the coils, a prosthetic group called a heme group (shown in gray) with a bound oxygen molecule (red).
## 3. Ant
Path: Ant
Snippet: # Ant Ants
Temporal range: Late Aptian โ Present
---
Fire ants
[Scientific classification](Taxonomy_\(biology\) "Taxonomy \(biology\)")
Kingdom: | [Animalia](Animal "Animal")
Phylum: | [Arthropoda](Arthropod "Arthropod")
Class: | [Insecta](Insect "Insect")
Order: | Hymenoptera
Infraorder: | Aculeata
Superfamily: |
Latreille, 1809[1]
Family: |
Latreille, 1809
{
"name": "get_zim_entry",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"entry_path": "Protein"
}
}
Response:
# Protein
Path: Protein
Type: text/html
## Content
# Protein
A representation of the 3D structure of the protein myoglobin showing turquoise ฮฑ-helices. This protein was the first to have its structure solved by X-ray crystallography. Toward the right-center among the coils, a prosthetic group called a heme group (shown in gray) with a bound oxygen molecule (red).
**Proteins** are large biomolecules and macromolecules that comprise one or more long chains of amino acid residues. Proteins perform a vast array of functions within organisms, including catalysing metabolic reactions, DNA replication, responding to stimuli, providing structure to cells and organisms, and transporting molecules from one location to another. Proteins differ from one another primarily in their sequence of amino acids, which is dictated by the nucleotide sequence of their genes, and which usually results in protein folding into a specific 3D structure that determines its activity.
A linear chain of amino acid residues is called a polypeptide. A protein contains at least one long polypeptide. Short polypeptides, containing less than 20โ30 residues, are rarely considered to be proteins and are commonly called peptides.
... [Content truncated, total of 56,202 characters, only showing first 1,500 characters] ...
Example: Automatic path resolution
{
"name": "get_zim_entry",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"entry_path": "A/Test Article"
}
}
Response (showing smart retrieval working):
# Test Article
Requested Path: A/Test Article
Actual Path: A/Test_Article
Type: text/html
## Content
# Test Article
This article demonstrates the smart retrieval system automatically handling
path encoding differences. The system tried "A/Test Article" directly,
then automatically searched and found "A/Test_Article".
... [Content continues] ...
No parameters required.
Returns:
Example Response:
{
"status": "healthy",
"server_name": "openzim-mcp",
"allowed_directories": 1,
"cache": {
"enabled": true,
"size": 1,
"max_size": 100,
"ttl_seconds": 3600
},
"instance_tracking": {
"active_instances": 1,
"conflicts_detected": 0
}
}
No parameters required.
Returns: Comprehensive server configuration including diagnostics, validation results, and conflict detection.
Example Response:
{
"configuration": {
"server_name": "openzim-mcp",
"allowed_directories": ["/path/to/zim/files"],
"cache_enabled": true,
"config_hash": "abc123...",
"server_pid": 12345
},
"diagnostics": {
"validation_status": "healthy",
"conflicts_detected": [],
"warnings": [],
"recommendations": []
}
}
No parameters required.
Returns: Detailed diagnostic information including instance conflicts, configuration validation, file accessibility checks, and actionable recommendations.
Example Response:
{
"status": "healthy",
"server_info": {
"pid": 12345,
"server_name": "openzim-mcp",
"config_hash": "abc123..."
},
"conflicts": [],
"issues": [],
"recommendations": ["Server appears to be running normally"],
"environment_checks": {
"directories_accessible": true,
"cache_functional": true
}
}
No parameters required.
Returns: Results of conflict resolution including cleanup actions and recommendations.
Example Response:
{
"status": "success",
"cleanup_results": {
"stale_instances_removed": 2
},
"conflicts_found": [],
"actions_taken": ["Removed 2 stale instance files"],
"recommendations": ["No active conflicts detected"]
}
Computer-related search:
{
"name": "search_zim_file",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"query": "computer",
"limit": 2
}
}
Response:
Found 39 matches for "computer", showing 1-2:
## 1. Video game
Path: Video_game
Snippet: # Video game First-generation _Pong_ console at the Computerspielemuseum Berlin
---
Platforms
## 2. Protein
Path: Protein
Snippet: # Protein A representation of the 3D structure of the protein myoglobin showing turquoise ฮฑ-helices. This protein was the first to have its structure solved by X-ray crystallography. Toward the right-center among the coils, a prosthetic group called a heme group (shown in gray) with a bound oxygen molecule (red).
Getting detailed content:
{
"name": "get_zim_entry",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"entry_path": "Evolution",
"max_content_length": 1500
}
}
Response:
# Evolution
Path: Evolution
Type: text/html
## Content
# Evolution
Part of the Biology series on
---
****
Mechanisms and processes
* Adaptation
* Genetic drift
* Gene flow
* History of life
* Maladaptation
* Mutation
* Natural selection
* Neutral theory
* Population genetics
* Speciation
... [Content truncated, total of 110,237 characters, only showing first 1,500 characters] ...
Getting ZIM metadata:
{
"name": "get_zim_metadata",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim"
}
}
Response:
{
"entry_count": 100000,
"all_entry_count": 120000,
"article_count": 80000,
"media_count": 20000,
"metadata_entries": {
"Title": "Wikipedia (English)",
"Description": "Wikipedia articles in English",
"Language": "eng",
"Creator": "Kiwix",
"Date": "2025-08-15"
}
}
Browsing a namespace:
{
"name": "browse_namespace",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"namespace": "C",
"limit": 5,
"offset": 0
}
}
Response:
{
"namespace": "C",
"total_in_namespace": 80000,
"offset": 0,
"limit": 5,
"returned_count": 5,
"has_more": true,
"entries": [
{
"path": "C/Biology",
"title": "Biology",
"content_type": "text/html",
"preview": "Biology is the scientific study of life..."
}
]
}
Filtered search:
{
"name": "search_with_filters",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"query": "evolution",
"namespace": "C",
"content_type": "text/html",
"limit": 3
}
}
Getting article structure:
{
"name": "get_article_structure",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"entry_path": "C/Evolution"
}
}
Response:
{
"title": "Evolution",
"path": "C/Evolution",
"content_type": "text/html",
"headings": [
{"level": 1, "text": "Evolution", "id": "evolution"},
{"level": 2, "text": "History", "id": "history"},
{"level": 2, "text": "Mechanisms", "id": "mechanisms"}
],
"sections": [
{
"title": "Evolution",
"level": 1,
"content_preview": "Evolution is the change in heritable traits...",
"word_count": 150
}
],
"word_count": 5000
}
Getting article summary:
{
"name": "get_entry_summary",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"entry_path": "C/Evolution",
"max_words": 100
}
}
Response:
{
"title": "Evolution",
"path": "C/Evolution",
"content_type": "text/html",
"summary": "Evolution is the change in heritable characteristics of biological populations over successive generations. These characteristics are the expressions of genes, which are passed from parent to offspring during reproduction...",
"word_count": 100,
"is_truncated": true
}
Getting table of contents:
{
"name": "get_table_of_contents",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"entry_path": "C/Evolution"
}
}
Response:
{
"title": "Evolution",
"path": "C/Evolution",
"content_type": "text/html",
"toc": [
{
"level": 1,
"text": "Evolution",
"id": "evolution",
"children": [
{
"level": 2,
"text": "History of evolutionary thought",
"id": "history",
"children": []
},
{
"level": 2,
"text": "Mechanisms",
"id": "mechanisms",
"children": []
}
]
}
],
"heading_count": 15,
"max_depth": 4
}
Getting search suggestions:
{
"name": "get_search_suggestions",
"arguments": {
"zim_file_path": "C:\\zim\\wikipedia_en_100_2025-08.zim",
"partial_query": "bio",
"limit": 5
}
}
Response:
{
"partial_query": "bio",
"suggestions": [
{"text": "Biology", "path": "C/Biology", "type": "title_start_match"},
{"text": "Biochemistry", "path": "C/Biochemistry", "type": "title_start_match"},
{"text": "Biodiversity", "path": "C/Biodiversity", "type": "title_start_match"}
],
"count": 3
}
Getting server health:
{
"name": "get_server_health"
}
Response:
{
"status": "healthy",
"server_name": "openzim-mcp",
"uptime_info": {
"process_id": 12345,
"started_at": "2025-09-14T10:30:00"
},
"cache_performance": {
"enabled": true,
"size": 15,
"max_size": 100,
"hit_rate": 0.85
},
"instance_tracking": {
"active_instances": 1,
"conflicts_detected": 0
}
}
Diagnosing server state:
{
"name": "diagnose_server_state"
}
Response:
{
"status": "healthy",
"server_info": {
"pid": 12345,
"server_name": "openzim-mcp",
"config_hash": "abc123def456..."
},
"conflicts": [],
"issues": [],
"recommendations": ["Server appears to be running normally. No issues detected."],
"environment_checks": {
"directories_accessible": true,
"cache_functional": true,
"zim_files_found": 5
}
}
Resolving server conflicts:
{
"name": "resolve_server_conflicts"
}
Response:
{
"status": "success",
"cleanup_results": {
"stale_instances_removed": 2,
"files_cleaned": ["/home/user/.openzim_mcp_instances/server_99999.json"]
},
"conflicts_found": [],
"actions_taken": ["Removed 2 stale instance files"],
"recommendations": ["No active conflicts detected after cleanup"]
}
OpenZIM MCP implements an intelligent entry retrieval system that automatically handles path encoding inconsistencies common in ZIM files:
How It Works:
Benefits for LLM Users:
Example Scenarios Handled Automatically:
A/Test Article โ A/Test_Article (space to underscore conversion)C/Cafรฉ โ C/Caf%C3%A9 (URL encoding differences)A/Some-Page โ A/Some_Page (hyphen to underscore conversion)For Direct Entry Access:
{
"name": "get_zim_entry",
"arguments": {
"zim_file_path": "/path/to/file.zim",
"entry_path": "A/Article_Name"
}
}
When Entry Not Found: The system will automatically provide guidance:
Entry not found: 'A/Article_Name'.
The entry path may not exist in this ZIM file.
Try using search_zim_file() to find available entries,
or browse_namespace() to explore the file structure.
max_content_length parameter for get_zim_entry must be at least 1000 characterswikipedia_en_100_2025-08.zim)\\ for Windows paths)OpenZIM MCP includes advanced multi-server instance tracking and conflict detection to ensure reliable operation when multiple server instances are running.
OpenZIM MCP automatically includes conflict warnings in search results and file listings when issues are detected:
**Server Conflict Detected**
Configuration mismatch with server PID 12345. Search results may be inconsistent.
Use 'resolve_server_conflicts()' to fix these issues.
diagnose_server_state() regularly to check for conflictsresolve_server_conflicts() to clean up stale instancesget_server_health() for instance tracking informationOpenZIM MCP supports configuration through environment variables with the OPENZIM_MCP_ prefix:
# Cache configuration
export OPENZIM_MCP_CACHE__ENABLED=true
export OPENZIM_MCP_CACHE__MAX_SIZE=200
export OPENZIM_MCP_CACHE__TTL_SECONDS=7200
# Content configuration
export OPENZIM_MCP_CONTENT__MAX_CONTENT_LENGTH=200000
export OPENZIM_MCP_CONTENT__SNIPPET_LENGTH=2000
export OPENZIM_MCP_CONTENT__DEFAULT_SEARCH_LIMIT=20
# Logging configuration
export OPENZIM_MCP_LOGGING__LEVEL=DEBUG
export OPENZIM_MCP_LOGGING__FORMAT="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# Server configuration
export OPENZIM_MCP_SERVER_NAME=my_openzim_mcp_server
| Setting | Default | Description |
|---|---|---|
OPENZIM_MCP_CACHE__ENABLED | true | Enable/disable caching |
OPENZIM_MCP_CACHE__MAX_SIZE | 100 | Maximum cache entries |
OPENZIM_MCP_CACHE__TTL_SECONDS | 3600 | Cache TTL in seconds |
OPENZIM_MCP_CONTENT__MAX_CONTENT_LENGTH | 100000 | Max content length |
OPENZIM_MCP_CONTENT__SNIPPET_LENGTH | 1000 | Max snippet length |
OPENZIM_MCP_CONTENT__DEFAULT_SEARCH_LIMIT | 10 | Default search result limit |
OPENZIM_MCP_LOGGING__LEVEL | INFO | Logging level |
OPENZIM_MCP_LOGGING__FORMAT | %(asctime)s - %(name)s - %(levelname)s - %(message)s | Log message format |
OPENZIM_MCP_SERVER_NAME | openzim-mcp | Server instance name |
The project includes comprehensive testing with 80%+ coverage using both mock data and real ZIM files:
OpenZIM MCP uses a hybrid testing approach:
ZIM_TEST_DATA_DIR for custom test data locations# Run tests with coverage report
make test-cov
# View coverage report
open htmlcov/index.html
# Run comprehensive tests with real ZIM files
make test-with-zim-data
Tests are organized with pytest markers:
@pytest.mark.requires_zim_data: Tests requiring ZIM test data files@pytest.mark.integration: Integration tests@pytest.mark.slow: Long-running testsOpenZIM MCP provides built-in monitoring capabilities:
This project uses Semantic Versioning with automated version management through release-please.
Version bumps and releases are automated based on Conventional Commits:
feat: - New features (minor version bump)fix: - Bug fixes (patch version bump)feat!: or BREAKING CHANGE: - Breaking changes (major version bump)perf: - Performance improvements (patch version bump)docs:, style:, refactor:, test:, chore: - No version bumpThe project uses an improved, consolidated release system with automatic validation:
Key Features:
For detailed instructions, see Release Process Guide.
[optional scope]:
[optional body]
[optional footer(s)]
Examples:
feat: add search suggestions endpoint
fix: resolve path traversal vulnerability
feat!: change API response format
docs: update installation instructions
git checkout -b feature/amazing-feature)make check)git commit -m 'feat: add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Made with โค๏ธ by Cameron Rye
Install via CLI
npx mdskills install cameronrye/openzim-mcpOpenZIM MCP Server is a free, open-source AI agent skill. OpenZIM MCP Server Transform static ZIM archives into dynamic knowledge engines for AI models OpenZIM MCP transforms static ZIM archives into dynamic knowledge engines for Large Language Models. Unlike basic file readers, this tool provides intelligent, structured access that LLMs need to effectively navigate and understand vast knowledge repositories. Why LLMs Love OpenZIM MCP: - Smart Navigation
Install OpenZIM MCP Server with a single command:
npx mdskills install cameronrye/openzim-mcpThis downloads the skill files into your project and your AI agent picks them up automatically.
OpenZIM MCP Server works with Claude Code, Claude Desktop, Cursor, Vscode Copilot, Windsurf, Continue Dev, Gemini Cli, Amp, Roo Code, Goose. Skills use the open SKILL.md format which is compatible with any AI coding agent that reads markdown instructions.