Skip to main content

🚀 MCP framework that unlocks truly scalable AI systems with zero friction

Project description

Axiom MCP

🚀 MCP framework that unlocks truly scalable AI systems with zero friction

NOTE

This will be oss very soon, working on docs + other misc stuff, if you want to contribute, send me an email.

Installation

Using uv (recommended):

uv pip install axiom-mcp

Development Setup

  1. Clone the repository:

    git clone https://github.com/axiomml/axiom-mcp.git
    cd axiom-mcp
    
  2. Install uv if you haven't already:

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  3. Create and activate a virtual environment with uv:

    uv venv
    source .venv/bin/activate  # On Unix/Linux
    # or
    .venv\Scripts\activate  # On Windows
    
  4. Install development dependencies:

    uv pip install -e ".[dev]"
    

Core Features

1. Tool Definition

Tools in Axiom MCP are defined as classes that inherit from the Tool base class. Here's how to define a tool:

from axiom_mcp.tools.base import Tool, ToolMetadata, ToolValidation

# Define input schema for tool validation
number_input_schema = {
    "type": "object",
    "properties": {
        "a": {"type": "number", "description": "First number"},
        "b": {"type": "number", "description": "Second number"},
    },
    "required": ["a", "b"],
}

class AddTool(Tool):
    """Tool for adding two numbers."""
    metadata = ToolMetadata(
        name="add",
        description="Add two numbers together",
        validation=ToolValidation(input_schema=number_input_schema),
        author="MathServer",
        version="1.0.0",
    )

    async def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
        a, b = args["a"], args["b"]
        result = a + b
        return {
            "type": "text",
            "content": {"operation": "addition", "a": a, "b": b, "result": result},
        }

2. Tool Logging and Metrics

Axiom MCP provides comprehensive logging and metrics capabilities for tools:

Basic Logging

Each tool has access to a context with built-in logging methods:

class MyTool(Tool):
    async def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
        # Access logging through tool context
        self.context.debug("Debug level message")
        self.context.info("Processing started")
        self.context.warning("Warning message")
        self.context.error("Error occurred")

        # Your tool logic here
        return result

Metrics Tracking

The tool manager automatically tracks:

  • Total calls
  • Successful calls
  • Failed calls
  • Average execution time
  • Last used timestamp

Metrics are stored in the logs/tools.log file by default and include:

  • Tool name
  • Operation status
  • Timestamp
  • Execution time
  • Error messages (if any)

Advanced Features

  1. Cache Control:
# Disable caching for specific execution
tool_context = ToolContext(cache_enabled=False)
tool = MyTool(context=tool_context)
  1. Execution Timeout:
# Set custom timeout
tool_context = ToolContext(timeout=30.0)  # 30 seconds
  1. Dry Run Mode:
# Enable dry run for testing
tool_context = ToolContext(dry_run=True)

3. Resource Definition

Resources are lightweight endpoints that can be defined using decorators:

from pathlib import Path
from axiom_mcp import AxiomMCP

mcp = AxiomMCP("MyServer", port=8888)

# Simple string resource
@mcp.resource("greeting://{name}")
def say_hello(name: str) -> str:
    return f"Hello, {name}!"

# Resource returning a list of files
@mcp.resource("dir://desktop")
def list_files() -> list[str]:
    desktop = Path.home() / "Documents"
    return [str(f) for f in desktop.iterdir()]

Running the Server

axiom-mcp dev server.py # This runs in dev mode
axiom-mcp run server.py # This runs in release/prod mode

Development Commands

# Run tests
uv run pytest

# Run tests with coverage
uv run pytest --cov=axiom_mcp tests/

# Update dependencies
uv pip compile pyproject.toml -o requirements.txt

# Sync your environment
uv pip sync requirements.txt

Contributing

  1. Fork the repository
  2. Create a new branch for your feature
  3. Make your changes
  4. Run the tests:
    uv run pytest
    
  5. Submit a pull request

License

GNU General Public License v3 (GPLv3)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

axiom_mcp-0.1.3.tar.gz (119.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

axiom_mcp-0.1.3-py3-none-any.whl (69.3 kB view details)

Uploaded Python 3

File details

Details for the file axiom_mcp-0.1.3.tar.gz.

File metadata

  • Download URL: axiom_mcp-0.1.3.tar.gz
  • Upload date:
  • Size: 119.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for axiom_mcp-0.1.3.tar.gz
Algorithm Hash digest
SHA256 606d71388820002d9aa277cae43a49e5384172f13d1dc3b4fdfb76c8049b8bda
MD5 a87845669cdc5272043daddfcae992d4
BLAKE2b-256 01a3fb5cc6b34e0a74e5584b6f4dd6be00b1b85de1a2ee58796c81461789ec1b

See more details on using hashes here.

File details

Details for the file axiom_mcp-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: axiom_mcp-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 69.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for axiom_mcp-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 799272e2d50807d2ce5ed3c31c3a8612c8c2b7df8e9b0f522bf71649c9084be9
MD5 c0bdc94976a9f49d7a2b7bdf2c4d79c9
BLAKE2b-256 2fedd87aae3ca5eb7f1f5c6c3d4682ce7b5950d60ca7b0f7a41bfd12f973f44d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page