Model Context Protocol server for Rosetta (Instruction Management System)
Project description
ims-mcp
Model Context Protocol (MCP) server for Rosetta (Enterprise Engineering Governance and Instructions Management System)
Powered by R2R technology for advanced RAG capabilities
This package provides a FastMCP server that connects to Rosetta servers for advanced retrieval-augmented generation (RAG) capabilities. It enables AI assistants like Claude Desktop, Cursor, and other MCP clients to search, retrieve, and manage documents in Rosetta knowledge bases.
Features
- 🔍 Semantic Search - Vector-based and full-text search across documents
- 🤖 RAG Queries - Retrieval-augmented generation with configurable LLM settings
- 📝 Document Management - Upload, update, list, and delete documents with upsert semantics
- 🏷️ Metadata Filtering - Advanced filtering by tags, domain, and custom metadata
- 🌐 Environment-Based Config - Zero configuration, reads from environment variables
- 📋 Bootstrap Instructions - Automatically includes PREP step instructions for LLMs on connection
- 📊 Usage Analytics - Built-in PostHog integration for tracking feature adoption (enabled by default, opt-out)
Installation
Using uvx (recommended)
The easiest way to use ims-mcp is with uvx, which automatically handles installation:
uvx ims-mcp
Using pip
Install globally or in a virtual environment:
pip install ims-mcp
Then run:
ims-mcp
As a Python Module
You can also run it as a module:
python -m ims_mcp
Configuration
The server automatically reads configuration from environment variables:
| Variable | Description | Default |
|---|---|---|
R2R_API_BASE or R2R_BASE_URL |
Rosetta server URL | http://localhost:7272 |
R2R_COLLECTION |
Collection name for queries | Server default |
R2R_API_KEY |
API key for authentication | None |
R2R_EMAIL |
Email for authentication (requires R2R_PASSWORD) | None |
R2R_PASSWORD |
Password for authentication (requires R2R_EMAIL) | None |
POSTHOG_API_KEY |
PostHog Project API key (format: phc_*, opt-in analytics) |
None (disabled) |
POSTHOG_HOST |
PostHog instance URL | https://us.i.posthog.com |
IMS_DEBUG |
Enable debug logging to stderr (1/true/yes/on) | None (disabled) |
Authentication Priority:
- If
R2R_API_KEYis set, it will be used - If
R2R_EMAILandR2R_PASSWORDare set, they will be used to login and obtain an access token - If neither is set, the client will attempt unauthenticated access (works for local servers)
Note: Environment variables use R2R_ prefix for compatibility with the underlying R2R SDK.
Usage with MCP Clients
Cursor IDE
Local server (no authentication):
Add to .cursor/mcp.json:
{
"mcpServers": {
"KnowledgeBase": {
"command": "uvx",
"args": ["ims-mcp@latest"],
"env": {
"R2R_API_BASE": "http://localhost:7272",
"R2R_COLLECTION": "aia-r1"
}
}
}
}
Remote server (with email/password authentication):
{
"mcpServers": {
"KnowledgeBase": {
"command": "uvx",
"args": ["ims-mcp@latest"],
"env": {
"R2R_API_BASE": "https://your-server.example.com/",
"R2R_COLLECTION": "your-collection",
"R2R_EMAIL": "your-email@example.com",
"R2R_PASSWORD": "your-password"
}
}
}
}
Claude Desktop
Add to Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"ims": {
"command": "uvx",
"args": ["ims-mcp@latest"],
"env": {
"R2R_API_BASE": "http://localhost:7272",
"R2R_COLLECTION": "my-collection"
}
}
}
}
Other MCP Clients
Any MCP client can use ims-mcp by specifying the command and environment variables:
{
"command": "uvx",
"args": ["ims-mcp@latest"],
"env": {
"R2R_API_BASE": "http://localhost:7272"
}
}
Available MCP Tools
1. search
Perform semantic and full-text search across documents.
Parameters:
query(str): Search queryfilters(dict, optional): Metadata filters (e.g.,{"tags": {"$in": ["agents"]}})limit(int, optional): Maximum resultsuse_semantic_search(bool, optional): Enable vector searchuse_fulltext_search(bool, optional): Enable full-text search
Example:
search("machine learning", filters={"tags": {"$in": ["research"]}}, limit=5)
2. rag
Retrieval-augmented generation with LLM.
Parameters:
query(str): Question to answerfilters(dict, optional): Metadata filterslimit(int, optional): Max search results to usemodel(str, optional): LLM model nametemperature(float, optional): Response randomness (0-1)max_tokens(int, optional): Max response length
Example:
rag("What is machine learning?", model="gpt-4", temperature=0.7)
3. put_document
Upload or update a document with upsert semantics.
Parameters:
content(str): Document text contenttitle(str): Document titlemetadata(dict, optional): Custom metadata (e.g.,{"tags": ["research"], "author": "John"})document_id(str, optional): Explicit document ID
Example:
put_document(
content="Machine learning is...",
title="ML Guide",
metadata={"tags": ["research", "ml"]}
)
4. list_documents
List documents with pagination and optional tag filtering.
Parameters:
offset(int, optional): Documents to skip (default: 0)limit(int, optional): Max documents (default: 100)document_ids(list[str], optional): Specific IDs to retrievecompact_view(bool, optional): Show only ID and title (default: True)tags(list[str], optional): Filter by tags (e.g.,["agents", "r1"])match_all_tags(bool, optional): If True, document must have ALL tags; if False (default), document must have ANY tag
Examples:
# List all documents (compact view - ID and title only)
list_documents(offset=0, limit=10)
# List with full details
list_documents(offset=0, limit=10, compact_view=False)
# Filter by tags (ANY mode - documents with "research" OR "ml")
list_documents(tags=["research", "ml"])
# Filter by tags (ALL mode - documents with both "research" AND "ml")
list_documents(tags=["research", "ml"], match_all_tags=True)
Note: Tag filtering is performed client-side after fetching results. For large collections with complex filtering needs, consider using the search() tool with metadata filters instead.
5. get_document
Retrieve a specific document by ID or title.
Parameters:
document_id(str, optional): Document IDtitle(str, optional): Document title
Example:
get_document(title="ML Guide")
6. delete_document
Delete a document by ID.
Parameters:
document_id(str, required): The unique identifier of the document to delete
Example:
delete_document(document_id="550e8400-e29b-41d4-a716-446655440000")
Returns:
- Success message with document ID on successful deletion
- Error message if document not found or permission denied
Metadata Filtering
All filter operators supported:
$eq: Equal$neq: Not equal$gt,$gte: Greater than (or equal)$lt,$lte: Less than (or equal)$in: In array$nin: Not in array$like,$ilike: Pattern matching (case-sensitive/insensitive)
Examples:
# Filter by tags
filters={"tags": {"$in": ["research", "ml"]}}
# Filter by domain
filters={"domain": {"$eq": "instructions"}}
# Combined filters
filters={"tags": {"$in": ["research"]}, "created_at": {"$gte": "2024-01-01"}}
Development
Local Installation
Install directly from PyPI:
pip install ims-mcp
Or for the latest development version, install from source if you have the code locally:
pip install -e .
Running Tests
pip install -e ".[dev]"
pytest
Building for Distribution
python -m build
Usage Analytics
Rosetta MCP includes built-in usage analytics via PostHog to help understand feature adoption and usage patterns.
Default Behavior
Published packages (from PyPI via CI/CD): Analytics are ENABLED BY DEFAULT with a built-in Project API Key (write-only, safe for client-side use). No configuration required.
Local development builds: Analytics are DISABLED (placeholder key remains in source code).
Disable Analytics
To disable analytics, set POSTHOG_API_KEY to an empty string in your MCP configuration:
{
"mcpServers": {
"KnowledgeBase": {
"command": "uvx",
"args": ["ims-mcp@latest"],
"env": {
"R2R_API_BASE": "https://your-server.com/",
"R2R_COLLECTION": "aia-r1",
"POSTHOG_API_KEY": ""
}
}
}
}
Use Custom PostHog Project
To track analytics in your own PostHog project, provide your Project API Key:
{
"mcpServers": {
"KnowledgeBase": {
"env": {
"POSTHOG_API_KEY": "phc_YOUR_CUSTOM_PROJECT_API_KEY",
"POSTHOG_HOST": "https://us.i.posthog.com"
}
}
}
}
Where to Find Your Project API Key:
- Log into PostHog dashboard
- Navigate to: Project Settings → Project API Key
- Copy the key (starts with
phc_)
Important: Use Project API Key (write-only, for event ingestion), not Personal API Key.
What's Tracked
User Context:
- Username (from
USER/USERNAME/LOGNAMEenvironment variables +whoamifallback) - Repository names (from MCP
roots/listprotocol request, comma-separated if multiple; fallback toclient_idparsing; 5-min cache) - MCP server identifier (
mcp_server: "Rosetta") and version (mcp_server_version: "1.0.30") - GeoIP enabled via
disable_geoip=Falsein client initialization (MCP runs locally on user's machine, IP is user's actual location)
Business Parameters (usage patterns):
query- Search queriesfilters,tags- Filter/tag usage patternstitle- Document title searchesdocument_id,document_ids- Document access patterns (kept for tracking)use_semantic_search,use_fulltext_search- Search method preferencesmatch_all_tags- Tag matching logic
Excluded (technical parameters):
limit,offset,page- Paginationcompact_view- View settingsmodel,temperature,max_tokens- RAG tuning parameters
Privacy & Control
- Opt-out: Analytics enabled by default with built-in key, easy to disable
- Write-only: Project API key can only send events, cannot read analytics data
- Non-blocking: Analytics never delays or breaks MCP tool responses
- User control: Set
POSTHOG_API_KEY=""to disable tracking anytime - Custom tracking: Use your own PostHog project by setting custom API key
Requirements
- Python >= 3.10
- Rosetta server running and accessible (powered by R2R Light)
- r2r Python SDK >= 3.6.0
- mcp >= 1.0.0
- posthog >= 7.0.0 (for built-in analytics)
License
MIT License - see LICENSE file for details
This package is built on R2R (RAG to Riches) technology by SciPhi AI, which is licensed under the MIT License. We gratefully acknowledge the R2R project and its contributors.
Links
- R2R Technology: https://github.com/SciPhi-AI/R2R
- Model Context Protocol: https://modelcontextprotocol.io/
- FastMCP: https://github.com/jlowin/fastmcp
Support
For issues and questions, visit the package page: https://pypi.org/project/ims-mcp/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ims_mcp-2.0.0b38.tar.gz.
File metadata
- Download URL: ims_mcp-2.0.0b38.tar.gz
- Upload date:
- Size: 55.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb31de0570a67896beacb28dd01712fdf058c8a02c13a8989fc084135699fc8e
|
|
| MD5 |
f8d298580558684eec8cb4fc443f9d6c
|
|
| BLAKE2b-256 |
5423a9b33376b34a44765208b57d975729e14746ff636ce1554a7005aafc752b
|
File details
Details for the file ims_mcp-2.0.0b38-py3-none-any.whl.
File metadata
- Download URL: ims_mcp-2.0.0b38-py3-none-any.whl
- Upload date:
- Size: 54.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
609d9640464b280cb94d6467fddefaab350b940e2005219faeca1d1ce91b21e1
|
|
| MD5 |
3909edb143fcc64092ea97600084741d
|
|
| BLAKE2b-256 |
7bcdcc6e96b84e7a2a7a4baceac51f09284e695b4d9384fac2aaae7330379576
|