Skip to main content

project logo

Fastest way to build and deploy long-running AI agents—with durability, observability, and security.

Docs | Examples

Features

Feature Description Docs
🚀 MCP & tool security The only full FastAPI compatible MCP Server with decorator API Link
🦾 Agent-to-agent Multi-agent communication Link
📊 Observability Agent tracing and monitoring Link
💾 Durable runs Persist, resume, and fork agent runs Durable runs docs
🔍 Tool Search API Reduced tool context bloat Link

🚅 Quick Start

Installation

The recommended method of installing agentor is with pip from PyPI.

pip install agentor

This installs the v0.1.0 line, built on Agentor's own agent engine — durable, forkable runs included.

Tools with heavy or vendor-specific dependencies ship as extras, so the base install stays small:

pip install "agentor[google]"   # GmailTool, CalendarTool
pip install "agentor[all]"      # every optional tool

Available extras: google, exa, git, github, slack, postgres, scrapegraph, all.

More ways...

You can also install the latest bleeding edge version (could be unstable) of agentor, should you feel motivated enough, as follows:

pip install git+https://github.com/celestoai/agentor@main

Build and Serve an Agent

Build an Agent, connect external tools or MCP Server and serve as an API in just a few lines of code:

from agentor.tools import GetWeatherTool
from agentor import Agentor

agent = Agentor(
    name="Weather Agent",
    model="gpt-5-mini",  # Use any LLM provider - gemini/gemini-2.5-pro or anthropic/claude-3.5
    tools=[GetWeatherTool()]
)
result = agent.run("What is the weather in London?")  # Run the Agent
print(result)

# Serve Agent with a single line of code
agent.serve()

Any OpenAI-compatible provider

Point base_url at any provider that speaks OpenAI's /chat/completions — OpenRouter, Groq, Together, Fireworks, DeepSeek, vLLM, Ollama, or Anthropic's and Gemini's compatible endpoints — with no extra dependency:

agent = Agentor(
    name="Assistant",
    model="openrouter/auto",
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

Run the following command to query the Agent server:

curl -X 'POST' \
  'http://localhost:8000/chat' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "input": "What is the weather in London?"
}'

agent.serve() gives you an ordinary ASGI app, so host it wherever you already run Python services.

Durable Runs

Give the agent a store and every run becomes an append-only event log that survives process death. Resume an interrupted run, or fork any persisted run — even a completed one — into a new, independent run that keeps the full trace, the model's reasoning included when the provider returns it:

from agentor import Agentor
from agentor.engine.store import FileStore

agent = Agentor(name="Assistant", model="gpt-5-mini", store=FileStore("runs"))

result = agent.run("Draft a launch plan")   # persisted under result.run_id
# Interrupted mid-run? agent.resume(result.run_id) picks up where it left off.

fork = agent.fork(result.run_id, "Make it punchier")  # fork.run_id is a new run; parent untouched

fork and resume have async twins, afork and aresume.

Tracing

Tracing is off unless you ask for it. A trace carries prompts, tool arguments, tool results, and the model's reasoning when a provider returns it — so nothing leaves your process by default.

Turn it on for an agent:

agent = Agentor(name="Assistant", enable_tracing=True)   # needs CELESTO_API_KEY

Or decide per run:

agent.run("public question")
agent.run("contains customer data", tracing=False)  # this run sends nothing
agent.run("debug this", tracing=True)               # trace just this one

tracing= is accepted by run, arun, chat and stream_chat. View traces at celesto.ai/observe.

Agent Skills

Skills are folders of instructions, scripts, and resources that Claude loads dynamically to improve performance on specialized tasks.

Agent Skills help agents pull just the right context from simple Markdown files. The agent first sees only a skill’s name and short description. When the task matches, it loads the rest of SKILL.md, follows the steps, and can call a shell environment to run the commands the skill points to.

  • Starts light: discover skills by name/description only
  • Loads on demand: pull full instructions from SKILL.md when relevant
  • Executes safely: run skill-driven commands in an isolated shell

Skill layout example:

example-skill/
├── SKILL.md        # required instructions + metadata
├── scripts/        # optional helpers the agent can call
├── assets/         # optional templates/resources
└── references/     # optional docs or checklists

Using a skill to create a GIF:

from agentor.tools import ShellTool
from agentor import Agentor

agent = Agentor(
    name="Assistant",
    model="gemini/gemini-3-flash-preview",
    instructions="Your job is to create GIFs. Lean on the shell tool and any available skills.",
    skills=[".skills/slack-gif-creator"],
    tools=[ShellTool()],
)

async for chunk in await agent.chat("produce a cat gif", stream=True):
    print(chunk)

Create an Agent from Markdown

Bootstrap an Agent directly from a markdown file with metadata for name, tools, model, and temperature:

---
name: WeatherBot
tools: [get_weather]
model: gpt-4o-mini
temperature: 0.3
---
You are a concise weather assistant.

