- UX audit Fix 1-5: actionable MCP HandoffSurface (endpoint/discovery/onboarding), reachable approval loop (sidebar section + waiting-for-me badge), honest MCP entry labels, ROUTES SSOT for dashboard-testing/load-testing (+ link-integrity coverage) - scenario registry hub (/dashboard-testing/scenarios) built on ScenarioRegistryModel - admin MCP governance: read-only GET /api/admin/mcp/catalog (catalog x roles + DCR clients) + /admin/mcp page/model/api + ROUTES.admin.mcp + sidebar entry - full i18n sweep of dashboard-testing routes and scenario-* component trees (ru/en) - accumulated workspace: MCP OAuth/DCR, automation idempotency migration, docker/nginx, specs
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
# #region Tooling.McpProxyFixture [C:2] [TYPE Module] [SEMANTICS docker,mcp,nginx,fixture]
|
|
# @BRIEF Echo only synthetic transport facts for the isolated nginx smoke; no application database.
|
|
import json
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
|
|
|
|
# #region Tooling.McpProxyFixture.Handler [C:2] [TYPE Class]
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
self.send_response(200)
|
|
self.send_header("Content-Type", "application/json")
|
|
self.send_header("Mcp-Session-Id", self.headers.get("Mcp-Session-Id", "fixture-session"))
|
|
self.end_headers()
|
|
self.wfile.write(json.dumps({
|
|
"path": self.path, "method": self.command, "host": self.headers.get("Host"),
|
|
"scheme": self.headers.get("X-Forwarded-Proto"),
|
|
"authorization": self.headers.get("Authorization") == "Bearer smoke-fixture",
|
|
"session": self.headers.get("Mcp-Session-Id"),
|
|
}).encode())
|
|
|
|
do_POST = do_GET
|
|
do_DELETE = do_GET
|
|
# #endregion Tooling.McpProxyFixture.Handler
|
|
|
|
|
|
if __name__ == "__main__":
|
|
HTTPServer(("0.0.0.0", 8000), Handler).serve_forever()
|
|
# #endregion Tooling.McpProxyFixture
|