praisonai-mcp 0.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. praisonai_mcp-0.0.2/PKG-INFO +70 -0
  2. praisonai_mcp-0.0.2/README.md +47 -0
  3. praisonai_mcp-0.0.2/praisonai_mcp/__init__.py +26 -0
  4. praisonai_mcp-0.0.2/praisonai_mcp/__main__.py +38 -0
  5. praisonai_mcp-0.0.2/praisonai_mcp/_bootstrap.py +35 -0
  6. praisonai_mcp-0.0.2/praisonai_mcp/_code_bridge.py +28 -0
  7. praisonai_mcp-0.0.2/praisonai_mcp/_version.py +1 -0
  8. praisonai_mcp-0.0.2/praisonai_mcp/_wrapper_bridge.py +36 -0
  9. praisonai_mcp-0.0.2/praisonai_mcp/cli/__init__.py +0 -0
  10. praisonai_mcp-0.0.2/praisonai_mcp/cli/_configuration.py +27 -0
  11. praisonai_mcp-0.0.2/praisonai_mcp/cli/app.py +7 -0
  12. praisonai_mcp-0.0.2/praisonai_mcp/cli/commands/__init__.py +0 -0
  13. praisonai_mcp-0.0.2/praisonai_mcp/cli/commands/mcp.py +861 -0
  14. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/__init__.py +152 -0
  15. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/__init__.py +74 -0
  16. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/agents.py +130 -0
  17. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/capabilities.py +173 -0
  18. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/cli_tools.py +626 -0
  19. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/extended_capabilities.py +467 -0
  20. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/knowledge.py +93 -0
  21. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/memory.py +104 -0
  22. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/prompts.py +306 -0
  23. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/resources.py +124 -0
  24. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/adapters/tools_bridge.py +280 -0
  25. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/auth/__init__.py +48 -0
  26. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/auth/api_key.py +291 -0
  27. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/auth/oauth.py +461 -0
  28. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/auth/oidc.py +289 -0
  29. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/auth/scopes.py +261 -0
  30. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/cli.py +898 -0
  31. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/elicitation.py +445 -0
  32. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/icons.py +302 -0
  33. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/recipe_adapter.py +576 -0
  34. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/recipe_cli.py +826 -0
  35. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/registry.py +718 -0
  36. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/sampling.py +422 -0
  37. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/server.py +610 -0
  38. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/tasks.py +443 -0
  39. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/tool_index.py +481 -0
  40. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/transports/__init__.py +18 -0
  41. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/transports/http_stream.py +525 -0
  42. praisonai_mcp-0.0.2/praisonai_mcp/mcp_server/transports/stdio.py +132 -0
  43. praisonai_mcp-0.0.2/praisonai_mcp.egg-info/PKG-INFO +70 -0
  44. praisonai_mcp-0.0.2/praisonai_mcp.egg-info/SOURCES.txt +48 -0
  45. praisonai_mcp-0.0.2/praisonai_mcp.egg-info/dependency_links.txt +1 -0
  46. praisonai_mcp-0.0.2/praisonai_mcp.egg-info/entry_points.txt +2 -0
  47. praisonai_mcp-0.0.2/praisonai_mcp.egg-info/requires.txt +15 -0
  48. praisonai_mcp-0.0.2/praisonai_mcp.egg-info/top_level.txt +1 -0
  49. praisonai_mcp-0.0.2/pyproject.toml +51 -0
  50. praisonai_mcp-0.0.2/setup.cfg +4 -0
