Skip to main content

Omnara Agent Dashboard - MCP Server and Python SDK

Project description

Omnara - Mission Control for Your AI Agents ๐Ÿš€

Your AI workforce launchpad, in your pocket.

PyPI version Downloads Python Versions License GitHub stars Ruff

Omnara Mobile Experience


๐Ÿš€ What is Omnara?

Omnara transforms your AI agents (Claude Code, Cursor, GitHub Copilot, and more) from silent workers into communicative teammates. Get real-time visibility into what your agents are doing, respond to their questions instantly, and guide them to success - all from your phone.

โœจ Key Features

Feature Description
๐Ÿ“Š Real-Time Monitoring See every step your AI agents take as they work
๐Ÿ’ฌ Interactive Q&A Respond instantly when agents need guidance
๐Ÿ“ฑ Mobile-First Design Full control from your phone, tablet, or desktop
๐Ÿ”” Smart Notifications Get alerted only when your input is needed
๐ŸŽฏ Universal Dashboard All your AI agents in one unified interface

๐ŸŽฌ See It In Action

Mobile Notifications

The moment your agent needs help, you're there. No more returning to failed jobs hours later.

Agent Activity Feed

๐Ÿ’ก Why Omnara?

We built Omnara because we were tired of:

  • โŒ Starting long agent jobs and finding them stuck hours later
  • โŒ Missing critical questions that blocked progress
  • โŒ Having no visibility into what our AI was actually doing
  • โŒ Being tied to our desks while agents worked

Now you can:

  • โœ… Launch agents and monitor them from anywhere
  • โœ… Get push notifications when input is needed
  • โœ… Send real-time feedback to guide your agents
  • โœ… Have confidence your AI workforce is productive

๐Ÿ—๏ธ Architecture Overview

Omnara provides a unified platform for monitoring and controlling your AI agents:

graph TB
    subgraph "Your AI Agents"
        A[๐Ÿค– AI Agents<br/>Claude Code, Cursor, etc.]
    end

    subgraph "Omnara Platform"
        API[๐ŸŒ API Server]
        DB[(๐Ÿ“Š PostgreSQL)]
        NOTIFY[๐Ÿ”” Notification Service<br/>Push/Email/SMS]
    end

    subgraph "Your Devices"
        M[๐Ÿ“ฑ Mobile App]
        W[๐Ÿ’ป Web Dashboard]
    end

    A -->|Send updates| API
    API -->|Store data| DB
    API -->|Trigger notifications| NOTIFY
    NOTIFY -->|Alert users| M
    DB -->|Real-time sync| M
    DB -->|Real-time sync| W
    M -->|User responses| API
    W -->|User responses| API
    API -->|Deliver feedback| A

    style A fill:#e3f2fd,stroke:#1976d2,stroke-width:3px
    style API fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style DB fill:#ffccbc,stroke:#d84315,stroke-width:2px
    style NOTIFY fill:#fff59d,stroke:#f57f17,stroke-width:2px
    style M fill:#f8bbd0,stroke:#c2185b,stroke-width:3px
    style W fill:#f8bbd0,stroke:#c2185b,stroke-width:3px

Omnara supports two distinct modes of operation:

Mode 1: Real-Time Claude Code Monitoring

When you run Claude Code locally with the Omnara wrapper, it monitors your agent's activity in real-time:

graph TB
    subgraph "Your Local Machine"
        CC[๐Ÿค– Claude Code]
        CW[๐Ÿ“Š Claude Wrapper<br/>claude_wrapper_v3.py]
        LOG[๐Ÿ“„ JSONL Logs<br/>~/.claude/projects/]
        TERM[๐Ÿ–ฅ๏ธ Terminal Output]
    end

    subgraph "Omnara Platform"
        API[๐ŸŒ REST API Server]
        DB[(๐Ÿ“Š PostgreSQL)]
        SSE[๐Ÿ“ก SSE Endpoint]
        NOTIFY[๐Ÿ”” Notification Service<br/>Push/Email/SMS]
    end

    subgraph "Your Devices"
        M[๐Ÿ“ฑ Mobile App]
        W[๐Ÿ’ป Web Dashboard]
    end

    CC -->|Writes logs| LOG
    CC -->|Displays output| TERM
    CW -->|Monitors| LOG
    CW -->|Watches| TERM
    CW -->|Sends messages via REST| API
    API -->|Stores messages| DB
    API -->|Triggers notifications| NOTIFY
    DB -->|NOTIFY triggers| SSE
    SSE -->|Real-time updates| M
    SSE -->|Real-time updates| W
    NOTIFY -->|Push/Email/SMS| M
    M -->|User responses| API
    W -->|User responses| API
    API -->|Queued messages| CW
    CW -->|Types into| CC

    style CC fill:#e3f2fd,stroke:#1976d2,stroke-width:3px
    style CW fill:#fff59d,stroke:#f57f17,stroke-width:2px
    style API fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style DB fill:#ffccbc,stroke:#d84315,stroke-width:2px
    style NOTIFY fill:#ffe082,stroke:#f57f17,stroke-width:2px
    style M fill:#f8bbd0,stroke:#c2185b,stroke-width:3px
    style W fill:#f8bbd0,stroke:#c2185b,stroke-width:3px

