Fathom Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Fathom Mcp (Agent Skill) 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.
A Model Context Protocol server that provides AI assistants with direct access to local document collections through file-first search capabilities.
Install Fathom MCP directly from PyPI:
pip install fathom-mcpOr with uv:
uv pip install fathom-mcpThis server requires the following system utilities:
# Ubuntu/Debian
sudo apt install ugrep poppler-utils
# macOS
brew install ugrep popplerFathom MCP supports searching and reading multiple document formats:
To enable all optional formats:
# macOS
brew install pandoc jq
# Linux (Ubuntu/Debian)
sudo apt install pandoc jq
# Windows (Chocolatey)
choco install pandoc jqSee docs/supported-formats.md for detailed installation instructions, configuration options, and troubleshooting.
The File Knowledge server organizes documents using a collection-based hierarchy that maps directly to your filesystem structure.
The knowledge root can be specified via:
Command-line argument (recommended for static setups):
fathom-mcp --root /path/to/documentsConfiguration file:
knowledge:
root: "/path/to/documents"Environment variable:
export FMCP_KNOWLEDGE__ROOT=/path/to/documentsAll search operations support three scope levels:
This hierarchical approach enables efficient knowledge organization without requiring database infrastructure.
Create a config.yaml with your settings:
knowledge:
root: "./documents"
search:
context_lines: 5 # Lines of context around matches
max_results: 50 # Maximum results per search
timeout: 30 # Search timeout in seconds
security:
enable_shell_filters: true
filter_mode: whitelist # Recommended for production
exclude:
patterns:
- ".git/*"
- "*.draft.*"
- "*.tmp"See config.example.yaml for all available options.
All configuration options can be overridden using environment variables with the FMCP_ prefix:
export FMCP_KNOWLEDGE__ROOT=/path/to/documents
export FMCP_SEARCH__MAX_RESULTS=100
export FMCP_SECURITY__FILTER_MODE=whitelistUse double underscores (__) to denote nested configuration levels.
The server implements six MCP tools organized into three categories:
#### Browse Operations
#### Search Operations
#### Read Operations
Browse the hierarchical structure of your knowledge base.
Arguments:
path (string, optional): Collection path relative to root. Defaults to root level.Returns:
Example:
{
"path": "programming/python"
}Locate documents by filename or path pattern using fuzzy matching.
Arguments:
query (string, required): Search term for document nameslimit (number, optional): Maximum results to return (default: 20)Returns:
Example:
{
"query": "async patterns",
"limit": 10
}Execute full-text searches across your knowledge base with powerful boolean operators.
Arguments:
query (string, required): Search query with optional operatorsscope (object, required): Defines search boundariestype (string): One of "global", "collection", or "document"path (string, conditional): Required for collection and document scopesSearch Operators:
term1 term2 - AND: Find documents containing both termsterm1|term2 - OR: Find documents containing either termterm1 -term2 - NOT: Exclude documents with term2"exact phrase" - Match exact phrase with quotesReturns:
Examples:
Global search:
{
"query": "authentication jwt",
"scope": {
"type": "global"
}
}Collection-scoped search:
{
"query": "async|await -deprecated",
"scope": {
"type": "collection",
"path": "programming/python"
}
}Document-specific search:
{
"query": "\"error handling\"",
"scope": {
"type": "document",
"path": "guides/best-practices.md"
}
}Execute multiple search queries concurrently for improved performance.
Arguments:
queries (array of strings, required): List of search queriesscope (object, required): Same scope structure as search_documentsReturns:
Example:
{
"queries": ["authentication", "authorization", "session management"],
"scope": {
"type": "collection",
"path": "security/docs"
}
}Note: Concurrent searches are limited by the limits.max_concurrent_searches configuration setting.
Read the complete contents of a document with optional page selection for PDFs.
Arguments:
path (string, required): Document path relative to knowledge rootpages (array of numbers, optional): Specific pages to read (PDF only)Returns:
Examples:
Read entire document:
{
"path": "guides/user-manual.pdf"
}Read specific pages:
{
"path": "guides/user-manual.pdf",
"pages": [1, 5, 10]
}Note: Content length is limited by the limits.max_read_chars configuration setting.
Retrieve metadata and structural information about a document.
Arguments:
path (string, required): Document path relative to knowledge rootReturns:
Example:
{
"path": "reference/api-documentation.pdf"
}Add this to your claude_desktop_config.json:
{
"mcpServers": {
"fathom-mcp": {
"command": "fathom-mcp",
"args": ["--root", "/path/to/your/documents"]
}
}
}For more complex setups, use a configuration file:
{
"mcpServers": {
"fathom-mcp": {
"command": "fathom-mcp",
"args": ["--config", "/path/to/config.yaml"]
}
}
}When developing or running from source:
{
"mcpServers": {
"fathom-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/fathom-mcp",
"run",
"fathom-mcp",
"--root",
"/path/to/documents"
]
}
}
}~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonImportant: Restart Claude Desktop after modifying the configuration file.
Fathom MCP supports two transport protocols for different deployment scenarios:
For Claude Desktop integration - the server communicates over standard input/output:
{
"mcpServers": {
"fathom-mcp": {
"command": "fathom-mcp",
"args": ["--root", "/path/to/your/documents"]
}
}
}Docker (optional):
# Run stdio transport in Docker
docker compose --profile stdio upFor remote deployment and web clients - the server runs as an HTTP service.
#### Streamable HTTP:
# Start server
docker compose --profile http up fathom-mcp-http
# Test connectivity
fathom-mcp-test -t streamable-http -u http://localhost:8765/mcp -l basicHTTP transport configured via environment variables or config file:
Environment variables:
export FMCP_TRANSPORT__TYPE=streamable-http
export FMCP_TRANSPORT__HOST=0.0.0.0
export FMCP_TRANSPORT__PORT=8765
export FMCP_TRANSPORT__ENABLE_CORS=true
export FMCP_TRANSPORT__ALLOWED_ORIGINS='["https://app.example.com"]'Configuration file:
transport:
type: "streamable-http"
host: "0.0.0.0"
port: 8765
enable_cors: true
allowed_origins:
- "https://app.example.com"
structured_logging: true⚠️ IMPORTANT: No Built-In Authentication
Fathom MCP does NOT include authentication for HTTP transport. This is intentional - authentication should be handled by dedicated tools.
For HTTP deployments:
*) in productionFor local use: Use the default stdio transport - no network access, no authentication needed.
See [docs/security.md](docs/security.md) for detailed security setup with examples for reverse proxy, VPN, and OAuth.
Test client available for all transports:
# Connectivity test
fathom-mcp-test -t streamable-http -u http://localhost:8765/mcp -l connectivity
# Basic test suite
fathom-mcp-test -t streamable-http -u http://localhost:8765/mcp -l basic
# Full test suite with verbose output
fathom-mcp-test -t streamable-http -u http://localhost:8765/mcp -l full -vExit codes:
# Start the server
docker-compose up
# Build and start
docker-compose up --build
# Run in detached mode
docker-compose up -dThe included docker-compose.yaml provides:
# Build image
docker build -t fathom-mcp .
# Run with read-only mount
docker run -v /path/to/docs:/knowledge:ro fathom-mcp
# Run with custom configuration
docker run \
-v /path/to/docs:/knowledge:ro \
-v /path/to/config.yaml:/config/config.yaml:ro \
fathom-mcpThe File Knowledge server operates on local documents only. Cloud synchronization is intentionally handled outside the MCP server for security and architectural clarity.
Option 1: Cloud Desktop Clients
Option 2: rclone mount
# Mount cloud storage as read-only local directory
rclone mount gdrive:Knowledge /data/knowledge --read-only --vfs-cache-mode full --daemonOption 3: Scheduled sync
# Periodic sync via cron
*/30 * * * * rclone sync gdrive:Knowledge /data/knowledgeSee docs/cloud-sync-guide.md for detailed setup instructions.
# Clone repository
git clone https://github.com/RomanShnurov/fathom-mcp
cd fathom-mcp
# Install with development dependencies (recommended)
uv sync --extra dev
# Alternative: pip
pip install -e ".[dev]"# Run all tests
uv run pytest
# Run with coverage report
uv run pytest --cov
# Run specific test file
uv run pytest tests/test_search.py
# Run with verbose output
uv run pytest -v# Format code
uv run ruff format .
# Lint code
uv run ruff check .
# Auto-fix linting issues
uv run ruff check . --fix
# Type checking
uv run mypy srcThe File Knowledge server implements defense-in-depth security.
⚠️ HTTP Transport Security: When using HTTP transport (streamable-http), the server does NOT include built-in authentication. This is intentional - use external tools:
host: 127.0.0.1) for same-machine access📖 See [docs/security.md](docs/security.md) for complete setup guides with configuration examples.
../ and absolute path attackssecurity:
enable_shell_filters: true
filter_mode: whitelist # Recommended for production
allowed_filter_commands:
- "pdftotext % -"
symlink_policy: disallow # Prevent symlink attacksFor production HTTP deployments, always use reverse proxy or VPN. See [docs/security.md](docs/security.md).
Since MCP servers run over stdio, debugging can be challenging. Fathom MCP provides two options for interactive testing.
Fathom MCP includes a Streamlit-based inspector UI for testing server tools, resources, and prompts:
# Install inspector dependencies
uv sync --extra inspector
# Run the inspector
streamlit run inspector/app.pyThe built-in Inspector provides:
Alternatively, use the official MCP Inspector:
npx @modelcontextprotocol/inspector fathom-mcp --root /path/to/documentsYou can also use it with configuration files:
npx @modelcontextprotocol/inspector fathom-mcp --config config.yamlContributions are welcome! Please:
ruff format, ruff check, mypy)See CONTRIBUTING.md for detailed guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.