@inoyu/mcp-unomi-server v0.1.0
Inoyu Apache Unomi MCP Server
A Model Context Protocol server enabling Claude to maintain user context through Apache Unomi profile management.
⚠️ Early Implementation Notice
This is an early implementation intended for demonstration purposes:
- Not validated for production use
- Subject to changes
- Not (yet) officially supported
- For learning and experimentation only
Current Scope
This implementation provides:
- Profile lookup and creation using email
- Profile property management
- Basic session handling
- Scope management for context isolation
Other Unomi features (events, segments, session properties, etc.) are not currently implemented. Community feedback welcome on future development priorities.
Demo
Watch how the MCP server enables Claude to maintain context and manage user profiles:
Features
Profile Access
- Email-based profile lookup with automatic creation
- Profile properties, segments, and scores access
- JSON format for all data exchange
- Automatic session management with date-based IDs
Tools
get_my_profile- Get your profile using environment variables- Uses UNOMI_PROFILE_ID from environment or email lookup
- Automatically generates a session ID based on the current date
- Optional parameters:
- requireSegments: Include segment information
- requireScores: Include scoring information
update_my_profile- Update properties of your profile- Uses UNOMI_PROFILE_ID from environment or email lookup
- Takes a properties object with key-value pairs to update
- Supports string, number, boolean, and null values
- Example:
{ "properties": { "firstName": "John", "age": 30, "isSubscribed": true, "oldProperty": null } }
get_profile- Retrieve a specific profile by ID- Takes profileId as required parameter
- Returns full profile data from Unomi
search_profiles- Search for profiles- Takes query string and optional limit/offset parameters
- Searches across firstName, lastName, and email fields
create_scope- Create a new Unomi scope- Takes scope identifier and optional name/description
- Required for event tracking and profile updates
- Example:
{ "scope": "my-app", "name": "My Application", "description": "Scope for my application events" }
Scope Management
The server automatically manages scopes for you:
Default Scope:
- A default scope
claude-desktopis used for all operations - Created automatically when needed
- Used for profile updates and event tracking
- A default scope
Custom Scopes:
- Can be created using the
create_scopetool - Useful for separating different applications or contexts
- Must exist before using in profile operations
- Can be created using the
Automatic Scope Creation:
- The server checks if required scopes exist
- Creates them automatically if missing
- Uses meaningful defaults for scope metadata
Note: While scopes are created automatically when needed, you can still create them manually with custom names and descriptions using the
create_scopetool.
Overview
This MCP server enables Claude to maintain context about users through Apache Unomi's profile management system. Here's what you can achieve with it:
Key Capabilities
User Recognition:
- Identify users across conversations using email or profile ID
- Maintain consistent user context between sessions
- Automatically create and manage user profiles
Context Management:
- Store and retrieve user preferences
Integration Features:
- Seamless Claude Desktop integration
- Automatic session management
- Scope-based context isolation
What You Can Do
- Have Claude remember user preferences across conversations
- Store and retrieve user-specific information
- Maintain consistent user context
- Manage multiple users through email identification
Prerequisites
- Running Apache Unomi server
- Claude Desktop installation
- Network access to Unomi server
- Proper security configuration
- Required environment variables
Configuration
Environment Variables
The server requires the following environment variables:
UNOMI_BASE_URL=http://your-unomi-server:8181
UNOMI_USERNAME=your-username
UNOMI_PASSWORD=your-password
UNOMI_PROFILE_ID=your-profile-id
UNOMI_SOURCE_ID=your-source-id
UNOMI_KEY=your-unomi-key
UNOMI_EMAIL=your-emailProfile Resolution
The server uses a two-step process to resolve the profile ID:
Email Lookup (if
UNOMI_EMAILis set):- Searches for a profile with matching email
- If found, uses that profile's ID
- Useful for maintaining consistent profile across sessions
Fallback Profile ID:
- If email lookup fails or
UNOMI_EMAILis not set - Uses the
UNOMI_PROFILE_IDfrom environment - Ensures a profile is always available
- If email lookup fails or
The response will indicate which method was used via the source field:
"email_lookup": Profile found via email"environment": Using fallback profile ID
Unomi Server Configuration
Configure protected events in
etc/org.apache.unomi.cluster.cfg:# Required for protected events like property updates org.apache.unomi.cluster.authorization.key=your-unomi-key # Required to allow Claude Desktop to access Unomi # Replace your-claude-desktop-ip with your actual IP org.apache.unomi.ip.ranges=127.0.0.1,::1,your-claude-desktop-ipEnsure your Unomi server has CORS properly configured in
etc/org.apache.unomi.cors.cfg:# Add your Claude Desktop origin if needed org.apache.unomi.cors.allowed.origins=http://localhost:*Restart Unomi server to apply changes
Important: The Unomi key must match exactly between your server configuration and the UNOMI_KEY environment variable in Claude Desktop.
Development
Install dependencies:
npm installBuild the server:
npm run buildFor development with auto-rebuild:
npm run watchInstallation
Option 1: Using NPX (Recommended)
You can run the server directly using NPX:
npx @inoyu/mcp-unomi-serverOr install it globally:
npm install -g @inoyu/mcp-unomi-server
mcp-unomi-serverOption 2: Manual Installation
Clone the repository:
git clone [repository-url] cd mcp-unomi-serverInstall dependencies:
npm installBuild the server:
npm run build
Configuration
Environment Variables
The server requires the following environment variables:
UNOMI_BASE_URL=http://your-unomi-server:8181
UNOMI_USERNAME=your-username
UNOMI_PASSWORD=your-password
UNOMI_PROFILE_ID=your-profile-id
UNOMI_SOURCE_ID=your-source-id
UNOMI_KEY=your-unomi-key
UNOMI_EMAIL=your-emailProfile Resolution
The server uses a two-step process to resolve the profile ID:
Email Lookup (if
UNOMI_EMAILis set):- Searches for a profile with matching email
- If found, uses that profile's ID
- Useful for maintaining consistent profile across sessions
Fallback Profile ID:
- If email lookup fails or
UNOMI_EMAILis not set - Uses the
UNOMI_PROFILE_IDfrom environment - Ensures a profile is always available
- If email lookup fails or
The response will indicate which method was used via the source field:
"email_lookup": Profile found via email"environment": Using fallback profile ID
Unomi Server Configuration
Configure protected events in
etc/org.apache.unomi.cluster.cfg:# Required for protected events like property updates org.apache.unomi.cluster.authorization.key=your-unomi-key # Required to allow Claude Desktop to access Unomi # Replace your-claude-desktop-ip with your actual IP org.apache.unomi.ip.ranges=127.0.0.1,::1,your-claude-desktop-ipEnsure your Unomi server has CORS properly configured in
etc/org.apache.unomi.cors.cfg:# Add your Claude Desktop origin if needed org.apache.unomi.cors.allowed.origins=http://localhost:*Restart Unomi server to apply changes
Important: The Unomi key must match exactly between your server configuration and the UNOMI_KEY environment variable in Claude Desktop.
Development
Install dependencies:
npm installBuild the server:
npm run buildFor development with auto-rebuild:
npm run watchInstallation
To use with Claude Desktop, add the server config and environment variables:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"unomi-server": {
"command": "/path/to/unomi-server/build/index.js",
"env": {
"UNOMI_BASE_URL": "http://your-unomi-server:8181",
"UNOMI_USERNAME": "your-username",
"UNOMI_PASSWORD": "your-password",
"UNOMI_PROFILE_ID": "your-profile-id",
"UNOMI_SOURCE_ID": "claude-desktop",
"UNOMI_KEY": "your-unomi-key",
"UNOMI_EMAIL": "your-email@example.com"
}
}
}
}The env section in the configuration allows you to set the required environment variables for the server. Replace the values with your actual Unomi server details.
Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspectorThe Inspector will provide a URL to access debugging tools in your browser.
You can also tail the Claude Desktop logs to see MCP requests and responses:
# Follow logs in real-time
tail -n 20 -f ~/Library/Logs/Claude/mcp*.logSession ID Format
When using get_my_profile, the session ID is automatically generated using the format:
[profileId]-YYYYMMDDFor example, if your profile ID is "user123" and today is March 15, 2024, the session ID would be:
user123-20240315Troubleshooting
Common Issues
Protected Events Failing
- Verify Unomi key matches exactly in both configurations
- Check IP address is correctly whitelisted
- Ensure scope exists before updating properties
- Verify CORS configuration if needed
Profile Not Found
- Check if UNOMI_EMAIL is correctly set
- Verify email format is valid
- Ensure profile exists in Unomi
- Check if fallback UNOMI_PROFILE_ID is valid
Session Issues
- Remember sessions are date-based
- Only one session per profile per day
- Check session ID format matches
profileId-YYYYMMDD - Verify scope exists for session
Connection Problems
- Verify Unomi server is running
- Check network connectivity
- Ensure UNOMI_BASE_URL is correct
- Verify authentication credentials
Logs to Check
Claude Desktop Logs:
# MacOS ~/Library/Logs/Claude/mcp*.log # Windows %APPDATA%\Claude\mcp*.logUnomi Server Logs:
# Usually in $UNOMI_HOME/logs/karaf.log
Quick Fixes
Reset State:
# Stop Claude Desktop # Clear logs rm ~/Library/Logs/Claude/mcp*.log # Restart Claude DesktopVerify Configuration:
# Check Unomi connection curl -u username:password http://your-unomi-server:8181/cxs/cluster # Test scope exists curl -u username:password http://your-unomi-server:8181/cxs/scopes/claude-desktop
1 year ago
