Client-neutral MCP server and secure desktop Control Center for Windows/Linux computer automation, with OAuth/Bearer auth, scoped access, UI/browser control, audit logging, and remote HTTPS support.
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution ×5 in TNLegend/PortaMCP
transport stdio · streamable-http · http counts 75 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
browser_click
-
browser_close_page
-
browser_connect_cdp
-
browser_evaluate
-
browser_fill
-
browser_navigate
-
browser_new_page
-
browser_pages
-
browser_press
-
browser_screenshot
-
browser_snapshot
-
browser_start
-
browser_stop
-
chrome_live_activate
-
chrome_live_click
-
chrome_live_detach
-
chrome_live_evaluate
-
chrome_live_fill
-
chrome_live_navigate
-
chrome_live_screenshot
-
chrome_live_snapshot
-
chrome_live_status
-
chrome_live_tabs
-
fs_copy
-
fs_delete
-
fs_exists
-
fs_hash
-
fs_list
-
fs_mkdir
-
fs_move
-
fs_patch_text
-
fs_read_bytes
-
fs_read_text
-
fs_search
-
fs_stat
-
fs_write_text
-
git_add
-
git_commit
-
git_diff
-
git_log
-
git_status
-
input_hotkey
-
input_mouse_click
-
input_mouse_drag
-
input_mouse_move
-
input_mouse_position
-
input_press
-
input_scroll
-
input_type_text
-
linux_active
-
linux_click_control
-
linux_focus
-
linux_list
-
linux_set_text
-
linux_ui_tree
-
process_kill
-
process_list
-
process_start
-
screen_capture
-
screen_capture_region
-
screen_capture_to_file
-
screen_monitors
-
security_emergency_stop_status
-
server_capabilities
-
shell_run
-
shell_session_close
-
shell_session_create
-
shell_session_run
-
system_info
-
windows_active
-
windows_click_control
-
windows_focus
-
windows_list
-
windows_set_text
-
windows_ui_tree
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 6658923 · analyzer v33 · 5d ago
danger signals40
- dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/console.py :181
exec(code, self.locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/main.py :47
exec(startup_code, namespace) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/__main__.py :103
exec(startup_code, console.locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/bdb.py :680
exec(cmd, globals, locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/cProfile.py :104
exec(cmd, globals, locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/code.py :92
exec(code, self.locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/collections/__init__.py :444
__new__ = eval(code, namespace) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/dataclasses.py :498
exec(txt, self.globals, ns) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/dbm/__init__.py :68
mod = __import__(name, fromlist=['open']) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/doctest.py :227
return __import__(module, globals(), locals(), ["*"]) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/doctest.py :1398
exec(compile(example.source, filename, "single", - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/autocomplete.py :185
bigl = eval("dir()", namespace) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/calltip.py :140
return eval(expression, namespace) # Only protect user code. - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/debugobj.py :37
value = eval(text) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/idle_test/test_run.py :55
eval(compile(code, '', 'eval')) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/idle_test/test_squeezer.py :134
text = eval(text_code) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/pyshell.py :282
breakpoint_linenumbers = eval(line[len(filename)+1:]) - dynamic code execution marshal.loads() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/rpc.py :47
co = marshal.loads(ms) - dynamic code execution pickle.loads() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/rpc.py :388
message = pickle.loads(packet) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/run.py :644
exec(code, self.locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/importlib/_bootstrap.py :1176
exec(code, module.__dict__) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/importlib/_bootstrap.py :1462
def __import__(name, globals=None, locals=None, fromlist=(), level=0): - dynamic code execution marshal.loads() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/importlib/_bootstrap_external.py :781
code = marshal.loads(data) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/importlib/util.py :91
parent = __import__(parent_name, fromlist=['__path__']) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/inspect.py :294
else eval(_rewrite_star_unpack(value), globals, locals) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/logging/config.py :99
found = __import__(used) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/logging/config.py :133
defaults = eval(defaults, vars(logging)) - dynamic code execution marshal.loads() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/modulefinder.py :345
co = marshal.loads(memoryview(data)[16:]) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/forkserver.py :196
__import__(modname) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/sharedctypes.py :153
exec(template % ((name,)*7), d) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/optparse.py :873
__import__(modname) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/optparse.py :879
exec(open(filename).read(), vars) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pdb.py :725
exec(source_with_closure, {}, ns) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pickle.py :1077
__import__(module_name, level=0) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pkgutil.py :78
__import__(info.name) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/profile.py :425
exec(cmd, globals, locals) - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pydoc.py :2071
doc(eval(request), 'Help on %s:', output=self._output, is_cli=is_cli) - dynamic code execution __import__() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pydoc.py :2246
name = __import__(modname).__doc__ or '' - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pydoc_data/topics.py :9045
The class body is executed (approximately) as "exec(body, globals(), - dynamic code execution eval()/exec() TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/rlcompleter.py :158
thisobject = eval(expr, self.namespace)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 751
filesystem 160
- fs TNLegend-PortaMCP-6658923/launcher/build-public-archive.py :7
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/audit.py :6
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/chrome_bridge.py :10
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/config.py :7
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/control_center.py :93
self.icon_image = ctk.CTkImage(Image.open(icon_path), size=(34, 34)) - fs TNLegend-PortaMCP-6658923/porta_mcp/control_center_backend.py :7
import shutil - fs TNLegend-PortaMCP-6658923/porta_mcp/http_server.py :6
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/installer.py :3
import shutil - fs TNLegend-PortaMCP-6658923/porta_mcp/local_http_server.py :6
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/oauth_server.py :6
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/platform_support.py :6
import shutil - fs TNLegend-PortaMCP-6658923/porta_mcp/policy.py :5
from pathlib import Path
show 28 more
- fs TNLegend-PortaMCP-6658923/porta_mcp/self_hosted_oauth.py :15
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/server.py :7
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :7
import shutil - fs TNLegend-PortaMCP-6658923/porta_mcp/tools/linux_ui.py :7
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/tools/screen.py :5
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/tools/shell.py :6
from pathlib import Path - fs TNLegend-PortaMCP-6658923/porta_mcp/transport_logging.py :9
from pathlib import Path - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_aix_support.py :15
fp = open("/tmp/_aix_support.%s"%( - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_osx_support.py :66
fp = open("/tmp/_osx_support.%s"%( - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyio.py :26
# open() uses st_blksize whenever we can - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/main.py :45
with tokenize.open(startup_path) as f: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/pager.py :53
os.unlink(filename) - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/readline.py :430
with open(os.path.expanduser(filename), 'rb') as f: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/trace.py :12
trace_file = open(trace_filename, "a") - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_sitebuiltins.py :50
with open(filename, encoding='utf-8') as fp: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/antigravity.py :5
webbrowser.open("https://xkcd.com/353/") - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/argparse.py :170
import shutil - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/ast.py :1859
with open(args.infile, 'rb') as infile: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/__main__.py :101
with tokenize.open(startup_path) as f: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/base_events.py :1413
os.remove(local_addr) - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/unix_events.py :313
os.remove(path) - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/base64.py :614
with open(args[0], 'rb') as f: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/bz2.py :279
def open(filename, mode="rb", compresslevel=9, - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/cProfile.py :50
with open(file, 'wb') as f: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/codecs.py :886
def open(filename, mode='r', encoding=None, errors='strict', buffering=-1): - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/compileall.py :21
from pathlib import Path - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/configparser.py :743
with open(filename, encoding=encoding) as fp: - fs TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/contextlib.py :347
with closing(<module>.open(<arguments>)) as f:
120 more not shown — this panel samples each group; the count above is the real total.
shell / exec 36
- shell TNLegend-PortaMCP-6658923/porta_mcp/control_center.py :4
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/control_center_backend.py :9
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/installer.py :4
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/platform_support.py :7
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/tools/git.py :3
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/tools/input.py :6
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/tools/process.py :4
import subprocess - shell TNLegend-PortaMCP-6658923/porta_mcp/tools/shell.py :5
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_aix_support.py :10
# Similar to os.popen(commandstring, "r").read(), - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_osx_support.py :57
# Similar to os.popen(commandstring, "r").read(), - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_pyrepl/pager.py :39
if hasattr(os, 'system') and os.system('(pager) 2>/dev/null') == 0: - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/base_events.py :25
import subprocess
show 24 more
- shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/base_subprocess.py :2
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/events.py :22
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/subprocess.py :3
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/unix_events.py :11
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/windows_utils.py :12
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/ctypes/_aix.py :53
from subprocess import Popen, PIPE, DEVNULL - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/ctypes/util.py :3
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/ensurepip/__init__.py :2
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/http/server.py :14
If the os.fork() function is not present (Windows), subprocess.Popen() is used, - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/editor.py :744
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/iomenu.py :361
pipe = os.popen(command, "r") - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/pyshell.py :27
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/imaplib.py :1468
"command" - a string that can be passed to subprocess.Popen() - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/popen_spawn_win32.py :6
from subprocess import STARTUPINFO, STARTF_FORCEOFFFEEDBACK - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/util.py :17
from subprocess import _args_from_interpreter_flags - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/os.py :1015
# Supply os.popen() - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/platform.py :284
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pydoc_data/topics.py :12185
also "os.popen()", "os.fdopen()", and the "makefile()" method of - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/subprocess.py :666
>>> import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/turtledemo/__main__.py :136
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/uuid.py :382
proc = subprocess.Popen(command, - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/venv/__init__.py :10
import subprocess - shell TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/webbrowser.py :9
import subprocess - shell (weak) TNLegend-PortaMCP-6658923/tests/test_release.py :9
import subprocess
network 51
- net TNLegend-PortaMCP-6658923/porta_mcp/control_center_backend.py :8
import socket - net TNLegend-PortaMCP-6658923/porta_mcp/log_privacy.py :5
from urllib.parse import urlsplit, urlunsplit - net TNLegend-PortaMCP-6658923/porta_mcp/oauth_server.py :7
from urllib.parse import urlparse - net TNLegend-PortaMCP-6658923/porta_mcp/self_hosted_oauth.py :17
from urllib.parse import parse_qs, urlencode, urlparse - net TNLegend-PortaMCP-6658923/porta_mcp/tools/system.py :5
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/_compat_pickle.py :47
'urllib2': 'urllib.request', - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/base_events.py :23
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/events.py :21
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/proactor_events.py :11
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/selector_events.py :15
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/streams.py :6
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/trsock.py :1
import socket
show 28 more
- net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/unix_events.py :9
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/asyncio/windows_events.py :14
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/email/_header_value_parser.py :72
import urllib # For urllib.parse.unquote - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/email/utils.py :29
import urllib.parse - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/ftplib.py :40
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/http/client.py :77
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/http/cookiejar.py :36
import urllib.parse, urllib.request - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/http/cookies.py :392
import urllib.parse - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/http/server.py :102
import socket # For gethostbyaddr() - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/pyshell.py :26
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/idlelib/rpc.py :37
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/logging/config.py :35
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/logging/handlers.py :33
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/mailbox.py :12
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/mimetypes.py :29
import urllib.parse - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/connection.py :16
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/forkserver.py :6
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/reduction.py :16
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/multiprocessing/resource_sharer.py :13
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/nturl2path.py :4
for urllib.requests, thus do not use directly. - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pathlib/_local.py :446
from urllib.parse import quote_from_bytes - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/platform.py :693
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/poplib.py :18
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pydoc.py :74
import urllib.parse - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/pydoc_data/module_docs.py :273
'urllib.request': 'urllib.request#module-urllib.request', - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/smtplib.py :44
import socket - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/socket.py :17
fromshare() -- create a socket object from data received from socket.share() [*] - net TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/socketserver.py :126
import socket
11 more not shown — this panel samples each group; the count above is the real total.
secrets 2
- secrets TNLegend-PortaMCP-6658923/porta_mcp/control_center_backend.py :3
import getpass - secrets TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/urllib/request.py :2353
import getpass
database 3
- db TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/dbm/sqlite3.py :2
import sqlite3 - db TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/sqlite3/__init__.py :29
import sqlite3 - db TNLegend-PortaMCP-6658923/runtime/python-bootstrap.zip!/Lib/sqlite3/__main__.py :7
import sqlite3
tool registrations 75
- browser_start TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :34
- browser_connect_cdp TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :102
- browser_pages TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :146
- browser_new_page TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :161
- browser_navigate TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :178
- browser_snapshot TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :190
- browser_click TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :211
- browser_fill TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :231
- browser_press TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :252
- browser_evaluate TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :264
- browser_screenshot TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :279
- browser_close_page TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :293
show 28 more
- browser_stop TNLegend-PortaMCP-6658923/porta_mcp/tools/browser.py :306
- chrome_live_status TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :26
- chrome_live_tabs TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :38
- chrome_live_snapshot TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :48
- chrome_live_activate TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :65
- chrome_live_navigate TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :76
- chrome_live_click TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :87
- chrome_live_fill TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :103
- chrome_live_evaluate TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :133
- chrome_live_screenshot TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :146
- chrome_live_detach TNLegend-PortaMCP-6658923/porta_mcp/tools/current_chrome.py :161
- fs_list TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :88
- fs_stat TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :131
- fs_read_text TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :141
- fs_read_bytes TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :158
- fs_write_text TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :172
- fs_patch_text TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :193
- fs_search TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :214
- fs_hash TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :295
- fs_copy TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :310
- fs_exists TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :345
- fs_mkdir TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :354
- fs_move TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :365
- fs_delete TNLegend-PortaMCP-6658923/porta_mcp/tools/filesystem.py :393
- git_status TNLegend-PortaMCP-6658923/porta_mcp/tools/git.py :26
- git_diff TNLegend-PortaMCP-6658923/porta_mcp/tools/git.py :34
- git_log TNLegend-PortaMCP-6658923/porta_mcp/tools/git.py :45
- git_add TNLegend-PortaMCP-6658923/porta_mcp/tools/git.py :53
35 more not shown — this panel samples each group; the count above is the real total.
declared dependencies 15
- mcp@>=2.1.1,<2.2
- uvicorn@>=0.30
- websockets@>=13
- customtkinter@>=5.2.2
- starlette@>=0.37
- httpx@>=0.27
- psutil@>=6.0
- mss@>=10.0
- pyautogui@>=0.9.54
- pillow@>=10.0
- playwright@>=1.50
- python3-xlib@>=0.15; sys_platform ==
show 3 more
- win32@*
- pytest@>=8
- ruff@>=0.6
transport_posture 1
- binds all interfaces (0.0.0.0) TNLegend-PortaMCP-6658923/tests/test_release.py :203
settings = _runtime_settings(tmp_path, host="0.0.0.0")