How it works:

  • The wrapper monitors Claude's JSONL log files and terminal output
  • It identifies questions by detecting idle states and parsing terminal prompts
  • Messages are sent to Omnara via REST API with requires_user_input flag
  • PostgreSQL triggers send real-time notifications via SSE
  • Users receive push/email/SMS notifications for questions
  • Responses are injected back into Claude's terminal

Mode 2: Remote Agent Launch via Webhook

When you trigger an agent remotely from Omnara, it uses the Model Context Protocol (MCP):

graph TB
    subgraph "Omnara Platform"
        UI[๐ŸŒ Web/Mobile UI]
        API[๐ŸŒ API Server<br/>+ MCP Endpoint]
        DB[(๐Ÿ“Š PostgreSQL)]
        SSE[๐Ÿ“ก SSE Endpoint]
    end

    subgraph "Your Computer"
        WH[๐Ÿ”— Webhook Server<br/>claude_code.py]
        CT[โ˜๏ธ Cloudflare Tunnel<br/>optional]
        CC[๐Ÿค– Claude Code<br/>w/ MCP Config]
    end

    UI -->|Trigger agent| API
    API -->|POST webhook| CT
    CT -->|Forward request| WH
    WH -->|Launch Claude| CC
    CC -->|log_step/ask_question<br/>via MCP| API
    API -->|Store messages| DB
    DB -->|Real-time updates| SSE
    SSE -->|Push updates| UI
    UI -->|User responses| API
    API -->|Return answers<br/>via MCP| CC

    style UI fill:#f8bbd0,stroke:#c2185b,stroke-width:3px
    style WH fill:#fff59d,stroke:#f57f17,stroke-width:2px
    style CC fill:#e3f2fd,stroke:#1976d2,stroke-width:3px
    style API fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
    style DB fill:#ffccbc,stroke:#d84315,stroke-width:2px
    style SSE fill:#dcedc8,stroke:#689f38,stroke-width:2px

How it works:

  • User triggers an agent from the Omnara interface
  • Webhook server receives the request (optionally via Cloudflare tunnel)
  • Claude is launched with MCP configuration pointing to Omnara
  • The system prompt enforces Omnara-only communication (no terminal output)
  • All communication flows through log_step and ask_question MCP tools
  • Questions are explicitly marked with requires_user_input=true

๐Ÿ”„ Mode Comparison

Feature Real-Time Monitoring Remote Launch
Best for Local development Remote automation
Setup complexity Simple (just run wrapper) Moderate (webhook + tunnel)
Claude output visible Yes (in terminal) No (MCP only)
Question detection Automatic (terminal parsing) Explicit (ask_question)
Git isolation Uses current directory Creates worktrees
Parallel sessions Not recommended Fully supported
Network requirements API access only Webhook endpoint

๐Ÿ”ง Technical Stack

  • Backend: FastAPI with separate read/write servers for optimal performance
  • Frontend: React (Web) + React Native (Mobile)
  • Protocol: Model Context Protocol (MCP) + REST API
  • Database: PostgreSQL with SQLAlchemy ORM
  • Auth: Dual JWT system (Supabase for users, custom for agents)

๐Ÿš€ Quick Start

Option 1: Real-Time Monitoring (Recommended for local development)

Monitor your Claude Code sessions in real-time:

  1. Download the app or visit omnara.ai
  2. Get your API key from the dashboard
  3. Run Claude with the wrapper:
    python -m webhooks.claude_wrapper_v3 --api-key YOUR_API_KEY
    
  4. See everything your agent does in the Omnara dashboard!

Option 2: Remote Agent Launch (For triggering agents from anywhere)

Launch Claude Code remotely from your phone or web browser:

  1. Download the app or visit omnara.ai
  2. Install Omnara CLI:
    pip install omnara
    # or with uv: uv pip install omnara
    
  3. Start the webhook server on your computer:
    omnara serve
    
  4. Create your agent with the webhook URL and API key shown
  5. Trigger agents remotely from anywhere!

For Developers

๐Ÿ› ๏ธ Development Setup

