by sergehuber
Enables Claude to maintain user context by interfacing with Apache Unomi for profile lookup, creation, property updates, and scoped session handling through a Model Context Protocol server.
A Model Context Protocol server that bridges Claude (or any MCP‑compatible AI) with an Apache Unomi Customer Data Platform. It automatically looks up or creates user profiles based on email, manages profile properties, scopes, and date‑based sessions, allowing AI agents to retain personalized context across conversations.
claude_desktop_config.json
pointing to the MCP server via NPX.get_my_profile
, update_my_profile
, etc.).claude-desktop
scope plus custom scope creation[profileId]-YYYYMMDD
Q: Do I need an existing Unomi server? A: Yes. The MCP server only acts as a thin layer; it requires a running Apache Unomi instance.
Q: What authentication is used?
A: Basic auth (username/password) plus the Unomi cluster key (UNOMI_KEY
) for protected events.
Q: Can I use a profile ID instead of email?
A: Yes. If UNOMI_EMAIL
is not set or lookup fails, the server falls back to UNOMI_PROFILE_ID
.
Q: How are sessions identified?
A: Sessions are generated automatically per profile per day (profileId-YYYYMMDD
). Only one session per day is created.
Q: Is this production‑ready? A: The repository is labeled as an early implementation for demonstration and learning; it is not validated for production use.
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
This implementation provides:
Other Unomi features (events, segments, session properties, etc.) are not currently implemented. Community feedback welcome on future development priorities.
Watch how the MCP server enables Claude to maintain context and manage user profiles:
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": "npx",
"args": ["@inoyu/mcp-unomi-server"],
"env": {
"UNOMI_BASE_URL": "http://your-unomi-server:8181",
"UNOMI_USERNAME": "your-username", // by default Apache Unomi uses karaf
"UNOMI_PASSWORD": "your-password", // by default Apache Unomi uses karaf
"UNOMI_PROFILE_ID": "your-profile-id",
"UNOMI_KEY": "your-unomi-key", // by default Apache Unomi uses 670c26d1cc413346c3b2fd9ce65dab41
"UNOMI_EMAIL": "your-email@example.com",
"UNOMI_SOURCE_ID": "claude-desktop"
}
}
}
}
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.
Make sure to restart Claude Desktop after updating the configuration. You can then click on the tools icon on the lower right of the chat window to make sure it has found all the tools provided by this server.
get_my_profile
- Get your profile using environment variables
update_my_profile
- Update properties of your profile
{
"properties": {
"firstName": "John",
"age": 30,
"isSubscribed": true,
"oldProperty": null
}
}
get_profile
- Retrieve a specific profile by ID
search_profiles
- Search for profiles
create_scope
- Create a new Unomi scope
{
"scope": "my-app",
"name": "My Application",
"description": "Scope for my application events"
}
The server automatically manages scopes for you:
Default Scope:
claude-desktop
is used for all operationsCustom Scopes:
create_scope
toolAutomatic Scope Creation:
Note: While scopes are created automatically when needed, you can still create them manually with custom names and descriptions using the
create_scope
tool.
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:
User Recognition:
Context Management:
Integration Features:
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-email
The server uses a two-step process to resolve the profile ID:
Email Lookup (if UNOMI_EMAIL
is set):
Fallback Profile ID:
UNOMI_EMAIL
is not setUNOMI_PROFILE_ID
from environmentThe response will indicate which method was used via the source
field:
"email_lookup"
: Profile found via email"environment"
: Using fallback profile IDConfigure 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-ip
Ensure 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.
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-email
The server uses a two-step process to resolve the profile ID:
Email Lookup (if UNOMI_EMAIL
is set):
Fallback Profile ID:
UNOMI_EMAIL
is not setUNOMI_PROFILE_ID
from environmentThe response will indicate which method was used via the source
field:
"email_lookup"
: Profile found via email"environment"
: Using fallback profile IDConfigure 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-ip
Ensure 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.
Install dependencies:
npm install
Build the server:
npm run build
For development with auto-rebuild:
npm run watch
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 inspector
The 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*.log
When using get_my_profile
, the session ID is automatically generated using the format:
[profileId]-YYYYMMDD
For example, if your profile ID is "user123" and today is March 15, 2024, the session ID would be:
user123-20240315
Protected Events Failing
Profile Not Found
Session Issues
profileId-YYYYMMDD
Connection Problems
Claude Desktop Logs:
# MacOS
~/Library/Logs/Claude/mcp*.log
# Windows
%APPDATA%\Claude\mcp*.log
Unomi Server Logs:
# Usually in
$UNOMI_HOME/logs/karaf.log
Reset State:
# Stop Claude Desktop
# Clear logs
rm ~/Library/Logs/Claude/mcp*.log
# Restart Claude Desktop
Verify 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
Create or edit your Claude Desktop configuration:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%/Claude/claude_desktop_config.json
Add the server configuration using NPX:
{
"mcpServers": {
"unomi-server": {
"command": "npx",
"args": ["@inoyu/mcp-unomi-server"],
"env": {
"UNOMI_BASE_URL": "http://your-unomi-server:8181",
"UNOMI_USERNAME": "your-username",
"UNOMI_PASSWORD": "your-password",
"UNOMI_PROFILE_ID": "your-profile-id",
"UNOMI_KEY": "your-unomi-key",
"UNOMI_EMAIL": "your-email@example.com",
"UNOMI_SOURCE_ID": "claude-desktop"
}
}
}
}
Note: Using NPX ensures you're always running the latest published version of the server.
Alternatively, if you want to use a specific version:
{
"mcpServers": {
"unomi-server": {
"command": "npx",
"args": ["@inoyu/mcp-unomi-server@0.1.0"],
"env": {
// ... environment variables ...
}
}
}
}
For development or local installations:
{
"mcpServers": {
"unomi-server": {
"command": "node",
"args": ["/path/to/local/mcp-unomi-server/build/index.js"],
"env": {
// ... environment variables ...
}
}
}
}
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "unomi-server": { "command": "npx", "args": [ "@inoyu/mcp-unomi-server" ], "env": { "UNOMI_BASE_URL": "http://your-unomi-server:8181", "UNOMI_USERNAME": "your-username", "UNOMI_PASSWORD": "your-password", "UNOMI_PROFILE_ID": "your-profile-id", "UNOMI_KEY": "your-unomi-key", "UNOMI_EMAIL": "your-email@example.com", "UNOMI_SOURCE_ID": "claude-desktop" } } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by modelcontextprotocol
A basic implementation of persistent memory using a local knowledge graph. This lets Claude remember information about the user across chats.
by topoteretes
Provides dynamic memory for AI agents through modular ECL (Extract, Cognify, Load) pipelines, enabling seamless integration with graph and vector stores using minimal code.
by basicmachines-co
Enables persistent, local‑first knowledge management by allowing LLMs to read and write Markdown files during natural conversations, building a traversable knowledge graph that stays under the user’s control.
by smithery-ai
Provides read and search capabilities for Markdown notes in an Obsidian vault for Claude Desktop and other MCP clients.
by chatmcp
Summarize chat messages by querying a local chat database and returning concise overviews.
by dmayboroda
Provides on‑premises conversational retrieval‑augmented generation (RAG) with configurable Docker containers, supporting fully local execution, ChatGPT‑based custom GPTs, and Anthropic Claude integration.
by GreatScottyMac
Provides a project‑specific memory bank that stores decisions, progress, architecture, and custom data, exposing a structured knowledge graph via MCP for AI assistants and IDE tools.
by andrea9293
Provides document management and AI-powered semantic search for storing, retrieving, and querying text, markdown, and PDF files locally without external databases.
by scorzeth
Provides a local MCP server that interfaces with a running Anki instance to retrieve, create, and update flashcards through standard MCP calls.