Skip to main content

Eunomia

Eunomia Logo

Authorization layer for AI Agents

Made with ❤ by the team at What About You.

Read the docs · Join the Discord

PyPi CI CD License Discord

[!NOTE] Try the new Eunomia MCP Middleware for adding policy-based authorization to your MCP servers!

Overview

Eunomia is a standalone authorization layer purpose-built for AI agents. As a framework-agnostic solution, it decouples authorization logic from your agent architecture, enabling cleaner and more maintainable systems.

Built in the open, Eunomia provides enterprise-grade authorization capabilities that power What About You's AI governance platform. The framework seamlessly integrates with Model Context Protocol (MCP) primitives, making it easy to add policy-based authorization to your existing agent workflows.

Key features:

  • Framework-agnostic: Works with any AI agent architecture or framework
  • Decoupled design: Separates authorization concerns from business logic
  • Agent Identity Governance: Verified agent identities through cryptographically signed Agent Passport tokens
  • MCP integration: Native support for Model Context Protocol workflows
  • Enterprise-ready: Proven in production environments
  • Developer-focused: Simple APIs and comprehensive tooling

Get Started

Eunomia is a standalone server to decouple the authorization logic from the main architecture of your AI Agent.

Running the Server

Install the eunomia-ai package via pip and run the server locally with:

eunomia server

Or use the Docker image instead:

docker run -d -p 8421:8421 --name eunomia ttommitt/eunomia-server:latest

Usage

Check out the quickstart example in the documentation for a fully working example.

Other Eunomia packages

Eunomia SDKs

To interact with the server from your code, you can use the following SDKs:

Eunomia Extensions

Eunomia provides extensions for the following frameworks:

Documentation

For more examples and detailed usage, check out the documentation.

Changelog

Migration to v0.3.6

Admin API endpoints now require /admin prefix

Admin endpoints for policy and entity management have been moved under the /admin prefix for better organization and security. Update your requests to use the new endpoints:

Affected endpoints:

  • All /policies[...] endpoints → /admin/policies[...]
  • All /fetchers[...] endpoints → /admin/fetchers[...]

Public endpoints unchanged:

  • All /check[...] endpoints remain public

The SDKs have been automatically updated to use the new endpoints.

Renamed fetcher: internal → registry

The internal fetcher has been renamed to registry for consistency. Update your configuration and endpoints to use the new name.

Migration to v0.3.5

Renamed SDK packages: eunomia-sdk-python → eunomia-sdk and eunomia-sdk-typescript → eunomia-sdk

The SDK packages have been renamed to eunomia-sdk for consistency. Install the new package and update your imports.

Python:

# Before (v0.3.4)
from eunomia_sdk_python import EunomiaClient

# After (v0.3.5)
from eunomia_sdk import EunomiaClient

Typescript:

// Before (v0.3.4)
import { EunomiaClient } from "eunomia-sdk-typescript";

// After (v0.3.5)
import { EunomiaClient } from "eunomia-sdk";

Migration to v0.3.3

Modified Response for /check and /check/bulk

The response of /check and /check/bulk endpoints has changed from bool to eunomia_core.schemas.CheckResponse.

Update your Python code to use the new response type:

# Before (v0.3.2)
is_allowed = eunomia.check(principal_uri, resource_uri)

# After (v0.3.3)
response = eunomia.check(principal_uri, resource_uri)
is_allowed = response.allowed

Endpoint Rename: /policies → /policies/simple

The simple policy creation endpoint has been renamed to /policies/simple for consistency.

New Endpoint: /policies

A new endpoint has been added for creating full policies:

curl -X POST "http://localhost:8421/policies" \
  -H "Content-Type: application/json" \
  -d '{"version": "1.0", "name": "...", "default_effect": "...", "rules": []}'

Migration to v0.3.2

The following breaking changes were introduced in this version:

Endpoint Rename: /check-access → /check

The authorization endpoint has been renamed for clarity; update your requests to use the new endpoint:

# Before (v0.3.1)
curl -X POST "http://localhost:8421/check-access" \
  -H "Content-Type: application/json" \
  -d '{"principal": {...}, "action": "...", "resource": {...}}'

# After (v0.3.2)
curl -X POST "http://localhost:8421/check" \
  -H "Content-Type: application/json" \
  -d '{"principal": {...}, "action": "...", "resource": {...}}'

New Endpoint: /check/bulk

A new bulk authorization endpoint has been added for improved performance when checking multiple permissions:

curl -X POST "http://localhost:8421/check/bulk" \
  -H "Content-Type: application/json" \
  -d '[
    {"principal": {...}, "action": "...", "resource": {...}},
    {"principal": {...}, "action": "...", "resource": {...}}
  ]'

Metadata

Release files for eunomia-ai 0.3.10

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

Source distribution (sdist)

Source distribution for eunomia-ai 0.3.10
File Size Uploaded Provenance
eunomia_ai-0.3.10.tar.gz 387.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for eunomia-ai 0.3.10
File Interpreter ABI Platform
eunomia_ai-0.3.10-py3-none-any.whl Python 3 none any Details

Total release size: 417.7 kB

Release files / eunomia_ai-0.3.10.tar.gz

Download URL eunomia_ai-0.3.10.tar.gz
Size 387.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6be0598c6344e83ae3289507f9f670d5f9dcc38a200f0401905a933e6332ac02
BLAKE2b-256 checksum
How to use checksums
1c821c2bff13ea97fd6b88d7b1ac3f3eb22f7b361b44722b0161a9165ad48a52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.3

Release files / eunomia_ai-0.3.10-py3-none-any.whl

Download URL eunomia_ai-0.3.10-py3-none-any.whl
Size 30.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a12187736db43c5bf827185f7d3b77a81ef870c3f54b6bc5c65cf19fb8446105
BLAKE2b-256 checksum
How to use checksums
ec9d4982d06368a694adb775d23a6c98754d4f46a785f7976da76de6eeb591a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.3

Security for eunomia-ai 0.3.10

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