PraisonAI MCP Server
PraisonAI can expose its capabilities via the Model Context Protocol (MCP), allowing integration with Claude Desktop, Cursor, Windsurf, VSCode, and other MCP-compatible clients.As of C12, the MCP server host ships as the standalone
praisonai-mcp Tier-2 package. This page documents the heavy MCP host, whether you run it via praisonai-mcp (standalone) or praisonai mcp (umbrella). Both invocations are equivalent for host commands. See the praisonai-mcp Package guide and The Three MCP Layers for how it fits.To serve a single recipe as a scoped MCP server with praisonai mcp serve-recipe, see the Recipe → MCP Bridge guide.Since the release cut from PraisonAI PR #4311: the
knowledge, hooks, session, tools, eval, workflow.run / run_file / auto, audio, guardrails, ocr, a2a, containers, skills, and realtime MCP tools were rebound onto real core APIs and now execute correctly. Prior releases returned "Error: … not available" or "has no attribute …" for these tools even with the module installed. Tool names and args are unchanged. See PraisonAI issue #4304.Protocol Version
PraisonAI MCP Server implements MCP Protocol Version 2025-11-25.Quick Start
STDIO Transport (Recommended for Claude Desktop)
HTTP Stream Transport
Features
- 80+ MCP Tools - Access all PraisonAI capabilities as MCP tools (86 registered by
praisonai-mcp serve) - 7 MCP Resources - Read-only access to configuration and status
- 7 MCP Prompts - Pre-built prompts for common tasks
- STDIO Transport - For Claude Desktop and local integrations
- HTTP Stream Transport - For web-based integrations
- Session Management - Full session support with resumability
- Origin Validation - Security for HTTP transport
- Progress Notifications - For long-running operations
Installation
Three pathways install the heavy MCP host.CLI Commands
Start Server
The standalonepraisonai-mcp console script and the umbrella praisonai mcp form are equivalent for all host commands.
Layer positioning: this is the heavy host. For the lighter alternatives (client and light server), see The Three MCP Layers.
List Components
The three discovery commands share the same registration surface asserve and
doctor — anything serve exposes at runtime shows up here:
Requires PraisonAI v4.6.154 or later for
list-resources and list-prompts to
return real content on a fresh process. Earlier releases printed
"No resources/prompts registered" even when doctor reported 7 of each — see
upstream PR #3220.Generate Client Config
Since v4.6.154, the generator auto-selects the standalone
praisonai-mcp form when it is on your PATH, and falls back to the umbrella praisonai mcp form otherwise.Health Check
On Windows consoles using a legacy code page (e.g. cp1252),
doctor falls back to ASCII markers ([OK], [--], [X]) instead of the Unicode ✓ ○ ✗ — so it never crashes with UnicodeEncodeError. Add --json for automation on any platform; it never emits Unicode symbols.doctor reference for the JSON payload shape, exit codes, and error output.
Server Options
--log-level only sets the level of the per-server praisonai.mcp_server.<name> logger — it no longer touches the process root logger. Other loggers in the host process (including audit and injection-defense telemetry) keep their own levels, so this is not a “quiet everything” switch.Client Configuration
Since v4.6.154,
praisonai mcp config-generate auto-detects your install type and emits the matching command (praisonai-mcp for standalone, praisonai for umbrella). The blocks below show both forms so you can copy the one that matches your install.Claude Desktop
Add to~/.config/claude/claude_desktop_config.json (macOS/Linux) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
- Standalone (praisonai-mcp)
- Umbrella (praisonai)
Cursor
Add to Cursor MCP settings:- Standalone (praisonai-mcp)
- Umbrella (praisonai)
HTTP Stream Client
Environment Variables
Set these for full functionality:Available Tools
Runpraisonai mcp list-tools to see all available tools. Key categories:
As of PraisonAI PR #4311, the tools below execute against real core — earlier releases returned
"not available" or "has no attribute …" even with the module installed. Now functional (previously silently broken): knowledge.add / .query / .list / .clear / .stats, hooks.list / .stats, session.list / .info / .delete, tools.list / .info / .search, eval.accuracy / .performance, workflow.run / .run_file / .auto, audio.transcribe / .speech, guardrails.check, ocr.extract, a2a.send, containers.file_read / .file_write, skills.load, and realtime.send. The input signatures are unchanged — adapters translate to the new core kwargs internally.Agent Tools
praisonai.agent.chat- Chat with an agentpraisonai.agent.run- Run a task with an agentpraisonai.workflow.run- Run a workflowpraisonai.research.run- Run deep research
Capability Tools
praisonai.chat.completion- Chat completionpraisonai.images.generate- Generate imagespraisonai.audio.transcribe- Transcribe audiopraisonai.audio.speech- Text to speechpraisonai.embed.create- Create embeddingspraisonai.moderate.check- Content moderationpraisonai.rerank- Rerank documentspraisonai.search- Web search
Memory Tools
praisonai.memory.show- Show memorypraisonai.memory.add- Add to memorypraisonai.memory.search- Search memorypraisonai.memory.clear- Clear memory
Knowledge Tools
praisonai.knowledge.add(source)— add a knowledge source (file path, URL, or raw text). Nosource_typeneeded; the store auto-detects.praisonai.knowledge.query- Query knowledgepraisonai.knowledge.list- List sourcespraisonai.knowledge.clear- Clear knowledgepraisonai.knowledge.stats- Corpus statistics
Rules Tools
praisonai.rules.list- List active rulespraisonai.rules.show(rule_name)- Show a specific rulepraisonai.rules.create(rule_name, content)- Create a new rulepraisonai.rules.delete(rule_name)- Delete a rule
Rules Tool Examples
Valid rule names:"team-style.md"✅"coding_standards.txt"✅"PROJECT_RULES"✅
"../../etc/passwd"❌ (contains traversal)"subdir/rule.md"❌ (contains directory separator)".bashrc"❌ (starts with dot)
Available Resources
As of PraisonAI PR #4311,
praisonai://memory/sessions is backed by the session store (get_default_session_store().list_sessions()) and praisonai://knowledge/sources by Knowledge().get_all(). Both previously returned an empty list plus a hidden error.Available Prompts
Python API
Custom Tools
Register custom tools:Security
Origin Validation
For HTTP Stream transport, origin validation is enabled by default:- Localhost binding: Only localhost origins allowed
- External binding: Requires explicit
--allowed-originsconfiguration
Authentication
Use--api-key for Bearer token authentication:
STDIO Transport Reliability
The STDIO transport (praisonai-mcp serve --transport stdio) is hardened to work everywhere your MCP client runs and to survive bad input and shutdown.
- Runs on Windows too — including Windows + Python 3.13, which used to crash. The host reads stdin on a dedicated background thread (named
mcp-stdio-reader) instead of the async pipe API, so it no longer fails withOSError: [WinError 6] The handle is invalidwhen Cursor, Claude Desktop, or Windsurf spawn it with redirected pipes. - Bad input never kills the server — malformed (non-UTF-8) bytes become a JSON-RPC parse error (
-32700) and the server keeps running. - Bounded input queue — incoming lines are capped at
1000with backpressure, so a fast or hostile client can’t grow memory without limit. - Clean shutdown — stopping the server (Ctrl+C or client disconnect) wakes a reader that is blocked on idle-but-open stdin, so it never hangs.
You don’t configure any of this — it’s the default behaviour of the STDIO transport. See MCP STDIO Server Transport for the full picture.
Troubleshooting
Error semantics
A tool response withisError: true means the call failed — either the adapter raised, or it returned an "Error: …" string that the host now surfaces as an error. MCP clients, routers, and retry logic can rely on this field. Adapters that succeed always return isError: false.
Since PraisonAI PR #4311,
_handle_tools_call sets isError: true when an adapter returns a string starting with "Error: ". Earlier releases returned many of those with isError: false, which routers and retry logic treat as success.Check Server Health
Enable Debug Logging
logging/setLevel method. This scopes to the same per-server praisonai.mcp_server.<name> logger, and requires the admin scope when scoped API keys are configured.
Common Issues
- “Missing dependency” - Install with
pip install praisonai[mcp] - “No API keys configured” - Set
OPENAI_API_KEYenvironment variable - “Origin validation failed” - Add origin to
--allowed-origins