@@ -0,0 +1,70 @@
1
+ Metadata-Version: 2.4
2
+ Name: praisonai-mcp
3
+ Version: 0.0.2
4
+ Summary: MCP server hosting for PraisonAI — expose agents and tools to Cursor, Claude Desktop, and other MCP clients.
5
+ Author: Mervin Praison
6
+ License: MIT
7
+ Project-URL: Homepage, https://docs.praison.ai
8
+ Project-URL: Repository, https://github.com/mervinpraison/PraisonAI
9
+ Requires-Python: <3.15,>=3.10
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: praisonaiagents>=1.6.126
12
+ Requires-Dist: mcp>=1.20.0
13
+ Requires-Dist: rich>=13.7
14
+ Requires-Dist: typer>=0.12.0
15
+ Requires-Dist: click>=8.4.2
16
+ Provides-Extra: server
17
+ Requires-Dist: starlette>=0.36.0; extra == "server"
18
+ Requires-Dist: uvicorn>=0.27.0; extra == "server"
19
+ Provides-Extra: auth
20
+ Requires-Dist: httpx>=0.27.0; extra == "auth"
21
+ Provides-Extra: all
22
+ Requires-Dist: praisonai-mcp[auth,server]; extra == "all"
23
+
24
+ # PraisonAI MCP
25
+
26
+ Host PraisonAI agents and tools as an [MCP](https://modelcontextprotocol.io) server for Cursor, Claude Desktop, and other MCP clients.
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ pip install "praisonai-mcp[all]"
32
+
33
+ # Or via the umbrella product
34
+ pip install "praisonai[mcp]"
35
+ ```
36
+
37
+ ## Quickstart
38
+
39
+ ```bash
40
+ export OPENAI_API_KEY=sk-...
41
+ # Standalone heavy host (full argparse options)
42
+ praisonai-mcp serve --transport stdio
43
+ praisonai-mcp list-tools
44
+ praisonai-mcp doctor
45
+
46
+ # Via umbrella CLI (same host commands on `praisonai mcp …`)
47
+ praisonai mcp serve --transport stdio
48
+ praisonai mcp list-tools
49
+ ```
50
+
51
+ Config management (`list`, `add`, `sync`, `tools`, …) works on both `praisonai-mcp` and `praisonai mcp`.
52
+ Full capability registry requires `praisonai` co-install (`_wrapper_bridge`).
53
+
54
+ ## Three MCP layers (do not conflate)
55
+
56
+ | Layer | Package | Role |
57
+ |-------|---------|------|
58
+ | Client | `praisonaiagents[mcp]` | Connect agents to external MCP servers |
59
+ | Light server | `praisonai-code` (`praisonai serve mcp`) | Basic `ToolsMCPServer` |
60
+ | Heavy host | `praisonai-mcp` (this package) | Full capability/recipe MCP server |
61
+
62
+ ## Stack
63
+
64
+ ```
65
+ praisonaiagents (MCP client protocols)
66
+ └── praisonai-mcp (this package)
67
+ └── praisonai (wrapper shims: praisonai.mcp_server.*)
68
+ ```
69
+
70
+ Boundary details: `src/praisonai/tests/PRAISONAI_MCP_MANIFEST.md`.
@@ -0,0 +1,47 @@
1
+ # PraisonAI MCP
2
+
3
+ Host PraisonAI agents and tools as an [MCP](https://modelcontextprotocol.io) server for Cursor, Claude Desktop, and other MCP clients.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install "praisonai-mcp[all]"
9
+
10
+ # Or via the umbrella product
11
+ pip install "praisonai[mcp]"
12
+ ```
13
+
14
+ ## Quickstart
15
+
16
+ ```bash
17
+ export OPENAI_API_KEY=sk-...
18
+ # Standalone heavy host (full argparse options)
19
+ praisonai-mcp serve --transport stdio
20
+ praisonai-mcp list-tools
21
+ praisonai-mcp doctor
22
+
23
+ # Via umbrella CLI (same host commands on `praisonai mcp …`)
24
+ praisonai mcp serve --transport stdio
25
+ praisonai mcp list-tools
26
+ ```
27
+
28
+ Config management (`list`, `add`, `sync`, `tools`, …) works on both `praisonai-mcp` and `praisonai mcp`.
29
+ Full capability registry requires `praisonai` co-install (`_wrapper_bridge`).
30
+
31
+ ## Three MCP layers (do not conflate)
32
+
33
+ | Layer | Package | Role |
34
+ |-------|---------|------|
35
+ | Client | `praisonaiagents[mcp]` | Connect agents to external MCP servers |
36
+ | Light server | `praisonai-code` (`praisonai serve mcp`) | Basic `ToolsMCPServer` |
37
+ | Heavy host | `praisonai-mcp` (this package) | Full capability/recipe MCP server |
38
+
39
+ ## Stack
40
+
41
+ ```
42
+ praisonaiagents (MCP client protocols)
43
+ └── praisonai-mcp (this package)
44
+ └── praisonai (wrapper shims: praisonai.mcp_server.*)
45
+ ```
46
+
47
+ Boundary details: `src/praisonai/tests/PRAISONAI_MCP_MANIFEST.md`.
@@ -0,0 +1,26 @@
1
+ """MCP server hosting for PraisonAI — expose agents and tools to MCP clients.
2
+
3
+ Example:
4
+ praisonai-mcp serve --transport stdio
5
+
6
+ from praisonai_mcp.mcp_server import MCPServer
7
+ server = MCPServer()
8
+ server.run(transport="stdio")
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from praisonai_mcp._version import __version__
14
+
15
+
16
+ def __getattr__(name: str):
17
+ if name == "MCPServer":
18
+ from praisonai_mcp.mcp_server.server import MCPServer
19
+ return MCPServer
20
+ if name == "handle_mcp_command":
21
+ from praisonai_mcp.mcp_server.cli import handle_mcp_command
22
+ return handle_mcp_command
23
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
24
+
25
+
26
+ __all__ = ["__version__", "MCPServer", "handle_mcp_command"]
@@ -0,0 +1,38 @@
1
+ """Console entry: ``praisonai-mcp``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+
7
+ # Heavy MCP host commands (MCPServerCLI) — not Typer config subcommands.
8
+ _HOST_COMMANDS = frozenset({
9
+ "serve",
10
+ "serve-recipe",
11
+ "list-tools",
12
+ "list-resources",
13
+ "list-prompts",
14
+ "list-recipes",
15
+ "validate-recipe",
16
+ "inspect-recipe",
17
+ "config-generate",
18
+ "config-generate-recipe",
19
+ "tasks",
20
+ "doctor",
21
+ })
22
+
23
+
24
+ def main(argv: list[str] | None = None) -> None:
25
+ args = argv if argv is not None else sys.argv[1:]
26
+ if not args:
27
+ args = ["--help"]
28
+ if args[0] in _HOST_COMMANDS:
29
+ from praisonai_mcp.mcp_server.cli import handle_mcp_command
30
+
31
+ raise SystemExit(handle_mcp_command(args))
32
+ from praisonai_mcp.cli.app import app
33
+
34
+ app(args=args, prog_name="praisonai-mcp")
35
+
36
+
37
+ if __name__ == "__main__":
38
+ main()
@@ -0,0 +1,35 @@
1
+ """Monorepo bootstrap for ``praisonai_mcp`` and optional ``praisonai_code``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from pathlib import Path
7
+
8
+
9
+ def ensure_praisonai_mcp() -> None:
10
+ try:
11
+ import praisonai_mcp # noqa: F401
12
+ return
13
+ except ImportError:
14
+ pass
15
+
16
+ here = Path(__file__).resolve().parents[1]
17
+ if (here / "praisonai_mcp").is_dir():
18
+ root = str(here)
19
+ if root not in sys.path:
20
+ sys.path.insert(0, root)
21
+
22
+
23
+ def ensure_praisonai_code() -> None:
24
+ try:
25
+ import praisonai_code # noqa: F401
26
+ return
27
+ except ImportError:
28
+ pass
29
+
30
+ mcp_src = Path(__file__).resolve().parents[1]
31
+ code_src = mcp_src.parent / "praisonai-code"
32
+ if (code_src / "praisonai_code").is_dir():
33
+ root = str(code_src)
34
+ if root not in sys.path:
35
+ sys.path.insert(0, root)
@@ -0,0 +1,28 @@
1
+ """Lazy access from praisonai-mcp to optional praisonai-code modules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ from typing import Any
7
+
8
+ from praisonai_mcp._bootstrap import ensure_praisonai_code
9
+
10
+
11
+ def code_available() -> bool:
12
+ ensure_praisonai_code()
13
+ try:
14
+ import praisonai_code # noqa: F401
15
+ return True
16
+ except ImportError:
17
+ return False
18
+
19
+
20
+ def import_code_module(name: str) -> Any:
21
+ ensure_praisonai_code()
22
+ try:
23
+ return importlib.import_module(name)
24
+ except ImportError as exc:
25
+ raise ImportError(
26
+ f"Optional code module {name!r} requires praisonai-code. "
27
+ "Install with: pip install praisonai-code"
28
+ ) from exc
@@ -0,0 +1 @@
1
+ __version__ = "0.0.2"
@@ -0,0 +1,36 @@
1
+ """Lazy access from praisonai-mcp to optional praisonai wrapper modules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ from typing import Any, Callable
7
+
8
+
9
+ def wrapper_available() -> bool:
10
+ try:
11
+ import praisonai # noqa: F401
12
+ return True
13
+ except ImportError:
14
+ return False
15
+
16
+
17
+ def import_wrapper_module(name: str) -> Any:
18
+ if not wrapper_available():
19
+ raise ImportError(
20
+ f"Optional wrapper module {name!r} requires the praisonai package. "
21
+ "Install with: pip install praisonai"
22
+ )
23
+ return importlib.import_module(name)
24
+
25
+
26
+ def wrapper_callable(module: str, attr: str) -> Callable[..., Any]:
27
+ return getattr(import_wrapper_module(module), attr)
28
+
29
+
30
+ def optional_wrapper_callable(
31
+ module: str, attr: str, default: Callable[..., Any] | None = None
32
+ ) -> Callable[..., Any] | None:
33
+ try:
34
+ return wrapper_callable(module, attr)
35
+ except ImportError:
36
+ return default
File without changes
@@ -0,0 +1,27 @@
1
+ """Lazy config helpers from praisonai-code (optional co-install)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from praisonai_mcp._code_bridge import import_code_module
6
+
7
+
8
+ def get_config_loader():
9
+ fn = import_code_module("praisonai_code.cli.configuration.loader").get_config_loader
10
+ return fn()
11
+
12
+
13
+ def configuration_schema():
14
+ return import_code_module("praisonai_code.cli.configuration.schema")
15
+
16
+
17
+ def configuration_paths():
18
+ return import_code_module("praisonai_code.cli.configuration.paths")
19
+
20
+
21
+ def configuration_loader_helpers():
22
+ return import_code_module("praisonai_code.cli.configuration.loader")
23
+
24
+
25
+ def get_output_controller():
26
+ fn = import_code_module("praisonai_code.cli.output.console").get_output_controller
27
+ return fn()
@@ -0,0 +1,7 @@
1
+ """Typer CLI for standalone ``praisonai-mcp``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from praisonai_mcp.cli.commands.mcp import app
6
+
7
+ __all__ = ["app"]