README.md•9.81 kB
# Shutter MCP
A Model Context Protocol (MCP) server that provides timelock encryption capabilities using the Shutter Network. This server allows users to encrypt messages that can only be decrypted after a specified future time, enabling trustless time-delayed communications.
## Features
- Timelock Encryption: Encrypt messages that unlock at future timestamps
- Natural Language Time Parsing: Use expressions like "3 months from now"
- Unix Timestamp Support: Direct timestamp input for precise timing
- Claude Web, VS Code MCP Support
- Comprehensive Error Handling: User-friendly error messages and guidance
- Production Ready: Docker support, health checks, and monitoring
## Important Notice
**ALPHA SOFTWARE**: This is experimental software using the Shutter Network testnet deployment (Gnosis Chiado). Do not use for production or sensitive data. The encryption implementation is for demonstration purposes only.
**Current Limitations:**
- Demo encryption algorithm (not production-grade Shutter encryption)
- Testnet deployment (Chiado testnet only)
- No data persistence guarantees
- API may change without notice
## Live Deployment
**Server URL**: https://shutter-mcp-b76e270d48c5.herokuapp.com/
**Health Check**: https://shutter-mcp-b76e270d48c5.herokuapp.com/health
**MCP Endpoint**: https://shutter-mcp-b76e270d48c5.herokuapp.com/mcp
## Quick Start
### Claude Web Integration
1. Open Claude Web Settings
- Visit [claude.ai/settings](https://claude.ai/settings)
- Navigate to "Integrations" section
2. Add Custom Integration
- Click "Add custom integration"
- Enter URL: `https://shutter-mcp-b76e270d48c5.herokuapp.com/mcp`
- Click "Add"
3. Test the Integration
- Start a new conversation
- Try: "Encrypt this message to unlock in 3 months: Hello future!"
- Or: "Explain how timelock encryption works"
### VS Code MCP Integration
1. Install MCP Extension
- Open VS Code
- Install the "Model Context Protocol" extension
- Or install from marketplace: `ms-vscode.vscode-mcp`
2. Configure MCP Server
- Open VS Code settings (Ctrl+,)
- Search for "MCP"
- Add server configuration:
```json
{
"mcp.servers": {
"shutter-timelock": {
"url": "https://shutter-mcp-b76e270d48c5.herokuapp.com/mcp",
"name": "Shutter Timelock Encryption"
}
}
}
```
3. Test the Integration
- Open command palette (Ctrl+Shift+P)
- Type "MCP: Call Tool"
- Select "timelock_encrypt" and provide parameters
## Local Development Setup
If you want to run the server locally for development:
### Prerequisites
- Python 3.11 or higher
- pip (Python package manager)
### Installation
1. **Clone or download this repository**
```bash
git clone <your-repo-url>
cd shutter-mcp-server
```
2. **Run the deployment script**
```bash
./scripts/deploy.sh
```
3. **Start the server**
```bash
./scripts/start.sh
```
The server will be available at `http://localhost:5002` with the MCP endpoint at `http://localhost:5002/mcp`.
### Local Integration Setup
For local development, update your configurations to use:
- Claude Web: `http://localhost:5002/mcp`
- VS Code: `http://localhost:5002/mcp`
### Docker Deployment
```bash
# Build and run with Docker Compose
docker-compose up -d
# Or build and run manually
docker build -t shutter-mcp-server .
docker run -p 5002:5002 shutter-mcp-server
```
## Testing Examples
**Claude Web Test Commands:**
```
Encrypt this message to unlock in 1 hour: Secret meeting at 3pm
Check decryption status for identity: 0x1234...
Explain how timelock encryption works
```
**VS Code Test Commands:**
- Use MCP tools through the command palette
- Test timelock encryption with future timestamps
- Verify health endpoint responses
## Available Tools
### timelock_encrypt(message, unlock_time)
Encrypt a message with timelock encryption using Shutter Network.
**Parameters:**
- `message` (string): The text message to encrypt
- `unlock_time` (string): When the message can be decrypted
- Natural language: "3 months from now", "1 year from now"
- Unix timestamp: "1721905313"
- Absolute date: "2024-12-25", "January 15, 2025"
**Example:**
```
timelock_encrypt("Secret auction bid: $50,000", "2024-12-31 23:59:59")
```
### check_decryption_status(identity)
Check if a timelock encrypted message is ready for decryption.
**Parameters:**
- `identity` (string): The identity returned from `timelock_encrypt`
### decrypt_timelock_message(identity, encrypted_data)
Decrypt a timelock encrypted message if the timelock has expired.
**Parameters:**
- `identity` (string): The identity returned from `timelock_encrypt`
- `encrypted_data` (string): The encrypted data returned from `timelock_encrypt`
### get_unix_timestamp(time_expression)
Convert time expressions to Unix timestamps.
**Parameters:**
- `time_expression` (string): Time to convert (default: "now")
### explain_timelock_encryption()
Get comprehensive explanation of timelock encryption and usage.
## How Timelock Encryption Works
Timelock encryption allows you to encrypt a message that can only be decrypted after a specific time. The Shutter Network uses:
- Threshold Cryptography: Distributed key generation and management
- Decentralized Keypers: Network of nodes that collectively manage decryption keys
- Time-based Release: Keys are only released after the specified timestamp
- Trustless Operation: No single party can decrypt messages early
## Use Cases
- Sealed Bid Auctions: Hide bids until auction ends
- Time-delayed Announcements: Schedule future reveals
- Dead Man's Switch: Messages that unlock if you don't check in
- Contest Reveals: Hide answers until contest ends
- Future Communications: Send messages to your future self
## Configuration
### Environment Variables
- `PORT`: Server port (default: 5002)
- `SHUTTER_API_BASE`: Shutter API endpoint (default: Chiado testnet)
- `SHUTTER_REGISTRY_ADDRESS`: Registry contract address
### Custom Configuration
Edit `src/server.py` to modify:
- API endpoints
- Timeout values
- Error handling behavior
- Additional tools
## Testing
Run the example script to test functionality:
```bash
python examples/usage_example.py
```
Health check endpoint:
```bash
curl https://shutter-mcp-b76e270d48c5.herokuapp.com/health
```
Local testing:
```bash
curl http://localhost:5002/health
```
## Project Structure
```
shutter-mcp-server/
├── src/
│ └── server.py # Main server implementation
├── scripts/
│ ├── deploy.sh # Deployment script
│ └── start.sh # Start script
├── examples/
│ └── usage_example.py # Usage examples
├── docs/
│ └── API.md # API documentation
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yml # Docker Compose configuration
├── Procfile # Heroku process configuration
├── deploy-heroku.ps1 # PowerShell deployment script
└── README.md # This file
```
## Security Considerations
**IMPORTANT: This is alpha software with significant limitations:**
- **Demo Implementation**: Current encryption is for demonstration purposes only
- **Testnet Only**: Uses Chiado testnet - not suitable for production data
- **No Production Encryption**: Does not implement full Shutter encryption algorithms yet
- **Experimental Status**: API and functionality may change without notice
- **No Data Guarantees**: No persistence or availability guarantees
**For Production Use:**
- Implement proper Shutter encryption algorithms
- Use mainnet deployment when available
- Add authentication and access controls
- Implement proper key management
- Use HTTPS in production deployments
## Troubleshooting
### Server Won't Start
- Check Python version (3.11+ required)
- Verify all dependencies are installed: `pip install -r requirements.txt`
- Check port availability: `lsof -i :5002` (Linux/Mac) or `netstat -an | findstr :5002` (Windows)
### Claude Integration Issues
- Ensure server is accessible from the internet
- Verify MCP endpoint returns proper responses: `curl https://shutter-mcp-b76e270d48c5.herokuapp.com/mcp`
- Check CORS configuration for cross-origin requests
### VS Code Integration Issues
- Verify MCP extension is installed and enabled
- Check server configuration in VS Code settings
- Use local server for development: `http://localhost:5002/mcp`
### Shutter API Errors
- Verify internet connectivity
- Check Shutter Network status
- Ensure timestamps are in the future
## Development
### Adding New Tools
1. Define the tool function with `@mcp.tool()` decorator
2. Add comprehensive docstring with parameter descriptions
3. Include proper error handling and user guidance
4. Test with the example script
### Modifying Time Parsing
Edit the `parse_time_expression` method in the `ShutterTimelock` class to support additional time formats.
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests and documentation
5. Submit a pull request
## License
MIT License - see LICENSE file for details.
## Acknowledgments
- [Shutter Network](https://shutter.network/) for timelock encryption infrastructure
- [Model Context Protocol](https://modelcontextprotocol.io/) for the integration framework
- [FastAPI](https://fastapi.tiangolo.com/) for the web framework
## Support
- Issues: Open a GitHub issue
- Documentation: See `docs/` directory
- Examples: Check `examples/` directory
---
**Version**: 2.1.0
**Last Updated**: August 2025
**Compatibility**: Claude Web, VS Code MCP, MCP Protocol 2024-11-05