Vendor Tools (PraisonAI-Tools)
Install third-party API tools (Stripe, Slack, Jira, financial data, etc.) as pip plugins from PraisonAI-Tools
Vendor tools are third-party API integrations you add to an agent with one pip install and a name in tools=[].
Quick Start
- Install the plugin
bash pip install praisonai-tools-stripe - Use it in your agent
python from praisonaiagents import Agent agent = Agent( name="Finance Analyst", instructions="Analyze market data", tools=["stripe_balance"], ) agent.start("What is our current Stripe balance?")The tool is auto-discovered by name after install — no imports needed.
How It Works
The agent resolves a tool name to a vendor plugin installed through pip, calls the vendor API, and replies with the result.
Installed plugins register under the praisonai.tools entry-point group and become available by name — the same mechanism documented in Custom Tools.
Three-Tier Tool Ecosystem
PraisonAI tools live in three places. Pick the tier that matches where your tool belongs.
| Tier | Where it lives | Use for |
|---|---|---|
| Core legacy bundled | praisonaiagents.tools (e.g. tavily_tools.py, exa_tools.py, github_tools.py, duckduckgo_tools.py, searxng_tools.py, spider_tools.py, crawl4ai_tools.py, youdotcom_tools.py, jira_tools.py, email_tools.py) | Backward-compat only — not a template for new modules |
| PraisonAI-Tools pip plugins | PraisonAI-Tools | All new vendor / third-party API integrations |
| Custom / single-file | Your project | Your own project-local logic |
Keep in Core or Route Out?
A tool only stays in praisonaiagents.tools if both left-column conditions hold. Any right-column condition routes it to PraisonAI-Tools.
Keep in core praisonaiagents.tools | Route to PraisonAI-Tools |
|---|---|
| Local-state only — filesystem, shell, Python, AST, todo, schedule — or framework plumbing (delegation, subagent, session, artifact, memory, clarify) | Calls a third-party / remote API or SaaS |
| Uses only stdlib or already-required core deps | Needs service-specific auth or SDK; is a vendor connector (search, data, CRM, DB, messaging) |
Your own project logic? Use a custom tool or single-file plugin instead.
Install Flow
Install one or more vendor plugins, then reference each by name.
- Install plugins
bash pip install praisonai-tools-stripe - Add tool names to your agent
python from praisonaiagents import Agent agent = Agent( name="Finance Analyst", instructions="Analyze market data", tools=["yfinance", "stripe_balance"], ) agent.start("Summarise AAPL year-to-date and our Stripe balance")
How Auto-Discovery Works
Plugins declare a praisonai.tools entry point in their pyproject.toml; PraisonAI scans these on first use and registers each tool by name.
[project.entry-points."praisonai.tools"]
stripe_balance = "praisonai_tools_stripe:StripeBalanceTool"See the Creating a Pip-Installable Tool Package section for the full publish flow.
Routing is Not Fencing
Installing a vendor plugin decides where the code lives. It does not decide how the LLM treats its results.
A vendor result is only fenced (wrapped in <external_tool_result> safety markers) when one of these is true:
- the tool name is in the module-level
EXTERNAL_TOOL_NAMESset, or - it was registered with
ToolTrustLevel.EXTERNAL.
Register your vendor tool for fencing at startup:
from praisonaiagents import Agent
from praisonaiagents.tools.trust import add_external_tool
add_external_tool("stripe_balance")
agent = Agent(
name="Finance Analyst",
instructions="Analyze market data",
tools=["stripe_balance"],
)
agent.start("What is our current Stripe balance?")See Prompt Injection Protection for the full trust layer.
Contributing a New Vendor Tool
Publish your plugin to PraisonAI-Tools and users install it with a single pip install.
Best Practices
Prefer pip plugins for vendor APIs
Any public third-party API or SaaS integration goes in PraisonAI-Tools as an installable plugin, not in core.
Reference tools by name
After pip install, add the tool name to tools=[] — no import line is required.
Keep secrets in the environment
Read API keys from environment variables inside the plugin; never hard-code credentials.
Use custom tools for internal logic
Project-specific logic belongs in a custom tool or single-file plugin, not a published vendor package.