
Conduit
STDIOMCP server for file operations, web content processing, and advanced search capabilities.
MCP server for file operations, web content processing, and advanced search capabilities.
The purr-fect MCP server for feline-fast file operations, web prowling, and data hunting! 🐾
A sleek Model Context Protocol server that helps your AI assistant navigate the digital jungle with cat-like agility.
We're excited to announce the first stable release of conduit-mcp! This production-ready MCP server brings powerful file system operations, web content processing, and advanced search capabilities to your AI assistant.
conduit-mcp
is like having a highly trained data-hunting cat that can:
Unlike those lazy house cats, this server works 24/7 and never knocks things off your desk! 😸
Just tell your MCP client about your new digital pet:
{ "mcpServers": { "conduit": { "command": "npx", "args": ["-y", "@steipete/conduit-mcp@beta"], "env": { "CONDUIT_ALLOWED_PATHS": "~/Documents:~/Projects:/tmp", "LOG_LEVEL": "INFO" } } } }
git clone <repository_url> cd conduit-mcp npm install # Configure your MCP client to use ./start.sh
Your digital cat needs to know where it's allowed to roam! Configure the CONDUIT_ALLOWED_PATHS
environment variable:
# Let your cat explore Documents and Projects CONDUIT_ALLOWED_PATHS="~/Documents:~/Projects" # Default playground (if you don't specify) # Your cat defaults to: "~:/tmp" # (Don't worry, it'll meow about this the first time!)
🚨 Security Notice: Your cat is well-trained and won't venture outside its allowed territories. It also follows all symlinks to ensure no sneaky escapes!
read
Tool - Master Detective CatYour cat can investigate files and URLs with three different specialties:
operation: "content"
)Read and process content from files or URLs in various formats.
{ "tool": "read", "operation": "content", "sources": ["~/Documents/important.txt", "https://example.com/article"], "format": "text" }
Format Options:
"text"
- Read as plain text (default for text files)"base64"
- Binary-safe encoding (default for images/binaries)"markdown"
- Web pages get the full spa treatment! 🧖♀️"checksum"
- Generate cryptographic fingerprintsParameters:
sources
: string[]
(Required) - Array of file paths or URLsformat?
: string
(Optional) - Output formatchecksum_algorithm?
: string
(Optional) - "md5" | "sha1" | "sha256" | "sha512"
offset?
: integer
(Optional) - Byte offset to start reading fromlength?
: integer
(Optional) - Number of bytes to readSpecial Powers:
offset
and length
operation: "metadata"
)Get detailed information about files or URLs without reading their content.
{ "tool": "read", "operation": "metadata", "sources": ["~/Documents/mystery_file.pdf"] }
Returns: File size, MIME type, timestamps, permissions, HTTP headers (for URLs), and more!
operation: "diff"
)Compare two files and see exactly what changed.
{ "tool": "read", "operation": "diff", "sources": ["~/file1.txt", "~/file2.txt"], "diff_format": "unified" }
Parameters:
sources
: string[2]
(Required) - Exactly two file pathsdiff_format?
: string
(Optional) - Currently supports "unified"
write
Tool - Master Builder CatYour cat can modify the file system with surgical precision through various actions:
action: "put"
)Write content to files with different encoding and write modes.
{ "tool": "write", "action": "put", "entries": [ { "path": "~/Documents/new_file.txt", "content": "Hello from your digital cat! 🐱", "write_mode": "overwrite", "input_encoding": "text" } ] }
Parameters for put
:
path
: string
(Required) - Target file pathcontent
: string
(Required) - Content to writeinput_encoding?
: "text" | "base64"
(Optional, default: "text"
)write_mode?
: "overwrite" | "append" | "error_if_exists"
(Optional, default: "overwrite"
)action: "mkdir"
)Create directories with optional recursive creation.
{ "tool": "write", "action": "mkdir", "entries": [ { "path": "~/Documents/new_folder/subfolder", "recursive": true } ] }
action: "copy" | "move" | "delete"
)Copy, move, or delete files and directories.
{ "tool": "write", "action": "copy", "entries": [ { "source_path": "~/file.txt", "destination_path": "~/backup/" } ] }
Available Actions:
"put"
- Write files (text or base64)"mkdir"
- Create directories (with recursive
option)"copy"
- Duplicate files/folders"move"
- Relocate and rename"delete"
- Remove files/folders (with recursive
for directories)"touch"
- Update timestamps or create empty filesCreate and extract archives in multiple formats.
Create Archive (action: "archive"
):
{ "tool": "write", "action": "archive", "source_paths": ["~/Documents/folder1", "~/Documents/file1.txt"], "archive_path": "~/backup.zip", "format": "zip", "recursive_source_listing": true }
Extract Archive (action: "unarchive"
):
{ "tool": "write", "action": "unarchive", "archive_path": "~/backup.zip", "destination_path": "~/restored/", "format": "zip" }
Archive Formats: ZIP, TAR.GZ, TGZ - your cat handles them all!
list
Tool - Inventory Catoperation: "entries"
)Explore directory structures with recursive capabilities.
{ "tool": "list", "operation": "entries", "path": "~/Documents", "recursive_depth": 2, "calculate_recursive_size": true }
Parameters:
path
: string
(Required) - Directory to listrecursive_depth?
: integer
(Optional, default: 0
) - How deep to recursecalculate_recursive_size?
: boolean
(Optional, default: false
) - Calculate total size of directoriesSpecial Features:
operation: "system_info"
)Get information about the server and file system.
{ "tool": "list", "operation": "system_info", "info_type": "server_capabilities" }
Info Types:
"server_capabilities"
- Server version, configuration, supported features"filesystem_stats"
- File system statistics for a given pathfind
Tool - Bloodhound CatThe most sophisticated search tool - your cat can find ANYTHING using multiple criteria:
{ "tool": "find", "base_path": "~/Documents", "recursive": true, "match_criteria": [ { "type": "name_pattern", "pattern": "*.{pdf,doc,docx}" }, { "type": "metadata_filter", "attribute": "size_bytes", "operator": "gt", "value": 1048576 } ], "entry_type_filter": "file" }
Parameters:
base_path
: string
(Required) - Starting directoryrecursive?
: boolean
(Optional, default: true
) - Search subdirectoriesmatch_criteria
: object[]
(Required) - Array of search criteria (ALL must match)entry_type_filter?
: "file" | "directory" | "any"
(Optional) - Filter by entry typeName Pattern Matching:
{ "type": "name_pattern", "pattern": "*.txt" }
Content Search:
{ "type": "content_pattern", "pattern": "TODO|FIXME", "is_regex": true, "case_sensitive": false, "file_types_to_search": [".js", ".ts", ".py"] }
Metadata Filtering:
{ "type": "metadata_filter", "attribute": "modified_at_iso", "operator": "after", "value": "2023-01-01T00:00:00Z", "case_sensitive": false }
Search Superpowers:
*.txt
, image[0-9]?.png
, **/logs/*.log
test
Tool - Quality Assurance CatA debugging tool for testing the MCP server functionality.
{ "tool": "test", "operation": "echo", "params_to_echo": { "message": "Hello, world!" } }
Operations:
"echo"
- Echo back provided parameters for testing"generate_error"
- Generate specific error codes for testing error handlingYour digital cat responds to these environment variables:
# Territory boundaries (IMPORTANT!) CONDUIT_ALLOWED_PATHS="~/Documents:~/Projects:/tmp" # Logging (where your cat writes its diary) LOG_LEVEL="INFO" # TRACE, DEBUG, INFO, WARN, ERROR, FATAL CONDUIT_LOG_FILE_PATH="/tmp/conduit-mcp.log" # or "NONE" to disable
# Resource limits (keep your cat well-behaved) CONDUIT_MAX_PAYLOAD_SIZE_BYTES="10485760" # 10MB max incoming requests CONDUIT_MAX_FILE_READ_BYTES="52428800" # 50MB max file reads CONDUIT_MAX_FILE_READ_BYTES_FIND="524288" # 512KB max for find content search CONDUIT_MAX_URL_DOWNLOAD_SIZE_BYTES="20971520" # 20MB max downloads CONDUIT_HTTP_TIMEOUT_MS="30000" # 30 second timeouts # Image compression (make photos diet-friendly) CONDUIT_IMAGE_COMPRESSION_THRESHOLD_BYTES="1048576" # 1MB threshold CONDUIT_IMAGE_COMPRESSION_QUALITY="75" # Quality 1-100
# Search and recursion limits CONDUIT_MAX_RECURSIVE_DEPTH="10" # How deep to explore CONDUIT_RECURSIVE_SIZE_TIMEOUT_MS="60000" # 60 second timeout # Default checksum algorithm CONDUIT_DEFAULT_CHECKSUM_ALGORITHM="sha256" # md5, sha1, sha256, sha512
When you ask for Markdown from a URL, your cat:
For non-HTML content, it gracefully falls back to raw text with helpful notes.
Large images automatically get compressed using Sharp:
Your cat is security-conscious:
Efficiency expert! Process multiple files in a single request:
{ "tool": "write", "action": "copy", "entries": [ { "source_path": "~/file1.txt", "destination_path": "~/backup/" }, { "source_path": "~/file2.txt", "destination_path": "~/backup/" }, { "source_path": "~/folder1", "destination_path": "~/backup/" } ] }
When using default paths (~:/tmp
), your cat will politely inform you on the first successful operation with details about the configuration. It's like a friendly meow saying "Hi! Here's where I'm allowed to play!"
Your cat is well-mannered and provides detailed error information:
{ "status": "error", "error_code": "ERR_FS_ACCESS_DENIED", "error_message": "Cannot access path outside allowed directories: /forbidden/path" }
Common Error Categories:
ERR_FS_*
- File system issuesERR_HTTP_*
- Web request problemsERR_INVALID_PARAMETER
- Bad input dataERR_RESOURCE_LIMIT_EXCEEDED
- Size/timeout limits hitERR_ARCHIVE_*
- Archive operation failuresERR_MARKDOWN_*
- Web content processing issuesnpm test # Run all tests npm run test:coverage # With coverage report npm run test:unit # Unit tests only npm run test:e2e # End-to-end tests
npm run build # Compile TypeScript npm run dev # Development mode with auto-reload npm run lint # Check code style npm run format # Auto-format code
We love contributions! Please:
git checkout -b feature/amazing-cat-feature
)We use conventional commits:
feat: add new search criteria type
fix: resolve symlink resolution bug
docs: update README with new examples
test: add integration tests for archive operations
This project is licensed under the MIT License - see the LICENSE file for details.
Perfect for AI assistants that need to:
/docs/spec.md
)Happy hunting! 🐾
Your digital cat is ready to pounce on any data challenge you throw at it!