github Python analyzed 3b01a57

escapeWu/perplexity-ai

github

A third-party Perplexity MCP/REST API implementation that leverages Pro account Pool to provide unlimited quota for ask and deep search capabilities.

maintainer
escapeWu
licence
MIT
first seen
2026-07-28
last seen
2026-09-18
releases · 30d
0
short id

Drift inferred · capture-to-capture

tool count over time

08-11 20:38 now
7t
2t
capabilities 7 tools
transport stdio · streamable-http · http counts 7 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • get_skill_index
  • get_tasks_use
  • perplexity_ask_v2
  • perplexity_research_v2
  • perplexity_task_cancel
  • perplexity_task_status
  • perplexity_task_submit
skills & danger signals github-tarball
code evidence vv1.15.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 106

filesystem 23

  • fs (weak) escapeWu-perplexity-ai-3b01a57/.agents/skills/perplexity-search/scripts/cli.py :11 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/config.py :10 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/logger.py :11 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/model_catalog_sync.py :11 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/model_registry.py :13 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/admin.py :283 import pathlib
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/client_pool.py :12 import pathlib
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/config_store.py :5 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/file_sources.py :9 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/files_store.py :11 from pathlib import Path
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/job_runtime.py :62 self.lock_file = path.open("a+")
  • fs escapeWu-perplexity-ai-3b01a57/perplexity/server/webui_sessions.py :13 from pathlib import Path
show 11 more
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_client_model_mappings.py :5 from pathlib import Path
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_client_pool.py :148 @patch("pathlib.Path.exists", return_value=False)
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_job_runtime.py :197 config = json.loads(open(pool._config_path).read())
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_mcp.py :15 from pathlib import Path
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_model_catalog_sync.py :4 from pathlib import Path
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_model_registry.py :5 from pathlib import Path
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_oai.py :13 from pathlib import Path
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_retry_logic.py :72 with open(config_file, "w") as f:
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_tier_routing.py :17 patch("pathlib.Path.exists", return_value=False),
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_version_consistency.py :3 from pathlib import Path
  • fs (weak) escapeWu-perplexity-ai-3b01a57/tests/test_webui_sessions.py :3 from pathlib import Path

network 7

  • net (weak) escapeWu-perplexity-ai-3b01a57/.agents/skills/perplexity-search/scripts/cli.py :13 from urllib.error import HTTPError, URLError
  • net escapeWu-perplexity-ai-3b01a57/perplexity/model_catalog_sync.py :13 from urllib.parse import urlsplit
  • net escapeWu-perplexity-ai-3b01a57/perplexity/model_registry.py :456 from curl_cffi import requests
  • net escapeWu-perplexity-ai-3b01a57/perplexity/server/client_pool.py :1015 import aiohttp
  • net escapeWu-perplexity-ai-3b01a57/perplexity/server/file_sources.py :7 import socket
  • net (weak) escapeWu-perplexity-ai-3b01a57/tests/conftest.py :5 import socket
  • net (weak) escapeWu-perplexity-ai-3b01a57/tests/test_oai.py :16 import httpx

secrets 6

  • secrets (weak) escapeWu-perplexity-ai-3b01a57/.agents/skills/perplexity-search/scripts/cli.py :92 os.environ.get("MCP_TOKEN")
  • secrets escapeWu-perplexity-ai-3b01a57/perplexity/config.py :301 ADMIN_TOKEN: Optional[str] = os.getenv("PPLX_ADMIN_TOKEN", None)
  • secrets escapeWu-perplexity-ai-3b01a57/perplexity/server/app.py :31 MCP_TOKEN = os.getenv("MCP_TOKEN", "sk-123456")
  • secrets escapeWu-perplexity-ai-3b01a57/perplexity/server/client_pool.py :241 csrf_token = os.getenv("PPLX_NEXT_AUTH_CSRF_TOKEN")
  • secrets (weak) escapeWu-perplexity-ai-3b01a57/tests/test_mcp.py :29 MCP_TOKEN = os.getenv("MCP_TOKEN", "sk-123456")
  • secrets (weak) escapeWu-perplexity-ai-3b01a57/tests/test_oai.py :26 MCP_TOKEN = os.getenv("MCP_TOKEN", "sk-123456")

database 4

  • db escapeWu-perplexity-ai-3b01a57/perplexity/server/job_runtime.py :5 import sqlite3
  • db escapeWu-perplexity-ai-3b01a57/perplexity/server/job_store.py :7 import sqlite3
  • db escapeWu-perplexity-ai-3b01a57/perplexity/server/webui_sessions.py :8 import sqlite3
  • db (weak) escapeWu-perplexity-ai-3b01a57/tests/test_webui_sessions.py :1 import sqlite3

tool registrations 7

  • perplexity_ask_v2 escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :183
  • perplexity_research_v2 escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :231
  • perplexity_task_submit escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :263
  • perplexity_task_status escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :287
  • perplexity_task_cancel escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :312
  • get_skill_index escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :368
  • get_tasks_use escapeWu-perplexity-ai-3b01a57/perplexity/server/mcp.py :376

declared dependencies 12

  • fastmcp@>=2.14.2,<3.0.0
  • curl_cffi@>=0.15.0,<0.16.0
  • python-dotenv@>=1.0.0
  • aiohttp@>=3.9.0
  • aiohttp-socks@>=0.11.0
  • pytest@>=7.4.0
  • pytest-asyncio@>=0.21.0
  • pytest-cov@>=4.1.0
  • black@>=23.0.0
  • mypy@>=1.5.0
  • flake8@>=6.0.0
  • isort@>=5.12.0