Skip to main content
Glama
README.md
# DocuMCP - Document Management System with MCP Integration

A powerful document management system that combines local file storage with vector database capabilities, accessible through both a web GUI and Claude Desktop via the Model Context Protocol (MCP).

## Features

- šŸ“š **Document Management**: Upload, store, and organize documents with a beautiful web interface
- šŸ” **Vector Search**: Semantic search powered by Qdrant vector database
- šŸ¤– **MCP Integration**: Access documents directly from Claude Desktop
- šŸ” **Authentication**: Secure JWT-based authentication system
- šŸŽØ **Modern GUI**: Responsive web dashboard for easy document management
- 🐳 **Docker Support**: Easy deployment with Docker Compose

## Quick Start

### Prerequisites

- Node.js 20+ 
- Docker & Docker Compose (optional, for Qdrant)
- Claude Desktop (for MCP integration)

### Installation

1. **Clone and install dependencies:**
```bash
git clone <repository>
cd documcp
npm install
```

2. **Start Qdrant (using Docker):**
```bash
docker run -p 6333:6333 -v ./qdrant_data:/qdrant/storage qdrant/qdrant
```

3. **Configure environment:**
```bash
cp .env.example .env
# Edit .env with your settings
```

4. **Build and start the application:**
```bash
npm run build
npm start
```

5. **Access the web interface:**
Open http://localhost:3456 in your browser
- Default login: `admin` / `admin123`

## Docker Deployment

For production deployment with Docker:

```bash
docker-compose up -d
```

This will start:
- Qdrant vector database on port 6333
- DocuMCP web server on port 3456
- MCP server on port 3457

## Claude Desktop Integration

1. **Build the MCP server:**
```bash
npm run build
```

2. **Add to Claude Desktop configuration:**

Edit your Claude Desktop config file:
- Mac: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

Add this configuration:
```json
{
  "mcpServers": {
    "documcp": {
      "command": "node",
      "args": ["/path/to/documcp/dist/mcp-server.js"],
      "env": {
        "QDRANT_URL": "http://localhost:6333",
        "COLLECTION_NAME": "documents"
      }
    }
  }
}
```

3. **Restart Claude Desktop**

## Available MCP Tools

Once configured, Claude can use these tools:

- `list_documents` - List all documents in the system
- `search_documents` - Semantic search across documents
- `read_document` - Read specific document content
- `delete_document` - Remove documents from the system

## Architecture

```
DocuMCP/
ā”œā”€ā”€ Web GUI (Express + HTML/JS)
│   ā”œā”€ā”€ Authentication (JWT)
│   ā”œā”€ā”€ File Upload/Download
│   └── Document Management
ā”œā”€ā”€ MCP Server
│   └── Document Access Tools
ā”œā”€ā”€ Storage Layer
│   ā”œā”€ā”€ Local File System (./uploads)
│   └── Qdrant Vector DB
└── API Layer
    ā”œā”€ā”€ REST API
    └── MCP Protocol
```

## Configuration

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `PORT` | Web server port | 3456 |
| `JWT_SECRET` | JWT signing secret | (required) |
| `ADMIN_PASSWORD` | Admin login password | admin123 |
| `QDRANT_URL` | Qdrant server URL | http://localhost:6333 |
| `COLLECTION_NAME` | Qdrant collection | documents |
| `UPLOAD_DIR` | File storage directory | ./uploads |
| `MAX_FILE_SIZE` | Max upload size (bytes) | 10485760 |

## Development

```bash
# Run in development mode
npm run dev

# Run MCP server standalone
npm run mcp:dev

# Build TypeScript
npm run build
```

## Security Notes

āš ļø **Important for Production:**
- Change default `JWT_SECRET` and `ADMIN_PASSWORD`
- Use HTTPS in production
- Configure proper CORS settings
- Implement rate limiting
- Add file type restrictions
- Use environment-specific configs

## Troubleshooting

### Qdrant Connection Issues
- Ensure Qdrant is running: `docker ps`
- Check logs: `docker logs qdrant`
- Verify port 6333 is accessible

### MCP Server Not Connecting
- Check Claude Desktop logs
- Verify path in config is absolute
- Ensure Node.js is in PATH

### Upload Failures
- Check `MAX_FILE_SIZE` setting
- Verify `uploads` directory permissions
- Check available disk space

## License

MIT

## Contributing

Pull requests welcome! Please ensure:
- Code follows TypeScript best practices
- Tests pass (when implemented)
- Documentation is updated
- Security considerations addressed