Skip to main content

Arclio Rules ๐Ÿš€

Arclio Rules is a FastAPI-based service that implements rule processing using the FastMCP framework. It provides a robust and efficient system for managing and executing business rules in a microservices architecture.

Overview

Arclio Rules is built with Python 3.12+ and leverages modern async capabilities to provide high-performance rule processing. The service can be run either with session management or in a stateless mode using standard I/O.

Features

  • FastAPI-based REST API
  • Built on FastMCP framework for efficient rule processing
  • Redis integration for rule indexing/storage and querying
  • Git integration for version control of rules
  • Support for both session-based and stateless operation modes
  • Frontmatter parsing capabilities
  • Comprehensive logging with Loguru
  • UV package management for fast, reliable dependency handling
  • Make-based workflow automation

Prerequisites

  • Python 3.12.8 or higher
  • UV package manager
  • Docker (optional, for containerized deployment)
  • Age (for secrets management)

Installation

  1. Clone the repository:
git clone https://github.com/fisseha-estifanos/arclio-rules.git
cd arclio-rules
  1. Install dependencies using UV:
make install

This will:

  • Install project dependencies using UV
  • Set up the development environment
  • Sync all dependencies

Environment Setup

  1. Initialize SOPS for secret management:
make init-key
  1. Create your environment file:
# Copy the example environment file
cp .env.example .env

# Decrypt existing secrets (if you have access)
make decrypt

Required Environment Variables:

# GitHub API Configuration
GITHUB_TOKEN="add your GH PAT here"
GITHUB_ORG="add your GH Organization here"
REPO_NAME="add your repo that holds the rules here"
REDIS_HOST="localhost"
REDIS_PORT="6379"
REDIS_PASSWORD="add your password here if there is one"

Default Environmental Variables (No need to modify):

# Server Configuration
PORT=8000                     # Application port
HOST=0.0.0.0                  # Host to bind to

# Additional Settings
LOG_LEVEL=INFO                # Logging level (DEBUG, INFO, WARNING, ERROR)
ENVIRONMENT=development       # Application environment

Usage

The service can be run in two modes:

Stateless Mode (using stdio)

source .env
arclio-rules

Development Mode

make run-dev

Adding mcp-server on Arclio

Add these two configuration JSON templates to be able to add arclio-rules to Arclio as an mcp-server.

Configuration Template JSON

{
  "mcpServers": {
    "arclio-rules": {
      "command": "uvx",
      "args": [
        "--from",
        "arclio-rules",
        "arclio-rules"
      ],
      "env": {
        "GITHUB_TOKEN": "{{github_token}}",
        "GITHUB_ORG": "{{github_org}}",
        "RULES_REPO_NAME": "{{rules_repo_name}}",
        "PORT": "{{port}}",
        "HOST": "{{host}}",
        "LOG_LEVEL": "{{log_level}}",
        "ENVIRONMENT": "{{environment}}",
        "REDIS_HOST": "{{redis_host}}",
        "REDIS_PORT": "{{redis_port}}",
        "REDIS_PASSWORD": "{{redis_password}}"
      }
    }
  }
}

UI Schema JSON

{
  "sections": [
    {
      "title": "GitHub Configuration",
      "type": "instructions",
      "content": "Configure GitHub access for rule repository management"
    },
    {
      "title": "GitHub Personal Access Token",
      "type": "password",
      "field": "github_token"
    },
    {
      "title": "GitHub Organization",
      "type": "text",
      "field": "github_org"
    },
    {
      "title": "Repository Name",
      "type": "text",
      "field": "rules_repo_name"
    },
    {
      "title": "Server Configuration",
      "type": "instructions",
      "content": "Configure server settings"
    },
    {
      "title": "Application Port",
      "type": "text",
      "field": "port"
    },
    {
      "title": "Host Address",
      "type": "text",
      "field": "host"
    },
    {
      "title": "Log Level",
      "type": "text",
      "field": "log_level"
    },
    {
      "title": "Environment",
      "type": "text",
      "field": "environment"
    },
    {
      "title": "REDIS_HOST",
      "type": "text",
      "field": "redis_host"
    },
    {
      "title": "REDIS_PORT",
      "type": "text",
      "field": "redis_port"
    },
    {
      "title": "REDIS_PASSWORD",
      "type": "password",
      "field": "redis_password"
    }
  ]
}

Development Commands

The project includes a comprehensive Makefile for common development tasks:

# Development
make run-dev         # Run development server
make install         # Install dependencies
make build           # Build the project
make publish         # Publish the project to pypi

