ProjectsMCP
Provides Git version control operations such as status, diff, log, branch, commit, stage, and more, working within configured project roots.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ProjectsMCPlist all projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ProjectsMCP Platform
ProjectsMCP is now a plugin-based MCP Platform. The outer project remains ProjectsMCP; platform capabilities are added under plugins/.
Project aliases
Configured in config.json:
ai=D:\AIProjectsmarket=D:\MarketResearch
Related MCP server: MCP Project Manager
Plugins
Enabled plugins are configured in config.json:
{
"plugins": {
"enabled": ["project", "browser", "git"]
}
}Platform tools
list_plugins()
Project plugin tools
The Project plugin keeps the original ProjectsMCP tool names:
list_projects()list_files(project, path="")read_file(project, path)— reads UTF-8 text files and automatically extracts text from PDFs inside configured project roots.read_multiple_files(project, paths)write_file(project, path, content)append_file(project, path, content)project_tree(project, path="", max_depth=3, exclude_patterns=None)search_files(project, pattern, path="", exclude_patterns=None, max_results=200)grep_text(project, query, path="", include_patterns=None, exclude_patterns=None, case_sensitive=False, max_results=100)replace_text(project, path, old_text, new_text, dry_run=True)
Git plugin tools
The Git plugin uses a git_ prefix and runs local Git commands inside configured project roots:
git_version()git_repository_root(project, path="")git_status(project, path="")git_diff(project, path="", staged=false, file_path="")git_log(project, path="", max_count=10)git_branch(project, path="")git_current_branch(project, path="")git_init(project, path="")git_add(project, paths, path="")(compatibility alias for staging)git_stage(project, paths, path="")git_unstage(project, paths, path="")git_commit(project, message, paths=None, path="")git_create_branch(project, branch_name, checkout=true, path="")git_checkout(project, branch_name, path="")
Git commands automatically detect the repository root with git rev-parse --show-toplevel.
Paths remain constrained to the configured project root and are passed to Git relative to
the detected repository root.
The first Git plugin version intentionally avoids remote operations such as push, pull, fetch, and reset. Add them later after local workflows are stable.
Command plugin tools
run_command(command, shell="cmd", cwd="", timeout_seconds=None)run_cmd(command, cwd="", timeout_seconds=None)run_powershell(command, cwd="", timeout_seconds=None)
Commands run without an interactive console. The default command and Git timeouts are
configured in config.json. On timeout, ProjectsMCP terminates the full Windows process
tree and returns timed_out, duration_seconds, and captured output instead of leaving
the MCP request hanging. Output is capped by max_command_output_bytes.
Shell execution is centralized through ExecutionRuntimeService, which sits above
ProcessService. PowerShell execution is delegated to PowerShellRunner, which owns
standard -NoProfile / -NonInteractive / -ExecutionPolicy Bypass flags, UTF-8
console/bootstrap settings, working-directory validation, environment forwarding, and
PowerShell executable selection. ProcessService remains the lower-level owner of
process creation, PID capture, timeout enforcement, bounded stdout/stderr capture,
environment normalization, and process-tree cleanup.
Browser plugin tools
The Browser plugin is backed by Playwright and uses a browser_ prefix:
browser_status()browser_open(url="", headless=false)browser_goto(url)browser_back()browser_text(max_chars=12000)browser_click_text(text, exact=false)browser_fill(selector, value)browser_press(key)browser_screenshot(full_page=true)browser_close()
Screenshots are saved under:
D:\AIProjects\ProjectsMCP\artifacts\browserBrowser setup
After updating dependencies, run these once in the ProjectsMCP environment:
cd /d D:\AIProjects\ProjectsMCP
pip install -r requirements.txt
python -m playwright install chromiumThen restart the server and refresh the connector in ChatGPT.
A3_2 WebView2 / ChatGPT proxy plugin
The a3_2 plugin keeps A3_2 as the browser runtime and ProjectsMCP as the MCP-facing adapter:
ChatGPT / MCP client
|
| MCP
v
ProjectsMCP (A0)
|
| HTTP 127.0.0.1:5139
v
A3_2 WebView2 runtime
|
v
authenticated ChatGPT tabsA3_2 remains responsible for WebView2 tabs, persistent login state, Chromium CDP input, and ChatGPT-specific DOM handling. ProjectsMCP only translates MCP tool calls into A3_2's local HTTP API.
Local settings:
{
"settings": {
"a3_2_endpoint": "http://127.0.0.1:5139",
"a3_2_timeout_seconds": 120
}
}Start A3_2 before using these tools. The first MCP surface intentionally does not expose arbitrary JavaScript execution.
Browser/runtime tools:
a3_2_status()a3_2_list_tabs()a3_2_new_tab(url="", activate=true)a3_2_close_tab(tab_id)a3_2_activate_tab(tab_id)a3_2_navigate(tab_id, input)a3_2_get_text(tab_id, max_chars=12000)a3_2_screenshot(tab_id)
ChatGPT adapter tools:
a3_2_chatgpt_send_message(tab_id, message, timeout_seconds=120)a3_2_chatgpt_get_messages(tab_id)a3_2_chatgpt_get_last_response(tab_id)
Agent registry/orchestration tools:
a3_2_register_agent(name, role, tab_id, instructions="")a3_2_list_agents()a3_2_unregister_agent(name)a3_2_assign_agent_task(name, task_id, objective, project, working_path="", read_scopes=None, write_scopes=None, acceptance_criteria=None)a3_2_complete_agent_task(name, task_id, status="completed")a3_2_list_agent_tasks(status="")a3_2_claim_agent_paths(name, paths, task_id="")a3_2_release_agent_paths(name, paths=None)a3_2_list_agent_path_claims()a3_2_initialize_agent(name, timeout_seconds=120)a3_2_send_to_agent(name, message, timeout_seconds=120)
The agent registry is stored locally under artifacts/a3_2/agents.json, which is excluded from Git. Registration maps a logical agent name and role to an A3_2 GUID tabId. The existing instructions argument is retained for connector compatibility but is treated as long-lived base instructions, not task-specific scope. Registry output exposes both baseInstructions and the legacy instructions alias. Project, working path, read/write scopes, objective, and acceptance criteria belong to an assigned task instead.
The same registry file also stores orchestration tasks and cooperative path claims. An agent can have one active assigned task. Path claims are scoped by the task's project and workingPath; overlapping paths claimed by another agent in the same task workspace are rejected. Completing, cancelling, or blocking a task automatically releases claims associated with that task. Claims are coordination guards, not filesystem locks or write-permission enforcement.
A tab ID is stable during one A3_2 process but is currently recreated after an A3_2 restart, so logical agents must be rebound to the new tab IDs after restart. Rebinding to a different tab automatically clears the initialized flag.
Agent dispatch has two safety layers: a per-agent cooldown and a global ChatGPT cooldown shared by all registered agents. Normal sends enforce a minimum interval. If any A3_2 tab reports the ChatGPT rate-limit dialog, A0 stops further agent dispatch and applies exponential backoff of 5, 10, 20, then up to 30 minutes. a3_2_initialize_agent and a3_2_send_to_agent return structured status, retryAfterSeconds, and cooldownUntil fields instead of automatically retrying.
The ChatGPT send tool delegates browser-native input, submission, rate-limit detection, final-response confirmation, and assistant-message extraction to A3_2. A3_2 reports rate limiting as HTTP 429; the A0 adapter converts it into structured MCP results where appropriate.
All a3_2_* MCP tools opt into FastMCP structured output and declare Pydantic return contracts, so ChatGPT receives a concrete outputSchema for tab lists, ChatGPT messages, agent state, dispatch results, and cooldown/rate-limit responses. MCP structuredContent must be a JSON object, so list-style results are wrapped as objects: a3_2_list_tabs() returns { count, tabs } and a3_2_chatgpt_get_messages() returns { count, messages } instead of top-level arrays.
LINE A23 proxy plugin
The line_a23 plugin keeps the architecture ChatGPT -> ProjectsMCP -> A23 -> LINE Desktop.
ProjectsMCP exposes the five LINE tools and forwards each call to the local A23 Streamable HTTP endpoint configured in config.json:
{
"settings": {
"line_a23_endpoint": "http://127.0.0.1:3000/mcp",
"line_a23_timeout_seconds": 120
}
}Start A23 before ProjectsMCP:
cd D:\AIProjects\A23-LineMCPServer研究
node src/server.js --http-mode --host 127.0.0.1 --port 3000The plugin adds:
line_a23_status()get_line_chatroom_history_default(...)get_line_chatroom_history_long(...)get_line_chatroom_history_short(...)send_message_manual(...)send_message_auto(...)
Start server
Run:
D:\AIProjects\ProjectsMCP\StartProjectsMCP.batLocal SSE endpoint:
http://127.0.0.1:8090/sseExpose it to ChatGPT with a separate tunnel project:
ngrok: use A0_3-ProjectsMCP_Ngrok`r`nCloudflare: use A0_1/A0_2 ProjectsMCP Cloudflare TunnelAfter changing Python files, restart StartProjectsMCP.bat, then refresh the connector in ChatGPT.
Runtime logs
StartProjectsMCP.bat writes the combined launcher, uv, mcp-proxy, and MCP server output to:
D:\\AIProjects\\ProjectsMCP\\logs\\projectsmcp-YYYY-MM-DD_HH-mm-ss.logOutput remains visible in the console while it is written to disk. A new file is created for each launch, and log files older than 30 days are removed automatically. The logs directory is excluded from Git. For unattended startup, set PROJECTSMCP_NO_PAUSE=1 so the batch file exits without waiting for a key after the server stops.
Structure
ProjectsMCP/
├── server.py
├── config.json
├── artifacts/
│ └── browser/
├── mcp_platform/
│ ├── __init__.py
│ ├── context.py
│ └── plugin_registry.py
├── plugins/
│ ├── __init__.py
│ ├── project.py
│ └── browser.py
└── services/
├── __init__.py
├── browser_service.py
├── config_service.py
└── file_service.pyserver.py only bootstraps the platform, creates shared services, loads enabled plugins, and registers platform-level tools. Reusable business logic belongs in services/. Each plugin lives in plugins/ and exposes a create_plugin() factory.
Adding a plugin
Create
plugins/my_plugin.py.Implement a class with
name,description, andregister_tools(mcp, context).Add a
create_plugin()function that returns the plugin instance.Add the module name, without
.py, toplugins.enabledinconfig.json.Restart the server and refresh the connector.
Minimal shape:
class MyPlugin:
name = "my_plugin"
description = "What this plugin does."
def register_tools(self, mcp, context):
@mcp.tool()
def my_tool() -> dict:
return {"ok": True}
def create_plugin():
return MyPlugin()Safety design
The Project plugin keeps the original safety model:
All paths are resolved relative to the selected project root.
Path traversal is blocked.
Write operations are limited to extensions listed in
config.json.Large file reads are blocked by
max_read_bytes.Project scanning excludes heavy folders such as
.git,node_modules,bin,obj,dist,build, andartifactsby default.replace_textdefaults todry_run=true.
The Browser plugin currently runs local Chromium through Playwright. Use it for sites you are authorized to access.
Next plugin ideas
Git remote plugin expansion:
git_fetch,git_pull,git_pushwith confirmation rulesASP.NET plugin: solution/project discovery,
.csprojreader, Razor searchAI index plugin: project summaries, code index, semantic search
Office plugin: Word/Excel/PowerPoint automation
Database plugin: query approved local/private-cloud databases
中文說明
專案簡介
ProjectsMCP 是一個以 Plugin 為核心的 MCP Platform,目標是將各種功能模組化,例如專案管理、Git、Browser、自動化命令,以及未來的 LM Studio、Office、資料庫等插件。
目前平台已具備:
專案檔案管理
Git 版本控制
Playwright Browser 自動化
CMD / PowerShell 指令執行
Plugin 擴充架構
快速開始
安裝任一可用的 Python;Setup 會透過 uv 自動準備並固定使用 Python 3.13,以符合 MCP 套件需求。
執行
SetupProjectsMCP.bat。它只會準備本機 ProjectsMCP 所需的 uv、Python 套件與 Playwright Chromium。安裝完成後可直接啟動
StartProjectsMCP.bat。若需要 ngrok,請另外使用A0_3-ProjectsMCP_Ngrok。Internet tunnel 已從 A0 分離:ngrok 使用 A0_3;Cloudflare Named Tunnel 使用 A0_1/A0_2。
專案目標
本專案希望建立一個容易維護、容易擴充的 MCP Platform,而不是只服務單一功能。Browser Plugin 只是第一個插件,未來會持續加入更多能力。
開發原則
Plugin 化架構
Service 與 Plugin 分離
優先考量可維護性
盡量降低環境相依性
使用 Git 進行版本控制
Desktop plugin tools
The Windows-only Desktop plugin provides visible and auditable mouse automation:
mouse_highlight_start(color="#00E5FF", size=64)mouse_highlight_stop()mouse_highlight_status()mouse_get_position()mouse_move(x, y)mouse_click(button="left", clicks=1)
The highlight is a topmost, transparent, click-through glowing ring. It follows the cursor and becomes smaller/brighter while the left mouse button is pressed. Start it before automated desktop actions and stop it afterward. The overlay is implemented by scripts/mouse_overlay.ps1 and is managed by the MCP server process.
Example operation sequence:
mouse_highlight_start()
mouse_move(500, 300)
mouse_click()
mouse_highlight_stop()Portable migration and repository size
Runtime browser data is stored under artifacts/, including the persistent Edge/Chromium profile, caches, extensions, downloaded browser components, screenshots, and session databases. This directory is intentionally excluded by .gitignore and should not be copied to another computer unless a private browser profile backup is explicitly required.
Create a minimal migration package with:
powershell.exe -ExecutionPolicy Bypass -File .\CreatePortablePackage.ps1The package excludes artifacts, virtual environments, Python caches, logs, local environment files, and .git by default. Use -IncludeGit only when the local Git history must be included.
After extraction on another Windows computer:
Review
config.jsonand update project root paths for that computer.Run
SetupProjectsMCP.batto install Python dependencies and Playwright Chromium.Run
StartProjectsMCP.bat.If Internet access is required, use the separate A0_3 ngrok project or A0_1/A0_2 Cloudflare tunnel project.
A fresh browser profile will be created automatically under artifacts/browser_profile. Existing login sessions, cookies, and browser extensions are not part of the portable package.
附件保存工具
啟用 attachment plugin 後,可使用不經 Base64 的本機附件保存流程:
attachment_save_file:從attachment_source_directory內的本機暫存檔串流複製到attachment_save_directory。attachment_storage_info:查看來源目錄、目的目錄、傳輸方式與檔案大小上限。
附件工具接受所有檔案類型,預設單檔上限為 1 GiB。複製時會先寫入 .part 檔並計算 SHA-256,成功後才原子替換正式檔案;來源與目的路徑都會限制在設定目錄內,並阻擋路徑穿越與符號連結來源。
Local Agent asynchronous jobs
Long-running A28 / LM Studio coding tasks can be dispatched without holding an MCP request open:
local_agent_submit_task(...)queues work and immediately returns atask_id.local_agent_task_status(task_id)reportsqueued,running, or the final task status.local_agent_task_result(task_id)returns the result when ready; completed results are persisted under the A28 task results directory.local_agent_run_task(...)remains for compatibility, but its blocking worker execution is offloaded withasyncio.to_threadso it no longer blocks the FastMCP event loop.
local_agent_max_concurrent_jobs controls the local dispatcher worker pool size (default: 4). Each running job starts its own A28 worker process through ProcessService, so multiple local Agent jobs can progress concurrently. The command plugin likewise offloads blocking command execution from the FastMCP event loop.
A0 Runtime Telemetry / Execution Trace v2
A0 normalizes orchestration activity into a shared runtime telemetry stream covering tasks, agents/workers, MCP tool executions, resource claims, waits, dispatches, and an append-only event envelope. Each server process creates a new bootId. Every audited FastMCP tool invocation creates a local execution context with a runId, traceId, and root spanId; its started/completed/failed/cancelled lifecycle retains those same identifiers. In-process task and dispatch telemetry inherits that context through Python contextvars where context propagation permits. When a worker thread emits telemetry without an active context but supplies a known task_id, the runtime reuses correlation already stored on that task.
Identifier semantics:
bootIdidentifies one A0 server process lifetime. A restart always creates a new value.runIdidentifies one top-level audited MCP tool run; any in-process child spans retain that run.traceIdgroups the root MCP tool and A0-internal task/dispatch activity that actually inherited or explicitly carried its correlation.spanIdidentifies one local audited tool span;parentSpanIdlinks an in-process child span to its recorded parent. Current child state records retain inherited correlation rather than inventing spans across transports.
Correlation is deliberately local and evidence-based. A new MCP request arriving after an external Agent or Connector boundary is a new trace unless that transport explicitly propagates a supported correlation token. A0 does not infer relationships from timing, task wording, ChatGPT conversations, or private model reasoning.
Runtime files remain outside Git and are isolated by server profile:
MAIN:
artifacts/runtime/DEV:
artifacts/dev/runtime/events/YYYY-MM-DD.jsonl— one normalized event per line.state.json— the latest derived state for Control Center consumption.
The DEV launcher explicitly passes PROJECTSMCP_ENVIRONMENT, PROJECTSMCP_CONFIG_PATH, and PROJECTSMCP_ARTIFACTS_DIR through mcp-proxy with -e; mcp-proxy does not pass the parent environment to its stdio server by default. This keeps 8090/MAIN and 8091/DEV from sharing configuration or runtime state.
The runtime_telemetry plugin exposes:
runtime_snapshot()— current summary plus agents, tasks, tool executions, claims, waits, dispatches, and recent events.runtime_recent_events(limit=100)— recent normalized events.
Current producers include MCP tool audit events (tool.started/completed/failed/cancelled), Local Agent and Codex queue/dispatch/execution lifecycle events, and A3_2 agent/task/path-claim events. On startup, the service loads the previous state.json, marks prior-boot nonterminal tools/tasks/dispatches as interrupted, marks held claims and active waits as stale, normalizes busy agents, then immediately writes state under the new bootId. These labels describe lost in-memory continuity after restart, not a newly observed remote failure. Per-collection retention caps preserve active records and the newest terminal history so state.json does not grow without bound. The append-only daily JSONL event stream remains the raw audit history.
A0 Control Center
A0.ControlCenter is a read-only WPF + WebView2 dashboard for runtime orchestration telemetry. It reads the selected profile's state and latest JSONL event files directly, so the dashboard remains independent from the MCP request path. MAIN uses config.json + artifacts/runtime; DEV uses config.dev.json + artifacts/dev/runtime.
Run the matching profile explicitly:
StartA0ControlCenter.bat
StartA0ControlCenter-DEV.batThe footer shows the active environment and runtime path so MAIN/DEV drift is visible instead of silently mixing data.
The dashboard prominently groups Execution Traces by traceId / runId, showing the root MCP tool and chronological correlated task/dispatch records. Work without correlation is explicitly labeled as transport-boundary/uncorrelated instead of being attached to a guessed parent. The detailed Client/ChatGPT → MCP invocation panel continues to show actual structured tool parameters, and the MCP/A0 → A2A panel continues to show emitted prompt/scopes. The bridge tails only enough bytes from recent JSONL files for the latest event window instead of loading multi-megabyte files in full. It refreshes once per second by default and does not expose cancel/retry/release or other mutating operations.
Public endpoint and connector registration
The single source of truth for the public ProjectsMCP SSE URL is
config.json -> settings.endpoint.public_sse_url. The production endpoint is:
https://mcp-main.offdutylab.xyz/sse網址.txt is a legacy human-readable pointer only. No runtime code, setup script,
plugin loader, or manifest generator reads it. Cloudflare host profiles define
tunnel routing, but do not define the ChatGPT connector endpoint.
The ChatGPT custom connector/plugin stores its endpoint when the connector is created or refreshed. A0 does not generate or update that remote registration. Restarting A0 terminates existing SSE sessions; the connector should reconnect to the same stable URL. If ChatGPT keeps an old session or an old ngrok install-time snapshot, refresh the connector. If refresh does not replace the endpoint, remove and reinstall the connector using the production URL above, then start a new chat.
The mcp_diagnostics() tool reports the runtime environment, config path, artifacts root, local/public SSE URLs, tunnel provider, expected active connector endpoint, server start time and PID, and the configuration source. Its tool name and response keys are intentionally stable across server restarts. restart_projectsmcp() and get_restart_status() use the current runtime profile: MAIN targets 8090 and artifacts/restart, while DEV targets 8091 and artifacts/dev/restart.
Codex Agent plugin
The codex_agent plugin dispatches coding tasks directly to the official OpenAI Codex CLI. It does not use LM Studio or the A28 LocalDeveloper worker.
Tools:
codex_agent_status()codex_agent_submit_task(project, working_path, objective, acceptance_criteria, constraints=None, task_id="", sandbox="workspace-write", model="", timeout_seconds=900)codex_agent_task_status(task_id)codex_agent_task_result(task_id)codex_agent_run_task(...)
Default execution uses codex exec --ephemeral --sandbox workspace-write <PROMPT>. The adapter also accepts read-only; dangerous sandbox bypass modes are intentionally not exposed. The generated worker prompt forbids commit, push, reset, or Git history rewriting.
Windows prerequisite: install the official Codex CLI, authenticate it with ChatGPT, and verify codex --version plus codex login status before starting ProjectsMCP.
Startup executable registry
A0 creates one ExecutableRegistry during server startup and freezes full executable paths for python, uv, git, node, pwsh, powershell, cmd, optional bash, and codex. Execution Runtime, Git, Codex Agent, and Local Agent consume that shared startup snapshot instead of repeatedly resolving PATH during tool calls. Restart A0 after changing PATH or installing/upgrading an executable so the registry can refresh.
bash is an optional Execution Runtime target, not a replacement for PowerShell. On Windows, A0 prefers a concrete Git Bash installation and deliberately avoids treating the legacy/WSL bash.exe launcher as usable merely because the executable file exists; without a discoverable Git Bash runtime, shell=bash is unavailable while CMD and PowerShell continue normally. On Linux, the registry may resolve Bash through the normal executable search path.
Command preflight / normalization
Before run_cmd, run_powershell, or run_command launches a child process, A0 now runs a shared CommandPreflightChecker. It validates shell selection, frozen executable availability, working directory, NUL characters, selected PowerShell 5.1 versus 7 compatibility, known external commands, literal Import-Module paths, and common CMD/PowerShell syntax-mixing or quoting risks. Fatal findings return preflight_failed without creating a child process; warnings are attached to the execution result. Full process environment values remain internal and only a small UTF-8 readiness summary is exposed in the preflight result.
Error classification and controlled recovery
The DEV execution runtime classifies command outcomes before deciding whether any recovery is safe. Current categories include success, success-with-stderr, timeout, command-not-found, execution-policy, missing path/module, preflight failure, and generic process errors. Recovery is intentionally conservative: unambiguous CMD-style cd /d used inside PowerShell may be normalized to Set-Location -LiteralPath before launch, while command-not-found may be retried at most once only when the Startup Executable Registry already contains a frozen full path for that command. Timeouts, missing cwd/module, and low-confidence failures are not automatically retried. Every repair is returned as structured recovery metadata with its phase, reason, validation status, and retry count.
Known Issues Registry / Preventive Rules
known_issues.json is the versioned source of preventive execution rules. KnownIssuesRegistry loads it at A0 startup and applies only rules whose status is active and whose evidence flags have both recovery_validated=true and validator_passed=true. Candidate rules are inert and cannot change execution.
The registry supports an explicit candidate lifecycle: register_candidate(...) records an observation, while promote(...) refuses activation unless both recovery validation and validator success are supplied. Active rule hits are returned under known_issues.prevented, including the rule ID and before/after command text, so Control Center can later count prevented incidents.
Current validated DEV rules prevent unambiguous CMD-style cd /d from reaching PowerShell and, for PowerShell only, replace known CLI tokens with the frozen Startup Executable Registry path. A CMD full-path rewrite was deliberately rejected after integration validation exposed cmd.exe /s /c quoting incompatibility; it remains excluded rather than being promoted from unit-test evidence alone.
Seeded historical PowerShell / execution issues
DEV now seeds the historical execution problem backlog into known_issues.json. Policies are explicitly separated into preventive rules, which may safely change execution before launch, and classify_only rules, which may detect/report/contain a problem but must not rewrite ambiguous commands. Covered categories include execution policy, startup executable/PATH drift, missing uv/python/git-style CLIs, UTF-8/Chinese output, quoting risk, cwd validation, PowerShell 5.1/7 compatibility, command timeout, process-tree/orphan cleanup, missing PowerShell modules, and CMD/PowerShell syntax mismatch. Timeout remains non-retryable and ProcessService now reports process_tree_terminated after timeout cleanup. Missing modules and ambiguous quoting are intentionally not auto-installed or auto-rewritten.
Execution Runtime Health contract
A0 exposes executionRuntimeHealth in both runtime_snapshot() and persisted RuntimeTelemetry state.json. The aggregation is UI-neutral and is computed from retained run_command, run_cmd, and run_powershell tool executions. It includes retained-window success/failure counts and success rate, timeouts, confirmed process-tree termination, controlled recovery/retry counts, Known Issues prevention hits, shell breakdowns, classification counts, and Known Issue rule-hit counts.
The current Control Center renders this contract in a replaceable Execution Runtime Health section. The UI is intentionally not the owner of the aggregation logic, so a future Control Center redesign can replace or remove the current section while continuing to consume the same runtime-state contract. These figures are retained-window telemetry rather than lifetime counters; older records created before classification metadata existed may appear as unknown until they age out of the retained window.
Defender-friendly PowerShell preflight
A0 keeps PowerShell available for normal Windows administration, but CommandPreflightChecker now distinguishes ordinary commands from long inline scripts that behave like source-code patchers. A PowerShell command is blocked with prefer_structured_file_edit only when multiple signals combine: a long inline payload, a source/config file target, and multiple rewrite primitives such as ReadAllText / WriteAllText / .Replace() / .IndexOf() / .Substring(). Hidden/process-control behavior raises the explanation severity but is not blocked by itself.
The preferred remediation is to re-issue the change through structured MCP file operations such as replace_text / write_file, or a dedicated patch service. A0 does not create Microsoft Defender exclusions, disable AMSI/scanning, or silently translate the rejected PowerShell into another executable script. The corresponding Known Issues rule is classify_only, so it records the engineering policy without rewriting commands.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceA unified MCP server with composable tools for GitHub operations, file management, shell execution, kanban boards, Discord messaging, and package management. Features role-based security, HTTP/stdio transports, and a web-based development UI.
- AlicenseNot gradedqualityDmaintenanceProvides project management capabilities through terminal, web UI, or MCP stdio, including plans, code analysis, and filesystem-safe operations.21MIT
- AlicenseNot gradedqualityDmaintenanceA modular framework for building and running multiple MCP servers with file operations, system information, and extensible tool/prompt/resource support.MIT
- AlicenseAqualityCmaintenanceA comprehensive MCP tools collection providing filesystem operations, command execution, system tools, and more, with cross-platform support and strong security features.334Apache 2.0
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
MCP Server for JFrog, providing tools for development and artifact management.
Cloud MCP for project data, analytics, research, content planning, media generation, and growth.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/offdutysorcerer-code/ProjectsMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server