Mural MCP Server
# Mural MCP Server
[](https://badge.fury.io/js/mural-mcp)
[](https://opensource.org/licenses/MIT)
A Model Context Protocol (MCP) server that provides integration with the Mural visual collaboration platform. This server enables AI assistants to interact with Mural workspaces through OAuth 2.0 authentication.
> **Note**: This is v0.0.1 - an early MVP release focused on workspace listing functionality. More features are planned for future releases.
## Features
- **OAuth 2.0 Authentication**: Secure authentication with PKCE support
- **Workspace Management**: List and retrieve workspace information
- **MCP Compliance**: Full Model Context Protocol compatibility
- **Token Management**: Automatic token refresh and secure storage
## Tools Available
- `list-workspaces`: List all workspaces the authenticated user has access to
- `get-workspace`: Get detailed information about a specific workspace
- `test-connection`: Test the connection to Mural API and verify authentication
- `clear-auth`: Clear stored authentication tokens
## Prerequisites
1. **Node.js**: Version 18 or higher
2. **Mural Account**: Access to Mural with workspace permissions
3. **Mural OAuth App**: Register an app at [Mural Developer Portal](https://app.mural.co/developer)
## Installation
### Option 1: Install from npm (Recommended)
```bash
npm install -g mural-mcp
# or
pnpm add -g mural-mcp
```
### Option 2: Install from source
1. Clone and install dependencies:
```bash
git clone https://github.com/your-username/mural-mcp.git
cd mural-mcp
pnpm install
```
2. Build the project:
```bash
pnpm run build
```
## Setup
1. Set up environment variables:
```bash
cp .env.example .env
# Edit .env with your Mural OAuth credentials
```
## Configuration
### Environment Variables
Create a `.env` file with the following variables:
```bash
# Required: Your Mural app's client ID
MURAL_CLIENT_ID=your_client_id_here
# Optional: Your Mural app's client secret (recommended)
MURAL_CLIENT_SECRET=your_client_secret_here
# Optional: OAuth redirect URI (defaults to http://localhost:3000/callback)
MURAL_REDIRECT_URI=http://localhost:3000/callback
```
### Mural OAuth App Setup
1. Visit [Mural Developer Portal](https://app.mural.co/developer)
2. Create a new application
3. Set the redirect URI to `http://localhost:3000/callback` (or your custom URI)
4. Note your Client ID and Client Secret
5. Configure the required scopes: `workspaces:read`
## Usage
### With Claude Desktop
Add to your Claude Desktop configuration (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"mural": {
"command": "node",
"args": ["/absolute/path/to/mural-mcp/build/index.js"],
"env": {
"MURAL_CLIENT_ID": "your_client_id_here",
"MURAL_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
```
### Standalone Usage
Run the server directly:
```bash
# Set environment variables
export MURAL_CLIENT_ID=your_client_id_here
export MURAL_CLIENT_SECRET=your_client_secret_here
# Start the server
pnpm start
```
### Development
For development with hot reloading:
```bash
pnpm run dev
```
## Authentication Flow
1. **First Run**: The server will open a browser window for OAuth authentication
2. **Login**: Complete the OAuth flow in your browser
3. **Token Storage**: Tokens are securely stored locally in `~/.mural-mcp-tokens.json`
4. **Auto-Refresh**: Access tokens are automatically refreshed when needed
## API Endpoints Used
- **Authorization**: `https://app.mural.co/api/public/v1/authorization/oauth2/`
- **Token Exchange**: `https://app.mural.co/api/public/v1/authorization/oauth2/token`
- **Workspaces**: `https://app.mural.co/api/public/v1/workspaces`
## Example Usage
Once configured, you can use the tools through your MCP client:
```
Human: List my Mural workspaces
Assistant: I'll list your Mural workspaces using the list-workspaces tool.
[Tool executes and returns workspace data]
```
## Security Considerations
- **PKCE**: Uses Proof Key for Code Exchange for enhanced OAuth security
- **Token Storage**: Tokens are stored locally in the user's home directory
- **HTTPS**: All API communications use HTTPS
- **Scope Limitation**: Requests only necessary OAuth scopes
## Troubleshooting
### Authentication Issues
1. **Token Expired**: Use the `clear-auth` tool to clear tokens and re-authenticate
2. **Invalid Client ID**: Verify your `MURAL_CLIENT_ID` in the environment variables
3. **Redirect URI Mismatch**: Ensure the redirect URI matches your Mural app configuration
### Connection Issues
1. **Network**: Ensure you can reach `https://app.mural.co`
2. **Firewall**: Port 3000 must be available for OAuth callback
3. **Test Connection**: Use the `test-connection` tool to verify API access
### Common Error Messages
- `Missing required environment variable: MURAL_CLIENT_ID`: Set the required environment variable
- `OAuth token exchange failed`: Check your client credentials and redirect URI
- `Mural API request failed: HTTP 401`: Token expired or invalid, clear auth and re-authenticate
- `Mural API request failed: HTTP 403`: Insufficient permissions or invalid scope
## Development
### Project Structure
```
mural-mcp/
├── src/
│ ├── index.ts # Main MCP server
│ ├── oauth.ts # OAuth 2.0 implementation
│ ├── mural-client.ts # Mural API client
│ └── types.ts # TypeScript interfaces
├── build/ # Compiled output
├── spec/ # Documentation
└── package.json
```
### Building
```bash
# Clean build
rm -rf build && pnpm run build
# Development build with watch
pnpm run dev
```
### Testing
Test the server manually:
```bash
# Build and run
pnpm run build
node build/index.js
# In another terminal, test with MCP inspector
npx @modelcontextprotocol/inspector node build/index.js
```
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## License
MIT License - see LICENSE file for details
## Support
For issues and questions:
- Check the troubleshooting section above
- Review Mural API documentation
- Create an issue in the repositoryTDQS
Scored across 15 tools
Most tools have distinct purposes, but there is some overlap between 'list-room-boards' and 'list-workspace-boards' that could cause confusion about which to use for listing murals in a specific context. Additionally, 'debug-api-response' and 'test-connection' both serve troubleshooting roles, though their descriptions help differentiate them.
The naming follows a consistent verb-noun pattern with hyphens (e.g., 'get-board', 'list-workspaces'), but there are minor deviations like 'check-user-scopes' (which uses 'check' instead of 'get') and 'debug-api-response' (which includes 'api' in the noun). Overall, the pattern is clear and mostly uniform.
With 15 tools, this server is well-scoped for managing Mural resources such as workspaces, boards, and widgets. Each tool appears to serve a specific function in the domain, and the count aligns with typical MCP servers, providing comprehensive coverage without being overwhelming.
The toolset covers core CRUD operations for murals, widgets, and workspaces, including listing, getting, creating, updating, and deleting. However, there are minor gaps, such as no tool for creating or updating boards/murals directly, and limited widget management beyond sticky notes (e.g., no general widget creation or other types).