airulermcp


Nameairulermcp JSON
Version 0.3.1 PyPI version JSON
download
home_pageNone
SummaryMCP server for distributing AI rules from GitLab repositories to IDEs
upload_time2025-09-05 22:34:42
maintainerNone
docs_urlNone
authorNone
requires_python>=3.13
licenseMIT
keywords ai gitlab ide mcp model-context-protocol tools
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # AIMCP

[![PyPI version](https://badge.fury.io/py/aimcp.svg)](https://badge.fury.io/py/aimcp)
[![Python 3.13+](https://img.shields.io/badge/python-3.13+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

AIMCP is an MCP (Model Context Protocol) server that enables teams to distribute MCP tool specifications from GitLab repositories to IDEs like Cursor and VS Code. The server discovers `tools.json` files in repositories, dynamically generates MCP tools from their specifications, and serves referenced files as resources through a secure URI scheme.

## Features

- **GitLab Integration**: Automatically discovers and fetches `tools.json` files from configured repositories
- **Dynamic Tool Generation**: Creates MCP tools from specifications at runtime
- **Secure Resource Access**: Serves repository files via `aimcp://` URI scheme with access control
- **Dual Caching**: Caches both tool specifications and file content for optimal performance
- **Conflict Resolution**: Handles duplicate tool names across repositories with configurable strategies
- **Async Architecture**: Built on `fastmcp` for high-performance async operations

## Installation

```bash
pip install aimcp
```

## Quick Start

1. Create a configuration file `config.yaml`:

```yaml
gitlab:
  base_url: "https://gitlab.example.com"
  token: "your-gitlab-token"
  repositories:
    - path: "team/tools-repo"
      branch: "main"

cache:
  type: "memory"
  ttl: 3600

conflict_resolution: "prefix"
```

2. Run the server:

```bash
aimcp
```

3. Connect your IDE to the MCP server at the configured endpoint.

## Tool Specifications

Each repository must contain a `tools.json` file following the [MCP specification](https://spec.modelcontextprotocol.io/). Example:

```json
{
  "tools": [
    {
      "name": "analyze_code",
      "description": "Analyze code quality and suggest improvements",
      "resourceRefs": ["analyzer_script", "analyzer_rules"]
      }
    }
  ],
  "resources": [
    {
      "name": "analyzer_script",
      "uri": "scripts/analyze.py",
    },
    {
      "name": "analyzer_rules",
      "uri": "configs/rules.yaml"
    }
  ]
}
```

## Configuration

### Conflict Resolution Strategies

- `prefix`: Add repository prefix to tool names (`repo1_toolname`, `repo2_toolname`)
- `priority`: First repository in configuration order wins
- `error`: Fail startup with detailed conflict report
- `merge`: Combine tool descriptions and resource lists

### Cache Options

- `memory`: In-memory caching (default)
- `redis`: Redis-backed caching for distributed setups (not implemented)

## Development

### Prerequisites

- Python 3.13+
- uv (recommended package manager)

### Setup

```bash
# Clone the repository
git clone https://github.com/yourusername/aimcp.git
cd aimcp

# Install dependencies
uv sync --dev

# Run tests
uv run pytest

# Run linting
uv run ruff check .

# Run type checking
uv run mypy .
```

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## Vibe coding product

Generated with Claude

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "airulermcp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.13",
    "maintainer_email": "Lenny <rusts-talus-9g@icloud.com>",
    "keywords": "ai, gitlab, ide, mcp, model-context-protocol, tools",
    "author": null,
    "author_email": "Lenny <rusts-talus-9g@icloud.com>",
    "download_url": "https://files.pythonhosted.org/packages/a3/26/422a4ca180c65615650afd2129213927d4dc8daf81c6fadf18e0a2908d25/airulermcp-0.3.1.tar.gz",
    "platform": null,
    "description": "# AIMCP\n\n[![PyPI version](https://badge.fury.io/py/aimcp.svg)](https://badge.fury.io/py/aimcp)\n[![Python 3.13+](https://img.shields.io/badge/python-3.13+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nAIMCP is an MCP (Model Context Protocol) server that enables teams to distribute MCP tool specifications from GitLab repositories to IDEs like Cursor and VS Code. The server discovers `tools.json` files in repositories, dynamically generates MCP tools from their specifications, and serves referenced files as resources through a secure URI scheme.\n\n## Features\n\n- **GitLab Integration**: Automatically discovers and fetches `tools.json` files from configured repositories\n- **Dynamic Tool Generation**: Creates MCP tools from specifications at runtime\n- **Secure Resource Access**: Serves repository files via `aimcp://` URI scheme with access control\n- **Dual Caching**: Caches both tool specifications and file content for optimal performance\n- **Conflict Resolution**: Handles duplicate tool names across repositories with configurable strategies\n- **Async Architecture**: Built on `fastmcp` for high-performance async operations\n\n## Installation\n\n```bash\npip install aimcp\n```\n\n## Quick Start\n\n1. Create a configuration file `config.yaml`:\n\n```yaml\ngitlab:\n  base_url: \"https://gitlab.example.com\"\n  token: \"your-gitlab-token\"\n  repositories:\n    - path: \"team/tools-repo\"\n      branch: \"main\"\n\ncache:\n  type: \"memory\"\n  ttl: 3600\n\nconflict_resolution: \"prefix\"\n```\n\n2. Run the server:\n\n```bash\naimcp\n```\n\n3. Connect your IDE to the MCP server at the configured endpoint.\n\n## Tool Specifications\n\nEach repository must contain a `tools.json` file following the [MCP specification](https://spec.modelcontextprotocol.io/). Example:\n\n```json\n{\n  \"tools\": [\n    {\n      \"name\": \"analyze_code\",\n      \"description\": \"Analyze code quality and suggest improvements\",\n      \"resourceRefs\": [\"analyzer_script\", \"analyzer_rules\"]\n      }\n    }\n  ],\n  \"resources\": [\n    {\n      \"name\": \"analyzer_script\",\n      \"uri\": \"scripts/analyze.py\",\n    },\n    {\n      \"name\": \"analyzer_rules\",\n      \"uri\": \"configs/rules.yaml\"\n    }\n  ]\n}\n```\n\n## Configuration\n\n### Conflict Resolution Strategies\n\n- `prefix`: Add repository prefix to tool names (`repo1_toolname`, `repo2_toolname`)\n- `priority`: First repository in configuration order wins\n- `error`: Fail startup with detailed conflict report\n- `merge`: Combine tool descriptions and resource lists\n\n### Cache Options\n\n- `memory`: In-memory caching (default)\n- `redis`: Redis-backed caching for distributed setups (not implemented)\n\n## Development\n\n### Prerequisites\n\n- Python 3.13+\n- uv (recommended package manager)\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/aimcp.git\ncd aimcp\n\n# Install dependencies\nuv sync --dev\n\n# Run tests\nuv run pytest\n\n# Run linting\nuv run ruff check .\n\n# Run type checking\nuv run mypy .\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Vibe coding product\n\nGenerated with Claude\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "MCP server for distributing AI rules from GitLab repositories to IDEs",
    "version": "0.3.1",
    "project_urls": {
        "Documentation": "https://github.com/junqed/aimcp#readme",
        "Homepage": "https://github.com/junqed/aimcp",
        "Issues": "https://github.com/junqed/aimcp/issues",
        "Repository": "https://github.com/junqed/aimcp"
    },
    "split_keywords": [
        "ai",
        " gitlab",
        " ide",
        " mcp",
        " model-context-protocol",
        " tools"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a1bd350a59c27941cab516ca9396d6db30e14ceb248bd815782a9386cb855f97",
                "md5": "1379adc5ab927b283ab8e61866ed7df7",
                "sha256": "4a5e648fc1e1b310e7f40572b442ccba3757331e1e24d9fc5d4b6da3da658d51"
            },
            "downloads": -1,
            "filename": "airulermcp-0.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1379adc5ab927b283ab8e61866ed7df7",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.13",
            "size": 34791,
            "upload_time": "2025-09-05T22:34:40",
            "upload_time_iso_8601": "2025-09-05T22:34:40.728690Z",
            "url": "https://files.pythonhosted.org/packages/a1/bd/350a59c27941cab516ca9396d6db30e14ceb248bd815782a9386cb855f97/airulermcp-0.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a326422a4ca180c65615650afd2129213927d4dc8daf81c6fadf18e0a2908d25",
                "md5": "94bc53401e3a8b43a0b97e843d960053",
                "sha256": "acb82ad6db2fcd01d3f9f7f11cc9e5f70f57310a9774978df299d7d52340ee5a"
            },
            "downloads": -1,
            "filename": "airulermcp-0.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "94bc53401e3a8b43a0b97e843d960053",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.13",
            "size": 67637,
            "upload_time": "2025-09-05T22:34:42",
            "upload_time_iso_8601": "2025-09-05T22:34:42.148140Z",
            "url": "https://files.pythonhosted.org/packages/a3/26/422a4ca180c65615650afd2129213927d4dc8daf81c6fadf18e0a2908d25/airulermcp-0.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-05 22:34:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "junqed",
    "github_project": "aimcp#readme",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "airulermcp"
}
        
Elapsed time: 0.96031s