Skip to content
plugmcp
DirectorySkillsCategoriesBlog
EN/δΈ­ζ–‡
Sign inSign up
Home/Servers/PraisonAI

PraisonAI

I
by io.github.MervinPraison

AI Agents Framework with Self Reflection and MCP support

Power your agent

Add this server

The publisher's own command. Not a PlugMCP endpoint.

Local command
uvx praisonai==2.3.42
Provider
Claude Code
claude mcp add io.github.mervinpraison-praisonai -- uvx praisonai==2.3.42

Run in a terminal.

Claude Desktop
{
  "mcpServers": {
    "io.github.mervinpraison-praisonai": {
      "command": "uvx",
      "args": [
        "praisonai==2.3.42"
      ]
    }
  }
}

claude_desktop_config.json

Step-by-step: add this in Claude

Remote URL or a command on your machine? How the two installs differ

Run on PlugMCP

Host a copy with our keys and logs.

A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.

Launch

Related MCP

View more
  • FirecrawlπŸ”₯ Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
  • N
    NotionToken-auth Notion MCP: pages, databases, blocks, comments, files. Runs headless in CI and agents.
  • Context7Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

Related skills

View all
  • reaReverse engineer anything with agents, from app behavior down to native binaries.
  • rea-changelog-updatePrepare or rewrite REA release changelogs and GitHub release notes from pinned Git history, with verified contributor thanks and Release Please synchronization.
  • rea-tool-designDesign or change REA investigation tools, CLI/MCP contracts, provider capabilities, and Evidence semantics.

AI Agents Framework with Self Reflection and MCP support

PraisonAI 🦞

PraisonAI 🦞 β€” Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous, self-improving agents that research, plan, and execute tasks across your apps. From one agent to an entire organization, deployed in 5 lines of code.

curl -fsSL https://praison.ai/install.sh | bash

pip install praisonai


<div align="center">
  <a href="https://docs.praison.ai">
</a>
</div>

---

## 🎯 Use Cases

AI agents solving real-world problems across industries:

| Use Case | Description |
|----------|-------------|
| πŸ” **Research & Analysis** | Conduct deep research, gather information, and generate insights from multiple sources automatically |
| πŸ’» **Code Generation** | Write, debug, and refactor code with AI agents that understand your codebase and requirements |
| ✍️ **Content Creation** | Generate blog posts, documentation, marketing copy, and technical writing with multi-agent teams |
| πŸ“Š **Data Pipelines** | Extract, transform, and analyze data from APIs, databases, and web sources automatically |
| πŸ€– **Customer Support** | Deploy 24/7 support bots on Telegram, Discord, Slack with memory and knowledge-backed responses |
| βš™οΈ **Workflow Automation** | Automate multi-step business processes with agents that hand off tasks, verify results, and self-correct |

---

## πŸš€ Meet your first Agent (Under 1 Minute)