# Code Quality
make lint            # Run Ruff linter
make type-check      # Run Pyright type checker
make format          # Format code with Ruff
make pre-commit      # Run all code quality checks

# Secrets Management
make init-key        # Generate new age key for SOPS
make encrypt         # Encrypt .env to .env.sops
make decrypt         # Decrypt .env.sops to .env
make add-recipient   # Add new public key (make add-recipient KEY=age1...)

Project Structure

arclio-rules/ โ”œโ”€โ”€ .github/ โ”‚ โ””โ”€โ”€ workflows/ โ”‚ โ””โ”€โ”€ linting-and-pyright.yml โ”œโ”€โ”€ .gitignore โ”œโ”€โ”€ LICENSE โ”œโ”€โ”€ Makefile โ”œโ”€โ”€ README.md โ”œโ”€โ”€ pyproject.toml โ”œโ”€โ”€ pyrightconfig.json โ”œโ”€โ”€ src/ โ”‚ โ””โ”€โ”€ arclio_rules/ โ”‚ โ”œโ”€โ”€ init.py โ”‚ โ”œโ”€โ”€ main.py โ”‚ โ”œโ”€โ”€ datamodels/ โ”‚ โ”‚ โ”œโ”€โ”€ client_schema.py โ”‚ โ”‚ โ””โ”€โ”€ rule_schema.py โ”‚ โ”œโ”€โ”€ inhouse_rules/ โ”‚ โ”‚ โ””โ”€โ”€ example_rule.py โ”‚ โ”œโ”€โ”€ main.py โ”‚ โ”œโ”€โ”€ routes/ โ”‚ โ”‚ โ””โ”€โ”€ rules.py โ”‚ โ””โ”€โ”€ services/ โ”‚ โ”œโ”€โ”€ rule_indexing_service.py โ”‚ โ”œโ”€โ”€ rule_resolution_service.py โ”‚ โ””โ”€โ”€ rule_storage_service.py โ”œโ”€โ”€ tests/ โ””โ”€โ”€ .env.example

Configuration

The project uses various configuration files:

  • pyproject.toml: Project metadata and dependencies
  • pyrightconfig.json: Python type checking configuration
  • .sops.yaml: Secrets management configuration
  • docker-compose.yml: Container orchestration settings
  • .env: Environment variables (created from .env.example)

Development

Package Management with UV

The project uses UV for dependency management, offering:

  • Faster package installation
  • Reliable dependency resolution
  • Consistent environments across development and production
  • Integration with virtual environments

Code Quality Tools

The project uses several tools to maintain code quality:

  • Ruff: For linting and formatting
    • Enforces PEP 8 style guide
    • Manages import sorting
    • Checks docstring formatting (Google style)
  • MyPy: For static type checking
  • Pytest: For testing (with async support)

Linting Rules

The project enforces specific linting rules through Ruff, including:

  • PEP 8 compliance (E)
  • PyFlakes checks (F)
  • Import sorting (I)
  • Docstring formatting (D)

Dependencies

Key dependencies include:

  • fastapi: Web framework
  • fastmcp: MCP framework integration
  • redis: Search and storage
  • aiohttp: Async HTTP client
  • pydantic: Data validation
  • uvicorn: ASGI server

License

[Add your license information here]

Contributing

[Add contribution guidelines here]

Metadata

Release files for arclio-rules 0.5.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arclio-rules 0.5.6
File Size Uploaded Provenance
arclio_rules-0.5.6.tar.gz 71.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for arclio-rules 0.5.6
File Interpreter ABI Platform
arclio_rules-0.5.6-py3-none-any.whl Python 3 none any Details

Total release size: 86.3 kB

Release files / arclio_rules-0.5.6.tar.gz

Download URL arclio_rules-0.5.6.tar.gz
Size 71.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1fd1b43184697fca280545a442d6733b8bac637986305898c7b5ce1e9ff34b06
BLAKE2b-256 checksum
How to use checksums
163a6356beeddae874a7a7c0a510b7b51c1436bc768aca3bf9b0b6fa394567ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release files / arclio_rules-0.5.6-py3-none-any.whl

Download URL arclio_rules-0.5.6-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f529acfa0f37add425fe6315ae14c25575c26af9bb724d2cc8bcf7c4804310ab
BLAKE2b-256 checksum
How to use checksums
93c989b7898399f8416dc1e467f06eb3112fd78739fdf449124b089e773a4f4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Security for arclio-rules 0.5.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page