Skip to main content

No project description provided

Project description

OdinMCP

Outrageously Distributed Infrastructure Network for MCP servers.

PyPI MIT licensed Python Version

Table of Contents

Overview

OdinMCP extends the base MCP library by adding support for distributed workers, enabling scalable task execution across multiple nodes. This is accomplished while fully supporting the streamable-http transport as suggested in the MCP specification, allowing for efficient real-time streaming and interoperability.

Problem Statement

The goal of OdinMCP is to address challenges related to:

  • Securing user authentication.
  • Handling high-demand streaming.
  • Distributing tasks across multiple nodes for scalability.

Architecture

OdinMCP is designed to operate as a distributed system, enabling secure, scalable, and efficient management of large language models (LLMs) and their connections to diverse data sources. The architecture brings together several critical capabilities: authentication, API gateway management, real-time streaming, and a unified inspector UI for testing and event streaming.

OdinMCP Architecture Diagram

At the core of this distributed architecture is Asgard, which provides the infrastructure layer that integrates and orchestrates these capabilities. Asgard leverages several open source components to deliver a robust and modular platform:

  • Authentication & Authorization: Managed via Keycloak and OIDC protocols, with Heimdall handling user authentication and authorization.
  • API Gateway: Bifrost, powered by Kong Gateway, routes and secures incoming requests, integrating with Heimdall for token validation.
  • Streaming & Server-Sent Events (SSE): Hermod, leveraging Pushpin and the GRIP protocol, manages real-time streaming and offloads connection management from core services.
  • Inspector UI: Loki provides a web interface for browsing and streaming events via Inspector and SSE.

By combining these components under the Asgard infrastructure, OdinMCP achieves a standardized and extensible approach to running MCP-based systems in distributed environments.

For more details, see the Asgard documentation.

Installation

You can install OdinMCP using pip or poetry:

pip install odinmcp

or

poetry add odinmcp

Quickstart

Below is a minimal example of a server.py you can use to get started with OdinMCP. This file defines a few example tools and sets up both the web server and worker:

from odinmcp import OdinMCP
from mcp.server.fastmcp import Context
import time
from typing import Any

mcp = OdinMCP("Odin MCP Demo")

@mcp.tool()
def add(a: int, b: int) -> int:
    return a + b

@mcp.tool()
async def send_client_request_for_roots(ctx: Context) -> list[Any]:
    return await ctx.session.list_roots()

@mcp.tool()
async def very_long_running_task_will_cancel(ctx: Context) -> None:
    print("very_long_running_task_will_cancel has started")
    time.sleep(30)
    print("very_long_running_task_will_cancel has finished")

web, worker = mcp.sse_app()

You can now run this file using the CLI commands below.

How to Deploy

  1. Project Setup(only once)

    odinmcp setup_asgard
    

    Copies the default Asgard project structure into your current directory. Add --force to overwrite existing files.

  2. Start Asgard Proxies and Services

    cd ./asgard
    docker-compose up
    

    This will run all the required proxies and services for Asgard using Docker Compose.

  3. Start the Web Server ( in a new terminal )

    odinmcp web server:app --host 0.0.0.0 --port 80
    

    Launches the Starlette ASGI web server. Replace server:app with your module and app variable (e.g., myproject.main:web).

  4. Start the Worker Process ( in a new terminal )

    odinmcp worker server:worker --loglevel=info
    

    Starts the Celery worker for distributed task processing. Replace server:worker with your module and worker variable. You can run any number of workers for distributed task processing.

Note:

  • The web server and worker process must be started separately for full functionality.
  • You can use the standard Uvicorn and Celery CLIs if you prefer, but the OdinMCP CLI provides a unified interface.

Migrating from mcp.FastMCP to OdinMCP

OdinMCP is a drop-in replacement for FastMCP with improved scalability and streaming. To migrate:

  • Uninstall mcp: pip uninstall mcp
  • Install OdinMCP: pip install odinmcp
  • Update Imports: Replace from mcp.server.fastmcp import FastMCP with from odinmcp import OdinWeb (or OdinMCP as appropriate)
  • Replace Class Names: Change FastMCP to OdinWeb (or OdinMCP)
  • App Creation: Use app, worker = mcp.sse_app() instead of app = mcp.streamable_http_app()

Deployment

Deploying Asgard with Docker Compose

To start all Asgard infrastructure services (API gateway, authentication, streaming, etc.), use Docker Compose:

cd ./asgard
docker-compose up

This will launch all required proxies and services for distributed operation. Make sure you have run odinmcp setup_asgard first to generate the Asgard directory structure.

Web Server

  • FastMCP:
    • uvicorn server:app --host 0.0.0.0 --port 80
    • or mcp dev server.py
  • OdinMCP:
    • odinmcp web server:app --host 0.0.0.0 --port 80
    • or use any ASGI server (e.g., Uvicorn) as above

Worker Process

  • FastMCP:
    • No explicit background worker; FastMCP does not support distributed background processing.
  • OdinMCP:
    • odinmcp worker server:worker --loglevel=info
    • or celery -A server worker --loglevel=info
    • The worker must be started separately for distributed task processing.

Note: For OdinMCP, both the web server and worker process must be started for full functionality.

Contributing

Contributions to OdinMCP are welcome! Please open issues, fork the repository, and submit pull requests to help improve functionality and performance.

License

This project is licensed under the MIT License. See the LICENSE file for details.

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

odinmcp-0.0.5.tar.gz (41.6 kB view details)

Uploaded Source

Built Distribution

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

odinmcp-0.0.5-py3-none-any.whl (50.2 kB view details)

Uploaded Python 3

File details

Details for the file odinmcp-0.0.5.tar.gz.

File metadata

  • Download URL: odinmcp-0.0.5.tar.gz
  • Upload date:
  • Size: 41.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.11.0-1014-azure

File hashes

Hashes for odinmcp-0.0.5.tar.gz
Algorithm Hash digest
SHA256 d84a3f5893fa76d6c005539117993c8b88a478c309968e5f896274f6e504f201
MD5 d5ef00ab4e0c1f84880a53fbdfd1d455
BLAKE2b-256 d59b451b3d071d6bbf0cf15f301d6a28017a89413f60fbe406b1b239de0c458f

See more details on using hashes here.

File details

Details for the file odinmcp-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: odinmcp-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 50.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.11.0-1014-azure

File hashes

Hashes for odinmcp-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0d93b6a3b24f4a29a99bf0849c69391ae937426cc1122af074b3d10b007407e5
MD5 26efa4cf29f6d71762b386ae1c0306be
BLAKE2b-256 aea41e53d5ea759b3219011a3a6ff6e99b441e96be3585a52c1cb98a54ae5281

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