1. Install the lightweight core SDK:
```bash
pip install praisonaiagents
export OPENAI_API_KEY="your-api-key"
  1. Run your first autonomous agent:
from praisonaiagents import Agent

# Give your agent a goal, and watch it work.
agent = Agent(instructions="You are a senior data analyst.")
agent.start("Analyze the top 3 tech trends of 2026 and format as a markdown table.")

🧬 The Five-Layer Agent Stack

Most frameworks hand you one or two layers and leave the rest as homework. PraisonAI covers all five β€” plus the outer layer that decides where your agent actually runs.

Each layer wraps the one inside it. When an agent misbehaves, the layer tells you where to look.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ⬑ MANAGED AGENTS β€” Where does it actually run?                  β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 5 Β· GRAPH β€” Who runs when, and who checks whom?             β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ 4 Β· LOOP β€” When do we stop?                             β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ 3 Β· HARNESS β€” Can it act, and be checked?           β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ 2 Β· CONTEXT β€” Is the right thing in the window? β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 1 Β· PROMPT β€” Did I say it clearly?          β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
LayerThe question it answersPraisonAI
1 Β· PromptDid I say it clearly?instructions=, role/goal/backstory, output=, templates=
2 Β· ContextIs the right thing in the window?memory=, knowledge=, context=, handoff ContextPolicy
3 Β· HarnessCan it act, and be checked?tools=, MCP(), guardrails=, approval=, hooks=, sandbox=
4 Β· LoopWhen do we stop?execution=ExecutionConfig(...), reflection=, autonomy=, doom-loop detection
5 Β· GraphWho runs when, and who checks whom?AgentFlow, route(), parallel(), loop(), repeat()
⬑ ManagedWhere does it actually run?tools_run_on="docker" β€” one shared sandbox for the tools, or run_on="anthropic" for the whole agent

Layer 1 Β· Prompt β€” Did I say it clearly?

Role, instructions, examples, output format.

from praisonaiagents import Agent

agent = Agent(
    role="Senior Data Analyst",
    goal="Turn raw numbers into decisions",
    output="verbose",              # markdown-formatted output
)
agent.start("Summarise Q3 revenue trends")

Layer 2 Β· Context β€” Is the right thing in the window?

Write, select, compress, isolate β€” the four context operations, one parameter each.

from praisonaiagents import Agent

agent = Agent(
    instructions="You are a support engineer.",
    memory={"user_id": "u-42"},    # write    β€” persists across runs (needs a user_id)
    knowledge=["docs/"],           # select   β€” retrieves only what's relevant
    context="summarize",           # compress β€” auto-compacts before the limit
)

Isolate is handoffs=[specialist] β€” a sub-agent inherits the last few messages and the intersection of your tools, not your whole transcript. πŸ“– Handoffs

Layer 3 Β· Harness β€” Can it act, and be checked?

Agent = Model + Harness. Tool dispatch, plus the guides that steer before acting and the sensors that observe after.

from praisonaiagents import Agent, MCP, tool

@tool
def deploy(env: str) -> str:
    """Deploy the current build to an environment."""
    return f"Deployed to {env}"

agent = Agent(
    name="ReleaseEngineer",
    instructions="You are a release engineer.",
    tools=[deploy, MCP("npx -y @modelcontextprotocol/server-filesystem /tmp")],
    approval=True,                 # guide β€” human gate before risky tools run
)
agent.start("Deploy to staging, then list the files you can read")

Layer 4 Β· Loop β€” When do we stop?

Hard iteration caps, budget ceilings, no-progress detection and completion checks β€” every brake is explicit.

from praisonaiagents import Agent, ExecutionConfig

agent = Agent(
    instructions="Fix the failing tests.",
    execution=ExecutionConfig(max_iter=30, max_budget=0.50, on_budget_exceeded="stop"),
    autonomy=True,                 # required to drive the loop with run_autonomous()
)
result = agent.run_autonomous("Refactor the auth module", max_iterations=5)

print(result.completion_reason)
# goal | no_tool_calls | max_iterations | timeout | doom_loop | needs_help | error
# (with on_budget_exceeded="stop", hitting the cap raises BudgetExceededError,
#  surfaced here as completion_reason="error")

Doom-loop detection is on by default. Repeated identical tool calls and Aβ†’Bβ†’Aβ†’B oscillation get caught β€” while a poller whose output keeps changing does not. πŸ“– Doom Loop Detection

Layer 5 Β· Graph β€” Who runs when, and who checks whom?

Topology as a versionable artifact: prompt chaining, routing, parallelisation, orchestrator-worker.

from praisonaiagents import AgentFlow
from praisonaiagents.workflows import route, parallel, repeat

flow = AgentFlow(steps=[
    classifier,
    route({"bug": [bug_agent], "feature": [feature_agent], "default": [triage]}),
    parallel([reviewer, tester]),                      # fan out, join automatically
    repeat(editor, until=lambda ctx: "approved" in ctx.previous_result.lower(),
           max_iterations=3),                          # evaluator–optimizer
])
flow.run("Ticket #123: login fails on Safari")

The same graph is expressible in YAML with no Python at all. πŸ“– AgentFlow

⬑ Outside the stack: Managed Agents β€” Where does it actually run?

The harness is commoditising; where the agent executes is the next multiplier. Rather than burning your laptop's CPU, hand an agent a short-lived cloud sandbox β€” repo, tools and tests run there.

pip install praisonai

The simplest way in is tools_run_on= β€” one whole team or workflow shares one sandbox, so a file written by step 1 is there for step 2. Thinking stays on your machine:

from praisonaiagents import Agent, AgentFlow

writer = Agent(name="Writer", instructions="You write files.")
reader = Agent(name="Reader", instructions="You read files.")

flow = AgentFlow(tools_run_on="docker", steps=[writer, reader])  # or e2b | modal | daytona | flyio
flow.run("Write 'hello' to /workspace/note.txt, then read it back")

Same thing with no Python at all:

name: remote-demo
tools_run_on: docker      # every step shares one sandbox
agents:
  writer: {role: Writer, goal: Write files}
  reader: {role: Reader, goal: Read files}
steps:
  - agent: writer
    action: "Write 'hello' to /workspace/note.txt"
  - agent: reader
    action: "Read /workspace/note.txt"

For a single agent, two words cover it β€” and they answer different questions:

from praisonaiagents import Agent

# A. Only the TOOLS move. Thinking stays on your machine.
agent = Agent(name="builder", instructions="You build things.",
              tools_run_on="docker")   # docker | e2b | modal | daytona | flyio
                                       # tenki | sandlock | ssh | novita | subprocess

# B. The WHOLE agent moves β€” model calls, loop and tools
agent = Agent(name="teacher", instructions="You teach.", run_on="anthropic")  # hosted
agent = Agent(name="builder", instructions="You build.", run_on="docker")     # self-hosted
agent.start("Write a Python script that prints the first 10 primes, then run it")

Ask any object where it runs, and it will tell you:

>>> Agent(name="builder", instructions="x", tools_run_on="docker")
Agent(name='builder', thinks_on='this machine', tools_run_on='a Docker container')

>>> agent.where_does_it_run()
Thinking (the AI model calls) happens on this machine.
Tools run on a Docker container.
Your own tools (check_db) still run on this machine -- only shell, file and
code tools move. They read and write this machine's files.

Naming a place that cannot do the job is a typo, not a preference, so it says so:

>>> Agent(name="x", instructions="i", run_on="e2b")
TypeError: Agent(run_on='e2b') is not valid: run_on= places the whole agent
-- model calls, loop and tools -- on a managed runtime, and 'e2b' runs
commands but cannot host an agent loop.
  To run only the tools there:  Agent(tools_run_on='e2b')

To run one block of code somewhere else, name the place on that call:

agent.execute_code_sync("print(6 * 7)", run_in="sandlock")   # kernel-enforced

See what is running and reclaim strays:

praisonai managed ps          # list running sandboxes
praisonai managed stop --all  # reclaim them

Sandboxes shut themselves down when idle (auto_shutdown, idle_timeout_s), and a post-setup snapshot is reused so the next run skips the image pull and dependency install. Commit a .praisonai/environment.yaml and the environment travels with the repo.

πŸ“– 20 runnable examples Β· manage sessions with praisonai managed sessions list <agent-id> or praisonai managed sessions resume <session-id> "<prompt>"

Stack framing adapted from The Five-Layer Agent Stack and Agent Harnesses vs Orbs.


🌌 The PraisonAI Ecosystem

Start simple with the core SDK, or expand to full visual builders and dashboards when you're ready.

  • Core SDK (praisonaiagents): For pure Python development. pip install praisonaiagents
  • πŸ’» PraisonAI CLI (praisonai): For terminal-based developers. pip install praisonai
  • 🦞 Claw Dashboard: Connect agents directly to Telegram, Slack, or Discord. pip install "praisonai[claw]"
  • πŸ”— Flow Visual Builder: Drag-and-drop workflow creation. pip install "praisonai[flow]"
  • πŸ€– PraisonAI UI: Clean chat interface. pip install "praisonai[ui]"

JavaScript SDK

npm install praisonai

🧠 Supported Providers & Features

Powered by 100+ LLMs (OpenAI, Anthropic, Gemini & local models).

ProviderExample
OpenAIExample
AnthropicExample
Google GeminiExample
OllamaExample
GroqExample
DeepSeekExample
xAI GrokExample
MistralExample
CohereExample
PerplexityExample
FireworksExample
Together AIExample
OpenRouterExample
HuggingFaceExample
Azure OpenAIExample
AWS BedrockExample
Google VertexExample
DatabricksExample
CloudflareExample
AI21Example
ReplicateExample
SageMakerExample
MoonshotExample
vLLMExample

🌟 Why PraisonAI?

FeatureHow
πŸ”ŒMCP Protocol β€” stdio, HTTP, WebSocket, SSEtools=MCP("npx ...")
🧠Planning Mode β€” plan β†’ execute β†’ reasonplanning=True
πŸ”Deep Research β€” multi-step autonomous researchDocs
πŸ€–External Agents β€” orchestrate Claude Code, Gemini CLI, CodexDocs
πŸ”„Agent Handoffs β€” seamless conversation passinghandoffs=[other_agent]
πŸ›‘οΈGuardrails β€” input/output validationDocs
Web Search + Fetch β€” native browsingweb=True
πŸͺžSelf Reflection β€” agent reviews its own outputDocs
πŸ”€Workflow Patterns β€” route, parallel, loop, repeatDocs
🧠Memory (zero deps) β€” works out of the boxmemory=True
FeatureHow
πŸ’‘Prompt Caching β€” reduce latency + costcaching=True
πŸ’ΎSessions + Auto-Save β€” persistent state across restartsauto_save="my-project"
πŸ’­Thinking Budgets β€” control reasoning depthagent.thinking_budget = 1024
πŸ“šRAG + Quality-Based RAG β€” auto quality scoring retrievalDocs
πŸ“ŠModel Router β€” auto-routes to cheapest capable modelDocs
🧊Shadow Git Checkpoints β€” auto-rollback on failureDocs
πŸ“‘A2A Protocol β€” agent-to-agent interopDocs
πŸ“Context Compaction β€” never hit token limitsDocs
πŸ“‘Telemetry β€” OpenTelemetry traces, spans, metricsDocs
πŸ“œPolicy Engine β€” declarative agent behavior controlDocs
πŸ”„Background Tasks β€” fire-and-forget agentsDocs
πŸ”Doom Loop Detection β€” auto-recovery from stuck agentsDocs
πŸ•ΈοΈGraph Memory β€” Neo4j-style relationship trackingDocs
πŸ–οΈSandbox Execution β€” isolated code executionDocs
πŸ–₯️Bot Gateway β€” multi-agent routing across channelsDocs

πŸ“˜ Using Python Code

Unsure whether a result is a bug or model randomness? Check the SDK Behavior Matrix for stream, memory prefetch, structured output, teams and AG-UI.

1. Single Agent

from praisonaiagents import Agent
agent = Agent(instructions="You are a helpful AI assistant")
agent.start("Write a movie script about a robot in Mars")

2. Multi Agents

from praisonaiagents import Agent, Agents

research_agent = Agent(instructions="Research about AI")
summarise_agent = Agent(instructions="Summarise research agent's findings")
agents = Agents(agents=[research_agent, summarise_agent])
agents.start()

3. MCP (Model Context Protocol)

from praisonaiagents import Agent, MCP

# stdio - Local NPX/Python servers
agent = Agent(tools=MCP("npx @modelcontextprotocol/server-memory"))

# Streamable HTTP - Production servers
agent = Agent(tools=MCP("https://api.example.com/mcp"))

# WebSocket - Real-time bidirectional
agent = Agent(tools=MCP("wss://api.example.com/mcp", auth_token="token"))

# With environment variables
agent = Agent(
    tools=MCP(
        command="npx",
        args=["-y", "@modelcontextprotocol/server-brave-search"],
        env={"BRAVE_API_KEY": "your-key"}
    )
)

πŸ“– Full MCP docs β€” stdio, HTTP, WebSocket, SSE transports

4. Custom Tools

from praisonaiagents import Agent, tool

@tool
def search(query: str) -> str:
    """Search the web for information."""
    return f"Results for: {query}"

@tool
def calculate(expression: str) -> float:
    """Safely evaluate a numeric arithmetic expression."""
    import ast
    import operator
    
    # Define allowed operations
    _OPS = {
        ast.Add: operator.add,
        ast.Sub: operator.sub,
        ast.Mult: operator.mul,
        ast.Div: operator.truediv,
        ast.Pow: operator.pow,
        ast.USub: operator.neg,
        ast.UAdd: operator.pos,
    }
    
    def _safe_eval(node):
        if isinstance(node, ast.Constant) and isinstance(node.value, (int, float)):
            return node.value
        elif isinstance(node, ast.BinOp) and type(node.op) in _OPS:
            return _OPS[type(node.op)](_safe_eval(node.left), _safe_eval(node.right))
        elif isinstance(node, ast.UnaryOp) and type(node.op) in _OPS:
            return _OPS[type(node.op)](_safe_eval(node.operand))
        else:
            raise ValueError("Unsupported expression")
    
    try:
        return _safe_eval(ast.parse(expression, mode="eval").body)
    except (ValueError, SyntaxError, TypeError, ZeroDivisionError, OverflowError):
        raise ValueError("Invalid arithmetic expression")

agent = Agent(
    instructions="You are a helpful assistant",
    tools=[search, calculate]
)
agent.start("Search for AI news and calculate 15*4")

⚠️ Security Note: Never use eval(), exec(), or subprocess in tool functions that process LLM-generated or user-supplied input. Always validate and sanitize inputs to prevent code injection attacks. πŸ“– Full tools docs β€” BaseTool, tool packages, 100+ built-in tools

5. Persistence (Databases)

from praisonaiagents import Agent, db

agent = Agent(
    name="Assistant",
    memory={
        "db": db(database_url="postgresql://localhost/mydb"),
        "session_id": "my-session",
    },
)
agent.chat("Hello!")  # Auto-persists messages, runs, traces

πŸ“– Full persistence docs β€” PostgreSQL, MySQL, SQLite, MongoDB, Redis, and 20+ more

6. PraisonAI Claw 🦞 (Dashboard UI)

Connect your AI agents to Telegram, Discord, Slack, WhatsApp and more β€” all from a single command.

pip install "praisonai[claw]"
praisonai claw
Required Environment Variables

Copy .env.example to .env and configure the following variables:

VariableRequiredDescription
OPENAI_API_KEYYesOpenAI API key for all LLM calls
TAVILY_API_KEYYes (Claw)Tavily key for the built-in web-search tool. Get one free at https://app.tavily.com

Open http://localhost:8082 β€” the dashboard comes with 13 built-in pages: Chat, Agents, Memory, Knowledge, Channels, Guardrails, Cron, and more. Add messaging channels directly from the UI.

πŸ“– Full Claw docs β€” platform tokens, CLI options, Docker, and YAML agent mode

7. Langflow Integration πŸ”— (Visual Flow Builder)

Build multi-agent workflows visually with drag-and-drop components in Langflow.

pip install "praisonai[flow]"
praisonai flow

Open http://localhost:7861 β€” use the Agent and Agent Team components to create sequential or parallel workflows. Connect Chat Input β†’ Agent Team β†’ Chat Output for instant multi-agent pipelines.

πŸ“– Full Flow docs β€” visual agent building, component reference, and deployment

8. PraisonAI UI πŸ€– (Clean Chat)

Lightweight chat interface for your AI agents.

pip install "praisonai[ui]"
praisonai ui

πŸ“„ Using YAML (No Code)

Example 1: Two Agents Working Together

Create agents.yaml:

framework: praisonai
topic: "Write a blog post about AI"

agents:
  researcher:
    role: Research Analyst
    goal: Research AI trends and gather information
    instructions: "Find accurate information about AI trends"
    
  writer:
    role: Content Writer
    goal: Write engaging blog posts
    instructions: "Write clear, engaging content based on research"

Run with:

praisonai agents.yaml

The agents automatically work together sequentially

Example 2: Agent with Custom Tool

Create two files in the same folder:

agents.yaml:

framework: praisonai
topic: "Calculate the sum of 25 and 15"

agents:
  calculator_agent:
    role: Calculator
    goal: Perform calculations
    instructions: "Use the add_numbers tool to help with calculations"
    tools:
      - add_numbers

tools.py:

def add_numbers(a: float, b: float) -> float:
    """
    Add two numbers together.
    
    Args:
        a: First number
        b: Second number
    
    Returns:
        The sum of a and b
    """
    return a + b

Run with:

praisonai agents.yaml

πŸ’‘ Tips:

  • Use the function name (e.g., add_numbers) in the tools list, not the file name
  • Tools in tools.py are automatically discovered
  • The function's docstring helps the AI understand how to use it

🎯 CLI Quick Reference

CategoryCommands
Executionpraisonai, --auto, --interactive, --chat
Researchresearch, --query-rewrite, --deep-research
Planning--planning, --planning-tools, --planning-reasoning
Workflowsworkflow run, workflow list, workflow auto
Memorymemory show, memory add, memory search, memory clear
Knowledgeknowledge add, knowledge query, knowledge list
Sessionssession list, session resume, session delete
Toolstools list, tools info, tools search
MCPmcp list, mcp create, mcp enable
Developmentcommit, docs, checkpoint, hooks
Schedulingschedule start, schedule list, schedule stop

πŸ“– Full CLI reference


✨ Key Features

FeatureCodeDocs
Single AgentExampleπŸ“–
Multi AgentsExampleπŸ“–
Auto AgentsExampleπŸ“–
Self Reflection AI AgentsExampleπŸ“–
Reasoning AI AgentsExampleπŸ“–
Multi Modal AI AgentsExampleπŸ“–
FeatureCodeDocs
Simple WorkflowExampleπŸ“–
Workflow with AgentsExampleπŸ“–
Agentic Routing (route())ExampleπŸ“–
Parallel Execution (parallel())ExampleπŸ“–
Loop over List/CSV (loop())ExampleπŸ“–
Evaluator-Optimizer (repeat())ExampleπŸ“–
Conditional StepsExampleπŸ“–
Workflow BranchingExampleπŸ“–
Workflow Early StopExampleπŸ“–
Workflow CheckpointsExampleπŸ“–
FeatureCodeDocs
Code Interpreter AgentsExampleπŸ“–
AI Code Editing ToolsExampleπŸ“–
External Agents (All)ExampleπŸ“–
Claude Code CLIExampleπŸ“–
Gemini CLIExampleπŸ“–
Codex CLIExampleπŸ“–
Cursor CLIExampleπŸ“–
FeatureCodeDocs
Memory (Short & Long Term)ExampleπŸ“–
File-Based MemoryExampleπŸ“–
Claude Memory ToolExampleπŸ“–
Add Custom KnowledgeExampleπŸ“–
RAG AgentsExampleπŸ“–
Chat with PDF AgentsExampleπŸ“–
Data Readers (PDF, DOCX, etc.)CLIπŸ“–
Vector Store SelectionCLIπŸ“–
Retrieval StrategiesCLIπŸ“–
RerankersCLIπŸ“–
Index Types (Vector/Keyword/Hybrid)CLIπŸ“–
Query Engines (Sub-Question, etc.)CLIπŸ“–
FeatureCodeDocs
Deep Research AgentsExampleπŸ“–
Query Rewriter AgentExampleπŸ“–
Native Web SearchExampleπŸ“–
Built-in Search ToolsExampleπŸ“–
Unified Web SearchExampleπŸ“–
Web Fetch (Anthropic)ExampleπŸ“–
FeatureCodeDocs
Planning ModeExampleπŸ“–
Planning ToolsExampleπŸ“–
Planning ReasoningExampleπŸ“–
Prompt ChainingExampleπŸ“–
Evaluator OptimiserExampleπŸ“–
Orchestrator WorkersExampleπŸ“–
FeatureCodeDocs
Data Analyst AgentExampleπŸ“–
Finance AgentExampleπŸ“–
Shopping AgentExampleπŸ“–
Recommendation AgentExampleπŸ“–
Wikipedia AgentExampleπŸ“–
Programming AgentExampleπŸ“–
Math AgentsExampleπŸ“–
Markdown AgentExampleπŸ“–
Prompt Expander AgentExampleπŸ“–
FeatureCodeDocs
Image Generation AgentExampleπŸ“–
Image to Text AgentExampleπŸ“–
Video AgentExampleπŸ“–
Camera IntegrationExampleπŸ“–
FeatureCodeDocs
MCP TransportsExampleπŸ“–
WebSocket MCPExampleπŸ“–
MCP SecurityExampleπŸ“–
MCP ResumabilityExampleπŸ“–
MCP Config ManagementDocsπŸ“–
LangChain Integrated AgentsExampleπŸ“–
FeatureCodeDocs
GuardrailsExampleπŸ“–
Human ApprovalExampleπŸ“–
Rules & InstructionsDocsπŸ“–
FeatureCodeDocs
Async & Parallel ProcessingExampleπŸ“–
ParallelisationExampleπŸ“–
Repetitive AgentsExampleπŸ“–
Agent HandoffsExampleπŸ“–
Stateful AgentsExampleπŸ“–
Autonomous WorkflowExampleπŸ“–
Structured Output AgentsExampleπŸ“–
Model RouterExampleπŸ“–
Prompt CachingExampleπŸ“–
Fast ContextExampleπŸ“–
FeatureCodeDocs
100+ Custom ToolsExampleπŸ“–
YAML ConfigurationExampleπŸ“–
100+ LLM SupportExampleπŸ“–
Callback AgentsExampleπŸ“–
HooksExampleπŸ“–
Middleware SystemExampleπŸ“–
Configurable ModelExampleπŸ“–
Rate LimiterExampleπŸ“–
Injected Tool StateExampleπŸ“–
Shadow Git CheckpointsExampleπŸ“–
Background TasksExampleπŸ“–
Policy EngineExampleπŸ“–
Thinking BudgetsExampleπŸ“–
Output StylesExampleπŸ“–
Context CompactionExampleπŸ“–
FeatureCodeDocs
Sessions ManagementExampleπŸ“–
Auto-Save SessionsDocsπŸ“–
History in ContextDocsπŸ“–
TelemetryExampleπŸ“–
Langfuse TracingDocsπŸ“–
Project Docs (.praison/docs/)DocsπŸ“–
AI Commit MessagesDocsπŸ“–
@Mentions in PromptsDocsπŸ“–
FeatureCodeDocs
Slash CommandsExampleπŸ“–
Autonomy ModesExampleπŸ“–
Cost TrackingExampleπŸ“–
Repository MapExampleπŸ“–
Interactive TUIExampleπŸ“–
Git IntegrationExampleπŸ“–
Sandbox ExecutionExampleπŸ“–
CLI CompareExampleπŸ“–
Profile/BenchmarkDocsπŸ“–
Auto ModeDocsπŸ“–
InitDocsπŸ“–
File InputDocsπŸ“–
Final AgentDocsπŸ“–
Max TokensDocsπŸ“–
FeatureCodeDocs
Accuracy EvaluationExampleπŸ“–
Performance EvaluationExampleπŸ“–
Reliability EvaluationExampleπŸ“–
Criteria EvaluationExampleπŸ“–
FeatureCodeDocs
Skills ManagementExampleπŸ“–
Custom SkillsExampleπŸ“–
FeatureCodeDocs
Agent SchedulerExampleπŸ“–

πŸ’» Using JavaScript Code

npm install praisonai
export OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxx
const { Agent } = require('praisonai');
const agent = new Agent({ instructions: 'You are a helpful AI assistant' });
agent.start('Write a movie script about a robot in Mars');

⚑ Performance

PraisonAI is built for speed, with agent instantiation in around 14ΞΌs. This reduces overhead, improves responsiveness, and helps multi-agent systems scale efficiently in real-world production workloads.

Performance MetricPraisonAI
Avg Instantiation Time14 ΞΌs


⭐ Star History

Star History Chart


* export TAVILY_API_KEY=xxxxx

πŸ” Langfuse Tracing

pip install "praisonai[langfuse]"
praisonai langfuse

πŸŽ“ Video Tutorials

Learn PraisonAI through our comprehensive video series:

TopicVideo
AI Agents with Self ReflectionSelf Reflection
Reasoning Data Generating AgentReasoning Data
AI Agents with ReasoningReasoning
Multimodal AI AgentsMultimodal
AI Agents WorkflowWorkflow
Async AI AgentsAsync
Mini AI AgentsMini
AI Agents with MemoryMemory
Repetitive AgentsRepetitive
IntroductionIntroduction
Tools OverviewTools Overview
Custom ToolsCustom Tools
Firecrawl IntegrationFirecrawl
User InterfaceUI
Crawl4AI IntegrationCrawl4AI
Chat InterfaceChat
Code InterfaceCode
Mem0 IntegrationMem0
TrainingTraining
Realtime Voice InterfaceRealtime
Call InterfaceCall
Reasoning Extract AgentsReasoning Extract

πŸ‘₯ Contributing

We welcome contributions! Fork the repo, create a branch, and submit a PR β†’ Contributing Guide.


❓ FAQ & Troubleshooting

Install the package:

pip install praisonaiagents

Ensure your API key is set:

export OPENAI_API_KEY=your_key_here

For other providers, see Models docs.

# Start Ollama and pull a model
ollama serve
ollama pull llama3.2
from praisonaiagents import Agent

agent = Agent(instructions="You are a helpful assistant", llm="ollama/llama3.2")
agent.start("Why is the sky blue?")

The ollama/ prefix is what selects Ollama's handling β€” tool-call repair, tool-result formatting and the streaming rules small local models need. Or set it by environment instead:

export OPENAI_MODEL_NAME=ollama/llama3.2

Setting only OPENAI_BASE_URL is not enough: with no model named, the OpenAI default (gpt-4o-mini) is sent to Ollama, which answers 404 model 'gpt-4o-mini' not found. Always name the model.

Point at a non-default host with base_url= or OLLAMA_HOST:

agent = Agent(instructions="...", llm="ollama/llama3.2", base_url="http://192.168.1.10:11434")

The same shape works for other local runtimes β€” lm_studio/, vllm/ and hosted_vllm/ with their server's base_url.

See Models docs for more details.

Use the db parameter:

from praisonaiagents import Agent, db

agent = Agent(
    name="Assistant",
    memory={
        "db": db(database_url="postgresql://localhost/mydb"),
        "session_id": "my-session",
    },
)

See Persistence docs for supported databases.

from praisonaiagents import Agent

agent = Agent(
    name="Assistant",
    # Enables file-based memory (no extra deps!)
    memory={"user_id": "user123"},
)

See Memory docs for more options.

from praisonaiagents import Agent, Agents

agent1 = Agent(instructions="Research topics")
agent2 = Agent(instructions="Summarize findings")
agents = Agents(agents=[agent1, agent2])
agents.start()

See Agents docs for more examples.

from praisonaiagents import Agent, MCP

agent = Agent(
    tools=MCP("npx @modelcontextprotocol/server-memory")
)

See MCP docs for all transport options.

Getting Help

  • πŸ“š Full Documentation
  • πŸ› Report Issues
  • πŸ’¬ Discussions

How do I install PraisonAI?
Copy the stdio config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does PraisonAI need an API key?
No required environment variable is listed on this record.
What transport does PraisonAI use?
PraisonAI runs locally over stdio.
When was PraisonAI last checked?
Last checked 2026-10-16. AI Agents Framework with Self Reflection and MCP support

No tool list yet. Remote servers get one after the first health check.

plugmcp

Plug any tool into any agent. MCP servers for people who do not write servers. Gateway for volume, n8n for apps.

  • github.com/TODO
  • x.com/TODO
  • linkedin.com/company/TODO

PlugMCP, 2026

Product
  • Browse
  • Install
  • Host your own
  • Voice mode
  • Browser
Directory
  • All MCP servers
  • Agent skills
  • Categories
  • New
  • Voice
  • Submit a server
Developers
  • Docs
  • Blog
  • What is MCP
  • What is WebMCP
  • Status
Company
  • About
  • Contact
  • Terms
  • Privacy
  • DPA