Prerequisites

  • Python 3.10+
  • PostgreSQL
  • Node.js (for CLI tools)

Setup Steps

  1. Clone and enter the repository

    git clone https://github.com/omnara-ai/omnara
    cd omnara
    
  2. Set up Python environment

    python -m venv .venv
    source .venv/bin/activate  # Windows: .venv\Scripts\activate
    make dev-install
    
  3. Generate JWT keys

    python scripts/generate_jwt_keys.py
    
  4. Configure environment (create .env file)

    DATABASE_URL=postgresql://user:password@localhost:5432/omnara
    SUPABASE_URL=https://your-project.supabase.co
    SUPABASE_ANON_KEY=your-anon-key
    JWT_PRIVATE_KEY='-----BEGIN RSA PRIVATE KEY-----\n...'
    JWT_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----\n...'
    
  5. Initialize database

    cd shared/
    alembic upgrade head
    cd ..
    
  6. Run services

    # Terminal 1: MCP + REST Server
    python -m servers.app
    
    # Terminal 2: Backend API
    cd backend && python -m main
    

๐Ÿ“š Integration Guide

Method 1: Real-Time Monitoring with Wrapper

Run Claude Code with the Omnara wrapper for automatic monitoring:

# Basic usage
python -m webhooks.claude_wrapper_v3 --api-key YOUR_API_KEY

# With git diff tracking
python -m webhooks.claude_wrapper_v3 --api-key YOUR_API_KEY --git-diff

# Custom API endpoint (for self-hosted)
python -m webhooks.claude_wrapper_v3 --api-key YOUR_API_KEY --base-url https://your-server.com

Method 2: Remote Launch with MCP

For remote agent launching, the webhook automatically configures MCP:

{
  "mcpServers": {
    "omnara": {
      "command": "pipx",
      "args": ["run", "--no-cache", "omnara", "mcp", "--api-key", "YOUR_API_KEY"]
    }
  }
}

Method 3: Python SDK

from omnara import OmnaraClient
import uuid

client = OmnaraClient(api_key="your-api-key")
instance_id = str(uuid.uuid4())

# Log progress and check for user feedback
response = client.send_message(
    agent_type="claude-code",
    content="Analyzing codebase structure",
    agent_instance_id=instance_id,
    requires_user_input=False
)

# Ask for user input when needed
answer = client.send_message(
    content="Should I refactor this legacy module?",
    agent_instance_id=instance_id,
    requires_user_input=True
)

Method 4: REST API

curl -X POST https://api.omnara.ai/api/v1/messages/agent \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Starting deployment process", "agent_type": "claude-code", "requires_user_input": false}'

๐Ÿค Contributing

We love contributions! Check out our Contributing Guide to get started.

Development Commands

make lint       # Run code quality checks
make format     # Auto-format code
make test       # Run test suite
make dev-serve  # Start development servers

๐Ÿ“Š Pricing

Plan Price Features
Free $0/mo 10 agents/month, Core features
Pro $9/mo Unlimited agents, Priority support
Enterprise Contact Us Teams, SSO, Custom integrations

๐Ÿ†˜ Support

๐Ÿ“œ License

Omnara is open source software licensed under the Apache 2.0 License.


Built with โค๏ธ by the Omnara team

Website โ€ข Twitter โ€ข LinkedIn

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

omnara-1.4.7.tar.gz (74.8 kB view details)

Uploaded Source

Built Distribution

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

omnara-1.4.7-py3-none-any.whl (84.7 kB view details)

Uploaded Python 3

File details

Details for the file omnara-1.4.7.tar.gz.

File metadata

  • Download URL: omnara-1.4.7.tar.gz
  • Upload date:
  • Size: 74.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for omnara-1.4.7.tar.gz
Algorithm Hash digest
SHA256 a119e2012fdb8a4ef794d4201eab03375a63ed03879e454c773944e2c005c40c
MD5 f2043c9d598cbe329809a5aca28e910f
BLAKE2b-256 639c9853df94829a4cca8a656e0ecb69e057cb7c5b0a01055cd1647302f0c2fe

See more details on using hashes here.

File details

Details for the file omnara-1.4.7-py3-none-any.whl.

File metadata

  • Download URL: omnara-1.4.7-py3-none-any.whl
  • Upload date:
  • Size: 84.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for omnara-1.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 80cd2be675d99bcddfb1dbaf723bf72257a54ffe71336e693b2df00d7141ceaf
MD5 746fef23e37a4699d83e318359f5ddb4
BLAKE2b-256 0b2b3e793ea7e29ec031c2f843df727e758c54957d2c505f6abe8e47491e91f7

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