Load it with:

from agentor import Agentor

agent = Agentor.from_md("agent.md")
result = agent.run("Weather in Paris?")

Build a custom MCP Server with LiteMCP

Agentor enables you to build a custom MCP Server using LiteMCP. You can run it inside a FastAPI application or as a standalone MCP server.

Agentor uses the official MCP Python SDK 2.3 or newer within the 2.x line. FastMCP is not an Agentor dependency; the LiteMCP decorator API is unchanged.

from agentor.mcp import LiteMCP, get_token

mcp = LiteMCP(name="my-server", version="1.0.0")

@mcp.tool(description="Get weather for a given location")
def get_weather(location: str) -> str:

    # *********** Control authentication ***********
    token = get_token()
    if token != "SOME_SECRET":
        return "Not authorized"

    return f"Weather in {location}: Sunny, 72°F"

mcp.serve()

LiteMCP vs FastMCP

Key Difference: LiteMCP is a native ASGI app that integrates directly with FastAPI using standard patterns. FastMCP requires mounting as a sub-application, diverging from standard FastAPI primitives.

Feature LiteMCP FastMCP
Integration Native ASGI Requires mounting
FastAPI Patterns ✅ Standard ⚠️ Diverges
Built-in CORS ✅ ❌
Custom Methods ✅ Full ⚠️ Limited
With Existing Backend ✅ Easy ⚠️ Complex

📖 Learn more

Connect an Agent to an MCP Server

Use MCPServer for a remote server that supports Streamable HTTP. Agentor discovers its tools, including paginated results, and closes the connection after the run:

from agentor import Agentor
from agentor.mcp import MCPServer

agent = Agentor(
    name="Assistant",
    model="gpt-5-mini",
    tools=[MCPServer(url="https://your-server.example/mcp")],
)

Hosts that supply their own HTTP transport can pass http_client_factory to MCPServer. The factory receives headers and timeout keyword arguments and must return a new httpx2.AsyncClient. Agentor owns that client's lifecycle, closing it when connection setup fails or the MCP connection closes.

Search the web through MCP

The Parallel Search example connects an agent to web search and page extraction without a Parallel API key. It also includes a tools-only mode that runs without model credentials:

uv run python examples/parallel_search.py --tools-only "Agentor durable agent runs"

Agent-to-Agent (A2A) Protocol

The A2A Protocol defines standard specifications for agent communication and message formatting, enabling seamless interoperability between different AI agents.

Key Features:

  • Standard Communication: JSON-RPC based messaging with support for both streaming and non-streaming responses
  • Agent Discovery: Automatic agent card generation at /.well-known/agent-card.json describing agent capabilities, skills, and endpoints
  • Rich Interactions: Built-in support for tasks, status updates, and artifact sharing between agents

Agentor makes it easy to serve any agent as an A2A protocol.

from agentor import Agentor

agent = Agentor(
    name="Weather Agent",
    model="gpt-5-mini",
    tools=["get_weather"],
)

# Serve agent with A2A protocol enabled automatically
agent.serve(port=8000)
# Agent card available at: http://localhost:8000/.well-known/agent-card.json

Any agent served with agent.serve() automatically becomes A2A-compatible with standardized endpoints for message sending, streaming, and task management.

📖 Learn more

🤝 Contributing

We'd love your help making Agentor even better! Please read our Contributing Guidelines and Code of Conduct.

📄 License

Apache 2.0 License - see LICENSE for details.


Built with 🧡 in London by Celesto AI

Metadata

Release files for agentor 0.1.1

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

Source distribution (sdist)

Source distribution for agentor 0.1.1
File Size Uploaded Provenance Actions
agentor-0.1.1.tar.gz 143.1 kB With provenance Details for agentor-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for agentor 0.1.1
File Interpreter ABI Platform Actions
agentor-0.1.1-py3-none-any.whl Python 3 none any Details for agentor-0.1.1-py3-none-any.whl

Total release size: 231.7 kB

Release files / agentor-0.1.1.tar.gz

Download URL agentor-0.1.1.tar.gz
Size 143.1 kB
Tags Source
SHA-256 checksum
How to use checksums
276fbb3bf9bb0cebaa16d7e780c5db363b19792defddfee3730175043e7313c4
BLAKE2b-256 checksum
How to use checksums
0c3e0a08f63b0ebef308c19bd4a5eccb8f5f3682160b0857fffb9c96f28fb5c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / agentor-0.1.1-py3-none-any.whl

Download URL agentor-0.1.1-py3-none-any.whl
Size 88.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3c780fb9356cbaea2a7cedb36136808ded51286e41d10cee264ab1085a61d7e
BLAKE2b-256 checksum
How to use checksums
19b0c567f5468340e8a4b1ef4b700c80a6090cb6f50481ccf735c17a63062583
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Security for agentor 0.1.1

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for agentor-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

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