MCP server hosting for PraisonAI — expose agents and tools to Cursor, Claude Desktop, and other MCP clients.
- capability exposure inferred + 35
- recent drift inferred + 20
- tool safety inferred + 12
- trust mitigators mixed − 16
inferred mixed
The A–E grade is our heuristic synthesis — a "review this" prompt, not a verdict. Each factor is tagged by what backs it: attested (a verifiable record), reported (a third party's claim), or inferred (our own heuristic, e.g. permissions). See methodology.
grade last moved 3d ago · see ecosystem CVEs →
- C · 59 → C · 51
- C · 51 → C · 59
- A · 0 → C · 51
No known CVEs for this server.
- high dangerous code
committed secret: Slack token, Anthropic key, OpenAI key, AWS access key id · dynamic exec: __import__(), eval()/exec(), __import__ sink
analyzed commit 0bde2ec · analyzer v33 · 1d ago
skills & prompt files 9
- agent-rules MervinPraison-PraisonAI-0bde2ec/AGENTS.md
- skill MervinPraison-PraisonAI-0bde2ec/examples/skills/pdf-processing/SKILL.md
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/.cursorrules
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/AGENTS.md
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/.windsurfrules
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-rust/AGENTS.md
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-ts/.cursorrules
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-ts/.windsurfrules
- agent-rules MervinPraison-PraisonAI-0bde2ec/src/praisonai-ts/AGENTS.md
danger signals62
- dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/examples/performance/benchmark_example.py :23
__import__(module_name) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/examples/python/agents/code-agent.py :17
exec(code, {"__builtins__": __builtins__}) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/examples/python/agents/math-agent.py :20
result = eval(safe_expr) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/examples/python/managed-agents/provider/local_advanced.py :50
val = eval(compile(tree, "<expr>", "eval"), {"__builtins__": {}}) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/examples/serve/mcp_http_server.py :73
eval(compile(tree, "<expr>", "eval"), {"__builtins__": {}}) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/examples/serve/unified_server.py :151
result = eval(compile(tree, "<expr>", "eval"), {"__builtins__": {}}) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/praisonaiagents/tools/python_tools.py :667
exec(compiled_code, globals_dict, locals_dict) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/a2a/test_agent_card.py :110
return str(eval(expression)) - dynamic code execution __import__ sink MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/benchmarks/output_mode_benchmark.py :43
env={**dict(__import__('os').environ), 'PYTHONDONTWRITEBYTECODE': '1'} - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/test_llm_self_reflection_direct.py :20
result = eval(expression) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/test_self_reflection_fix_simple.py :18
result = eval(expression) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/test_self_reflection_fix_verification.py :18
result = eval(expression) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/unit/session/test_session_docs_examples.py :279
exec(compile(code, f"<{_block_id(block)}>", "exec"), - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/unit/test_provider_matrix.py :381
sources.append(getattr(__import__(module, fromlist=[attr]), attr)) - dynamic code execution __import__ sink MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/praisonai_bot/cli/features/gateway.py :1054
token = __import__("os").environ.get("GATEWAY_AUTH_TOKEN", "").strip() - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/tests/unit/gateway/test_preflight.py :359
lambda label: __import__( - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/praisonai_code/cli/features/diag.py :156
__import__(dep.split(".")[0]) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/praisonai_code/cli/features/doctor/checks/env_checks.py :474
__import__(package) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/praisonai_code/cli/features/doctor/checks/performance_checks.py :28
__import__(module_name) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/praisonai_code/cli/features/doctor/checks/tools_checks.py :318
__import__(package) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/praisonai_code/cli/features/job_workflow.py :376
result = eval(compile(tree, "<workflow>", "eval"), namespace) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/tests/unit/test_standalone_stub_commands.py :84
module = __import__( - dynamic code execution __import__ sink MervinPraison-PraisonAI-0bde2ec/src/praisonai-deploy/tests/test_compose_helm_starters.py :324
@pytest.mark.skipif(__import__("os").name != "posix", reason="POSIX file mode only") - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-mcp/praisonai_mcp/mcp_server/cli.py :835
__import__(dep) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai-sandbox/tests/test_daytona.py :50
else __import__(name, *a, **k), - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/benchmarks/simple_benchmark.py :30
__import__(module_name) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/praisonai/cli_backends/__init__.py :26
_mod = __import__(f"praisonai_code.cli_backends.{_name}", fromlist=[_name]) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/praisonai/profiler.py :1303
__import__(module_name) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/praisonai/recipe/core.py :892
__import__(import_name) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/praisonai/runtime/__init__.py :31
_mod = __import__(f"praisonai_code.runtime.{_name}", fromlist=[_name]) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/praisonai/templates/loader.py :507
__import__(package.replace("-", "_")) - dynamic code execution __import__() MervinPraison-PraisonAI-0bde2ec/src/praisonai/praisonai/templates/registry.py :309
package = __import__(package_name) - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/test_async_agents.py :194
result = eval(expression) # Simple eval for testing - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/test_install_no_browser_download.py :81
exec(compile(ast.parse(source), str(BUILD), "exec"), ns) # noqa: S102 - dynamic code execution eval()/exec() MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/test_tools_and_ui.py :24
result = eval(expression) # Simple eval for testing - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/examples/python/tools/trafilatura/trafilatura_example.py :202
"http://169.254.169.254/metadata" - suspicious endpoint eu.i.posthog.com (telemetry) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/praisonaiagents/telemetry/telemetry.py :226
host='https://eu.i.posthog.com', - suspicious endpoint eu.i.posthog.com (telemetry) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/test_posthog_detailed.py :25
host='https://eu.i.posthog.com' - suspicious endpoint eu.i.posthog.com (telemetry) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/test_posthog_error.py :12
host='https://eu.i.posthog.com', - suspicious endpoint eu.i.posthog.com (telemetry) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/test_posthog_import.py :18
host='https://eu.i.posthog.com' - suspicious endpoint eu.i.posthog.com (telemetry) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/test_posthog_fixed.py :24
host='https://eu.i.posthog.com' - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/unit/test_security_audit_fixes.py :52
assert url_safety.validate_searxng_url("http://169.254.169.254/latest/meta-data/") is None - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/unit/test_security_outstanding_ghsas.py :85
result = web_crawl("http://169.254.169.254/latest/meta-data/") - suspicious endpoint api.telegram.org
expected for this server's purpose
MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/praisonai_bot/bots/_telegram_approval.py :115
url = f"https://api.telegram.org/bot{self._token}/{method}" - suspicious endpoint api.telegram.org
expected for this server's purpose
MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/praisonai_bot/bots/telegram.py :2117
url = f"https://api.telegram.org/bot{self._token}/getMe" - suspicious endpoint t.me
expected for this server's purpose
MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/praisonai_bot/cli/features/onboard.py :100
"token_help": "Get from @BotFather on Telegram: https://t.me/BotFather", - suspicious endpoint api.telegram.org
expected for this server's purpose
MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/praisonai_bot/scheduler/_standalone_sender.py :241
url = f"https://api.telegram.org/bot{token}/sendMessage" - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/tests/unit/bots/test_inbound_media.py :60
assert not _is_safe_url("http://169.254.169.254/latest/meta-data") - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/tests/unit/test_bot_fixes.py :555
"url_private_download": "http://169.254.169.254/latest/meta-data/", - suspicious endpoint www.datadoghq.com (telemetry) MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/praisonai_code/cli/features/observability.py :261
"docs": "https://www.datadoghq.com/product/llm-observability/", - suspicious endpoint example.ngrok.app MervinPraison-PraisonAI-0bde2ec/src/praisonai-code/tests/unit/cli/test_cli_surface_defects.py :332
monkeypatch.setattr(call_mod, "setup_public_url", lambda port: "https://example.ngrok.app") - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/scheduler/test_condition_gate.py :393
"http://169.254.169.254/latest/meta-data", - suspicious endpoint 169.254.169.254 (cloud metadata) MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/test_security_outstanding_ghsas.py :47
assert validate_searxng_url("http://169.254.169.254/latest/meta-data/") is None - committed secret Slack token MervinPraison-PraisonAI-0bde2ec/docker/.env.template :17
xoxb-y…(25 chars, redacted) - committed secret Slack token MervinPraison-PraisonAI-0bde2ec/docker/bots/.env.template :8
xoxb-y…(25 chars, redacted) - committed secret Slack token MervinPraison-PraisonAI-0bde2ec/src/praisonai-agents/tests/integration/test_bots_integration.py :57
xoxb-s…(16 chars, redacted) - committed secret Slack token MervinPraison-PraisonAI-0bde2ec/src/praisonai-bot/praisonai_bot/bots/slack.py :102
xoxb-Y…(19 chars, redacted) - committed secret Anthropic key MervinPraison-PraisonAI-0bde2ec/src/praisonai-desktop/engine/test_settings_redaction.py :45
sk-ant…(36 chars, redacted) - committed secret AWS access key id MervinPraison-PraisonAI-0bde2ec/src/praisonai-mobile/ui/src/a11y/announce.test.ts :159
AKIA01…(20 chars, redacted) - committed secret Anthropic key MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/cli/test_profiler.py :297
sk-ant…(39 chars, redacted) - committed secret OpenAI key MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/cli/test_setup_command.py :148
sk-def…(26 chars, redacted) - committed secret Anthropic key MervinPraison-PraisonAI-0bde2ec/src/praisonai/tests/unit/doctor/test_formatters.py :34
sk-ant…(39 chars, redacted)
- recent drift +20 capability drift →
Heuristic, inferred signals — false positives (legitimately powerful tools, forks, language ports) are expected. Treat each as "review this", not a verdict. See the ecosystem-wide picture on the security hub, or the fleet security of MervinPraison.