dav-mcp
Authenticated proxy for forwarding WebDAV requests to DAV servers, supporting CalDAV and CardDAV operations.
README
dav-mcp
An MCP (Model Context Protocol) server written in TypeScript that handles authentication and forwards WebDAV requests to DAV servers. This server acts as an authenticated proxy, allowing MCP clients to send properly-formed WebDAV requests while the server handles authentication.
Features
- WebDAV Request Forwarding: Forward any WebDAV request (PROPFIND, GET, PUT, DELETE, MKCOL, etc.) to configured servers
- Authentication Handling: Support for Basic and Bearer token authentication
- Simple Design: No parsing - just forward requests with authentication headers
- TypeScript: Fully typed implementation with comprehensive error handling
- MCP Integration: Compatible with MCP clients and Claude Desktop
Installation
npm install
npm run build
Usage
As an MCP Server
The server can be used with any MCP-compatible client. For Claude Desktop, add to your configuration:
{
"mcpServers": {
"dav-mcp": {
"command": "node",
"args": ["/path/to/dav-mcp/dist/index.js"]
}
}
}
Available Tools
1. Configure WebDAV Server
Configure a connection to a WebDAV server:
{
"name": "configure_webdav_server",
"arguments": {
"name": "my-server",
"baseUrl": "https://dav.example.com/remote.php/dav/",
"username": "user@example.com",
"password": "your-password",
"authType": "basic"
}
}
2. Test WebDAV Connection
Test if the configured server is accessible:
{
"name": "test_webdav_connection",
"arguments": {
"serverName": "my-server"
}
}
3. WebDAV Request
Forward any WebDAV request to the configured server:
{
"name": "webdav_request",
"arguments": {
"serverName": "my-server",
"method": "PROPFIND",
"path": "/calendars/user@example.com/personal/",
"headers": {
"Content-Type": "application/xml; charset=utf-8",
"Depth": "1"
},
"body": "<?xml version=\"1.0\" encoding=\"utf-8\" ?><d:propfind xmlns:d=\"DAV:\"><d:prop><d:displayname /><d:resourcetype /></d:prop></d:propfind>"
}
}
Supported WebDAV Methods
The server can forward any HTTP method, including WebDAV-specific methods:
- GET: Retrieve resources
- PUT: Create/update resources
- DELETE: Remove resources
- PROPFIND: Get properties of resources
- PROPPATCH: Modify properties of resources
- MKCOL: Create collections (folders)
- COPY: Copy resources
- MOVE: Move resources
- LOCK: Lock resources
- UNLOCK: Unlock resources
- REPORT: Extended queries (CalDAV/CardDAV)
Example WebDAV Operations
List Calendars (CalDAV)
{
"name": "webdav_request",
"arguments": {
"serverName": "my-server",
"method": "PROPFIND",
"path": "/calendars/user@example.com/",
"headers": {
"Content-Type": "application/xml; charset=utf-8",
"Depth": "1"
},
"body": "<?xml version=\"1.0\" encoding=\"utf-8\" ?><d:propfind xmlns:d=\"DAV:\" xmlns:c=\"urn:ietf:params:xml:ns:caldav\"><d:prop><d:displayname /><d:resourcetype /><c:calendar-description /></d:prop></d:propfind>"
}
}
Get Calendar Events
{
"name": "webdav_request",
"arguments": {
"serverName": "my-server",
"method": "REPORT",
"path": "/calendars/user@example.com/personal/",
"headers": {
"Content-Type": "application/xml; charset=utf-8",
"Depth": "1"
},
"body": "<?xml version=\"1.0\" encoding=\"utf-8\" ?><c:calendar-query xmlns:d=\"DAV:\" xmlns:c=\"urn:ietf:params:xml:ns:caldav\"><d:prop><d:getetag /><c:calendar-data /></d:prop><c:filter><c:comp-filter name=\"VCALENDAR\"><c:comp-filter name=\"VEVENT\"></c:comp-filter></c:comp-filter></c:filter></c:calendar-query>"
}
}
List Address Books (CardDAV)
{
"name": "webdav_request",
"arguments": {
"serverName": "my-server",
"method": "PROPFIND",
"path": "/addressbooks/user@example.com/",
"headers": {
"Content-Type": "application/xml; charset=utf-8",
"Depth": "1"
},
"body": "<?xml version=\"1.0\" encoding=\"utf-8\" ?><d:propfind xmlns:d=\"DAV:\" xmlns:card=\"urn:ietf:params:xml:ns:carddav\"><d:prop><d:displayname /><d:resourcetype /><card:addressbook-description /></d:prop></d:propfind>"
}
}
Supported DAV Servers
This MCP server works with any WebDAV-compatible server, including:
- Nextcloud: Full CalDAV/CardDAV support
- ownCloud: Calendar and contacts
- Radicale: Lightweight CalDAV/CardDAV server
- Apple Calendar/Contacts Server: macOS Server
- Google Calendar/Contacts: Via DAV interface (with app passwords)
- Generic WebDAV: Any RFC 4918 compliant server
Authentication
Basic Authentication
Username and password authentication:
{
"authType": "basic",
"username": "your-username",
"password": "your-password"
}
Bearer Token Authentication
For OAuth or API token authentication:
{
"authType": "bearer",
"token": "your-access-token"
}
Development
Building
npm run build
Testing
npm test
Development Mode
npm run dev
Linting
npm run lint
Architecture
The server is designed as a simple authenticated proxy:
src/index.ts: Main MCP server implementation with 3 toolssrc/types/: TypeScript type definitionssrc/utils/dav-client.ts: WebDAV client for authenticated request forwardingsrc/__tests__/: Test files
Design Philosophy
This server follows the principle of simplicity:
- No Parsing: The server doesn't parse or interpret WebDAV responses
- Raw Forwarding: Requests are forwarded exactly as received from the client
- Authentication Only: The server only adds authentication headers
- Client Responsibility: MCP clients must send properly-formed WebDAV requests
This approach provides maximum flexibility and compatibility with any WebDAV server while keeping the server implementation simple and reliable.
Security Notes
- Credentials are stored in memory only during the session
- HTTPS is recommended for all DAV server connections
- Bearer tokens should be preferred over basic auth when available
License
ISC
Contributing
Contributions are welcome! Please ensure all tests pass and follow the existing code style.
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.
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.
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.
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.