Multi-Tool MCP Server
Provides secure access to filesystem operations, system commands, Obsidian vault management, SQLite databases, and UniFi network controller operations through authenticated HTTPS connections.
README
MCP Server
A custom Model Context Protocol (MCP) server that provides Claude Code and other MCP clients with secure access to filesystem, system information, Obsidian vault, SQLite database, and UniFi network controller tools.
Features
- Filesystem Tools - Read, write, list, and search files within allowed paths
- System Tools - Get system info, run whitelisted commands, view processes and disk usage
- Obsidian Tools - List notes, read content, search text, and find backlinks in your vault
- Database Tools - Query SQLite databases with read-only access
- UniFi Tools - Query and manage UniFi Dream Machine networks, including Threat Management (CyberSecure)
Security
- HTTPS with TLS certificates (Let's Encrypt supported)
- Bearer token authentication for all MCP requests
- Path restrictions for filesystem operations
- Command whitelist for system operations
- Read-only database access with query filtering
- API key authentication for UniFi integration
Requirements
- Node.js 18+ (for native fetch support)
- npm or yarn
- TLS certificates (self-signed for development, Let's Encrypt for production)
- Optional: UniFi Dream Machine with API key
Installation
-
Clone the repository:
git clone https://github.com/Shawn-Falconbury/mcp-server.git cd mcp-server -
Install dependencies:
npm install -
Configure environment:
cp .env.example .env # Edit .env with your settings -
Generate TLS certificates (for development):
mkdir -p certs openssl req -x509 -newkey rsa:4096 -keyout certs/server.key -out certs/server.crt -days 365 -nodes -subj "/CN=localhost" -
Build and run:
npm run build npm start
Configuration
Copy .env.example to .env and configure:
| Variable | Required | Description |
|---|---|---|
MCP_TOKEN |
Yes | Authentication token for MCP clients |
MCP_PORT |
No | Server port (default: 8443) |
USE_HTTPS |
No | Use HTTPS (default: true) |
SSL_CERT_PATH |
No | Path to SSL certificate |
SSL_KEY_PATH |
No | Path to SSL private key |
ALLOWED_PATHS |
No | Comma-separated paths for filesystem access |
OBSIDIAN_VAULT_PATH |
No | Path to Obsidian vault |
DB_PATH |
No | Path to SQLite database |
UNIFI_HOST |
No | UniFi controller IP/hostname |
UNIFI_API_KEY |
No | UniFi API key |
UNIFI_SITE |
No | UniFi site name (default: "default") |
Usage
Development
npm run dev # Run with tsx (hot reload)
Production
npm run build # Compile TypeScript
npm start # Run compiled server
Systemd Service
Create /etc/systemd/system/mcp-server.service:
[Unit]
Description=MCP Server
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/mcp-server
ExecStart=/usr/bin/npm start
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Then:
sudo systemctl daemon-reload
sudo systemctl enable mcp-server
sudo systemctl start mcp-server
Connecting Claude Code
Add to your Claude Code MCP settings:
{
"mcpServers": {
"my-mcp-server": {
"type": "http",
"url": "https://your-server:8443/mcp",
"headers": {
"Authorization": "Bearer YOUR_MCP_TOKEN"
}
}
}
}
Available Tools
See docs/tools-reference.md for complete tool documentation.
Tool Categories
| Category | Tools | Description |
|---|---|---|
| Filesystem | 4 | File read/write/list/search |
| System | 4 | System info and commands |
| Obsidian | 4 | Vault notes and search |
| Database | 3 | SQLite queries |
| UniFi | 17 | Network management and security |
Project Structure
mcp-server/
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # Express + MCP setup
│ ├── auth.ts # Token authentication
│ └── tools/
│ ├── index.ts # Tool registry
│ ├── filesystem.ts # File operations
│ ├── system.ts # System commands
│ ├── obsidian.ts # Obsidian vault
│ ├── database.ts # SQLite queries
│ └── unifi.ts # UniFi controller
├── docs/ # Documentation
├── certs/ # TLS certificates (not in repo)
├── dist/ # Compiled output (not in repo)
├── .env # Configuration (not in repo)
└── .env.example # Example configuration
API Endpoints
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/health |
GET | No | Health check |
/mcp |
POST | Yes | MCP protocol endpoint |
License
ISC
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.