Skip to main content
Glama
README.md
# Mobi MCP Server
This is a Model Context Protocol server that will allow agentic interfacing with a given instance of 
[Mobi](https://mobi.solutions/) ([GitHub](https://github.com/inovexcorp/mobi)).

<img src="./logo.png" alt="mobi-mcp-logo" style="width: 80px;" />

## Prerequisites
- Python 3.10 or higher (required for MCP package)
- A running Mobi instance

Model Context Protocol (MCP) is a standardized communication protocol that enables AI models to interact with external
tools and services. When integrated with Mobi, MCP provides several key benefits:

- Seamless interaction between AI models and Mobi's functionality
- Structured data exchange and command execution
- Real-time updates and bidirectional communication
- Enhanced automation capabilities through standardized interfaces
- Platform-agnostic integration with various AI models and services

## Installation

1. **Clone the repository:**
   ```bash
   git clone <repository-url>
   cd mobi-mcp
   ```

2. **Create a Python virtual environment:**
   ```bash
   python3.12 -m venv .venv
   ```
   
   Note: If you don't have Python 3.10+, install it first:
   - macOS: `brew install python@3.12`

3. **Activate the virtual environment:**
   - macOS/Linux: `source .venv/bin/activate`

4. **Install dependencies:**
   ```bash
   pip install -r requirements.txt
   ```

## Leveraging the MCP Server
The easiest way to quickly try this is to hook the MCP server into [Claude Desktop](https://claude.ai/download) and then
configure the application to use your MCP server by modifying the 
`~/Library/Application\ Support/Claude/claude_desktop_config.json` file with a JSON snippet like this:

```json
{
  "mcpServers": {
    "mobi": {
      "command": "/Users/{username}/git/mobi-mcp/.venv/bin/python",
      "args": ["/Users/{username}/git/mobi-mcp/src/mobi-mcp.py"],
      "env": {
        "MOBI_BASE_URL": "https://localhost:8443",
        "MOBI_USERNAME": "admin",
        "MOBI_PASSWORD": "admin",
        "MOBI_IGNORE_CERT": "true"
      }
    }
  }
}
```
**-- Note: You'll have to adjust the paths as absolute paths are required :)**

Claude Desktop leverages the stdio MCP transport, but this server also supports SSE as well (you can run the `mobi-mcp`
python script with the argument `--sse`).

This also assumes that you are running an instance of Mobi as well. If you want to try and run one locally,
see instructions [HERE](https://inovexcorp.github.io/mobi-docs/latest/index.html#installing_the_docker_image).

## Configuration

The MCP server requires the following environment variables:

- `MOBI_BASE_URL`: The base URL of your Mobi instance (e.g., `https://localhost:8443`)
- `MOBI_USERNAME`: Username for Mobi authentication
- `MOBI_PASSWORD`: Password for Mobi authentication
- `MOBI_IGNORE_CERT`: Set to `"true"` to ignore SSL certificate verification (useful for self-signed certificates)

## Repository Structure
The repository is organized to maintain a clean separation between the Mobi API interaction layer and the MCP protocol
implementation:

- **`src/mobi.py`** - Contains the core Mobi API client functionality, handling authentication, API calls, and data processing
- **`src/mobi-mcp.py`** - The main MCP server implementation that bridges Mobi functionality with the Model Context Protocol
- **`Dockerfile`** - Enables containerized deployment of the MCP server
- **`Makefile`** - Provides convenient commands for environment setup and container management
- **`requirements.txt`** - Lists all Python package dependencies needed for the project



## Current Tools
The Mobi MCP Server exposes the following tools for interacting with your Mobi instance:

### Search and Discovery Tools

#### `record_search`
Search the Mobi catalog for records matching specified criteria.
- **Parameters:**
  - `offset` (int): Starting index for pagination
  - `limit` (int): Maximum number of records to retrieve
  - `search_text` (str, optional): Text to search for in records
  - `keywords` (list[str], optional): Keywords to match against records
  - `types` (list[str], optional): Record types to filter by. Valid types:
    - `http://mobi.com/ontologies/ontology-editor#OntologyRecord` (Ontology/Vocabulary)
    - `http://mobi.com/ontologies/shapes-graph-editor#ShapesGraphRecord` (SHACL)
    - `http://mobi.com/ontologies/delimited#MappingRecord` (Mappings)
    - `http://mobi.com/ontologies/dataset#DatasetRecord` (Datasets)

#### `entity_search`
Search the Mobi catalog for records whose metadata contain a specified string.
- **Parameters:**
  - `search_for` (str): Substring to search for within entities' metadata
  - `offset` (int): Starting point within the result set
  - `limit` (int): Maximum number of entities to return
  - `types` (list[str], optional): Entity types to filter by
  - `keywords` (list[str], optional): Keywords to filter by

### Data Retrieval Tools

#### `fetch_ontology_data`
Fetch ontology data for a given ontology record IRI.
- **Parameters:**
  - `ontology_iri` (str): The IRI of the record containing the ontology data (not the ontology IRI itself)
- **Note:** Use the record IRI from search results, typically in the format `https://mobi.com/records#<uuid>`

#### `get_shapes_graph`
Retrieve the shapes graph for a specified record.
- **Parameters:**
  - `record_id` (str): Unique identifier for the record
  - `branch_id` (str, optional): Branch identifier within the record
  - `commit_id` (str, optional): Commit identifier to target

### Content Creation Tools

#### `create_ontology_record`
Create a new ontology record from RDF data and metadata.
- **Parameters:**
  - `rdf_string` (str): The RDF data as a string
  - `rdf_format` (str): Format of the RDF data (e.g., "xml", "turtle")
  - `title` (str): Title of the ontology
  - `description` (str): Textual description of the ontology
  - `markdown_description` (str, optional): Markdown version of the description
  - `keywords` (list[str], optional): Keywords associated with the ontology
- **Note:** Confirmation with the user is recommended before creating new records

### Version Control Tools

#### `create_branch_on_record`
Create a new branch on an existing record.
- **Parameters:**
  - `record_iri` (str): IRI of the record
  - `title` (str): Title of the new branch
  - `description` (str): Description of the new branch
  - `commit_iri` (str): IRI of the commit to use as reference

### Usage Notes
- All tools interact with Mobi's git-inspired versioning system
- Record IRIs are typically returned from search operations
- The server follows semantic versioning practices similar to git repositories
- Always verify record and branch IRIs before performing write operations