Authorization layer for AI Agents
Project description
Eunomia
Authorization layer for AI Agents
Made with ❤ by the team at What About You.
[!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": {...}}
]'
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eunomia_ai-0.3.10.tar.gz.
File metadata
- Download URL: eunomia_ai-0.3.10.tar.gz
- Upload date:
- Size: 387.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6be0598c6344e83ae3289507f9f670d5f9dcc38a200f0401905a933e6332ac02
|
|
| MD5 |
66cb441c10eb18bb245924ee8333c7b2
|
|
| BLAKE2b-256 |
1c821c2bff13ea97fd6b88d7b1ac3f3eb22f7b361b44722b0161a9165ad48a52
|
File details
Details for the file eunomia_ai-0.3.10-py3-none-any.whl.
File metadata
- Download URL: eunomia_ai-0.3.10-py3-none-any.whl
- Upload date:
- Size: 30.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a12187736db43c5bf827185f7d3b77a81ef870c3f54b6bc5c65cf19fb8446105
|
|
| MD5 |
97a8e2033de57e585582a47df34d088f
|
|
| BLAKE2b-256 |
ec9d4982d06368a694adb775d23a6c98754d4f46a785f7976da76de6eeb591a1
|