EventHorizon MCP Server
# EventHorizon MCP Server
A Model Context Protocol (MCP) server for integrating with the EventHorizon Django event management platform.
## Installation
### From GitHub (Recommended)
Run directly using npx without cloning:
```bash
npx github:NotoriousArnav/EventHorizon-MCP
```
### From Source
```bash
git clone https://github.com/NotoriousArnav/EventHorizon-MCP.git
cd EventHorizon-MCP
npm install
npm run build
```
## Configuration
### Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `EVENTHORIZON_BASE_URL` | Yes | `http://localhost:8000` | EventHorizon API URL |
| `EVENTHORIZON_API_TOKEN` | Yes | - | Knox authentication token |
| `LOG_LEVEL` | No | `info` | `debug`, `info`, `warn`, `error` |
| `API_TIMEOUT` | No | `30000` | Request timeout in ms |
### Getting a Knox Token
1. Log into your EventHorizon Django instance
2. Go to Django Admin > Knox Tokens > Add Token
3. Or use the API: `POST /api/auth/login/` with credentials
## MCP Client Setup
### Claude Desktop
Add to `~/.config/claude/claude_desktop_config.json` (Linux) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
```json
{
"mcpServers": {
"eventhorizon": {
"command": "npx",
"args": ["-y", "github:NotoriousArnav/EventHorizon-MCP"],
"env": {
"EVENTHORIZON_BASE_URL": "http://localhost:8000",
"EVENTHORIZON_API_TOKEN": "your_knox_token_here"
}
}
}
}
```
### OpenCode
Add to your OpenCode MCP config (`~/.config/opencode/config.json`):
```json
{
"mcp": {
"servers": {
"eventhorizon": {
"type": "local",
"command": ["npx", "-y", "github:NotoriousArnav/EventHorizon-MCP"],
"env": {
"EVENTHORIZON_BASE_URL": "http://localhost:8000",
"EVENTHORIZON_API_TOKEN": "your_knox_token_here"
}
}
}
}
}
```
### Cursor
Add to Cursor's MCP settings:
```json
{
"mcpServers": {
"eventhorizon": {
"command": "npx",
"args": ["-y", "github:NotoriousArnav/EventHorizon-MCP"],
"env": {
"EVENTHORIZON_BASE_URL": "http://localhost:8000",
"EVENTHORIZON_API_TOKEN": "your_knox_token_here"
}
}
}
}
```
### Local Development
If running from source:
```json
{
"mcpServers": {
"eventhorizon": {
"command": "node",
"args": ["/absolute/path/to/EventHorizon-MCP/dist/index.js"],
"env": {
"EVENTHORIZON_BASE_URL": "http://localhost:8000",
"EVENTHORIZON_API_TOKEN": "your_knox_token_here"
}
}
}
}
```
## Available Tools
### Event Management
| Tool | Description |
|------|-------------|
| `list_events` | List events with optional search/location filters |
| `get_event` | Get detailed event information by ID |
| `create_event` | Create a new event |
| `update_event` | Update an existing event |
| `delete_event` | Delete an event (organizer only) |
### Registration
| Tool | Description |
|------|-------------|
| `register_for_event` | Register for an event |
| `unregister_from_event` | Cancel registration |
| `get_event_registrations` | View registrations (organizer only) |
| `manage_registration` | Approve/waitlist/cancel registration |
### User
| Tool | Description |
|------|-------------|
| `get_my_profile` | Get current user profile |
| `get_my_registrations` | List your event registrations |
| `get_my_hosted_events` | List events you organize |
### Utility
| Tool | Description |
|------|-------------|
| `health_check` | Test API connection and auth |
## Development
```bash
# Install dependencies
npm install
# Run in development mode (hot reload)
npm run dev
# Build for production
npm run build
# Run production build
npm start
# Run tests
npm test
```
## Testing Without an MCP Client
Use the MCP Inspector:
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
Or send raw JSON-RPC:
```bash
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | node dist/index.js
```
## Requirements
- Node.js 18+
- EventHorizon Django instance with Knox authentication enabled
## License
MIT
TDQS
Scored across 13 tools
Every tool has a clearly distinct purpose with no overlap. For example, get_event retrieves event details while get_event_registrations focuses on attendee data, and tools like register_for_event and unregister_from_event are precise opposites. The descriptions reinforce these distinctions, making misselection unlikely.
All tools follow a consistent verb_noun pattern using snake_case, such as create_event, list_events, and get_my_profile. The naming is predictable and readable throughout, with no deviations in style or convention, which aids agent comprehension.
With 13 tools, the count is well-scoped for an event management domain, covering core operations like CRUD for events, registration handling, and user-specific queries. Each tool earns its place without redundancy, fitting typical server scope expectations.
The toolset provides complete coverage for event management, including full CRUD for events (create, get, update, delete), registration lifecycle (register, unregister, manage), and user-specific views (hosted events, registrations, profile). There are no obvious gaps, ensuring agents can handle end-to-end workflows without dead ends.