{"name":"multi-repository-code-workspace","version":"1.1.3","status":"ok","workspace_model":{"type":"multi_repository","description":"One deployment holds all projects. Each direct child directory of /workspace containing non-symlink Git metadata is one repository.","repository_selection":"Use the exact top-level folder name as repo_id.","patch_scope":"Each ZIP patch targets exactly one repository. Use separate ZIPs for separate repositories."},"repositories":[{"repo_id":"Dark-Star-Solutions","display_name":"Dark-Star-Solutions"},{"repo_id":"fourbears-website","display_name":"fourbears-website"},{"repo_id":"OpenAllasso","display_name":"OpenAllasso"},{"repo_id":"Restaurant-POS","display_name":"Restaurant-POS"}],"mcp_endpoint":"/mcp","http_endpoints":{"guide":"GET /","health":"GET /healthz","raw_zip_patch":"POST /v1/patch with Content-Type application/zip and required X-Repo-ID header","command":"POST /v1/command with JSON"},"tools":[{"name":"apply_patch_zip","persistent":true,"repository_scope":"exactly_one","description":"The only persistent source mutation mechanism. Requires repo_id and accepts one validated single-repository ZIP patch."},{"name":"run_command","persistent":false,"repository_scope":"exactly_one","description":"Runs an arbitrary shell command in a disposable copy of one repository."}],"rules":["No direct source-reading, source-search, file-writing, replacement, movement, copying, or deletion MCP tools are exposed.","The user supplies project structure and relevant code to the AI and may be asked for it again at any time.","One ZIP can apply to one repository only.","Pass the same exact repo_id in the tool request and in mcp-patch.json.","Use separate ZIPs when changing separate repositories.","Only a validated ZIP patch may persistently create or replace repository files.","Patch format version 1 supports upsert only; deletion and repository management are not supported.","Commands run against disposable repository copies and cannot modify persistent repositories.","Repository names and Git repositories are discovered dynamically without redeploying the server."],"accepted_zip_layouts":{"flat":{"description":"Extracting the ZIP directly reveals mcp-patch.json and repository-relative code paths.","example":["mcp-patch.json","package.json","src/app.ts"]},"single_wrapper":{"description":"Extracting the ZIP reveals one folder containing mcp-patch.json and repository-relative code paths. The server strips that one wrapper.","example":["patch-bundle/mcp-patch.json","patch-bundle/package.json","patch-bundle/src/app.ts"]},"rejected":["Mixed root files and wrapped files","More than one top-level wrapper folder","Nested files/<repo_id>/ payload layout","Content for more than one repository","Files not declared in mcp-patch.json"]},"patch_format":{"format":"mcp-code-patch","schema_version":1,"repository_scope":"exactly_one","manifest_path_after_normalization":"mcp-patch.json","payload_layout_after_normalization":"<exact final repository-relative path>","supported_operations":["upsert"],"protected_paths":[".git",".git/**",".mcp",".mcp/**",".mcp-project.json",".mcp-*"],"manifest_example":{"format":"mcp-code-patch","schema_version":1,"patch_id":"unique-patch-id","repo_id":"example-repository","summary":"Describe the change.","expected_head":"optional-current-git-head","files":[{"operation":"upsert","path":"src/example.ts","before_sha256":"64-lowercase-hex-for-existing-file-or-null-for-new-file","after_sha256":"64-lowercase-hex-for-payload","mode":"0644"}]}},"command_model":{"repository_scoped":true,"retained_sandboxes_supported":true,"persistent_workspace_writable":false,"note":"A command can destroy its disposable copy, but it cannot delete or modify the durable repository."},"ai_instructions":"This is one shared development server containing multiple independent Git repositories under one workspace.\n\nThe MCP intentionally exposes exactly two tools: apply_patch_zip and run_command. It does not expose direct source-reading, source-search, individual file-writing, replacement, movement, copying, or deletion tools.\n\nThe user supplies project structure and relevant source code in the conversation. Ask the user for the current project structure, complete files, or newer versions of affected files whenever the available context is incomplete, ambiguous, or stale. The user may provide them again at any time.\n\nRepository selection rules:\n- Use the exact top-level repository folder name as repo_id.\n- Every apply_patch_zip call targets exactly one repository.\n- One ZIP must never contain a patch for more than one repository.\n- Pass repo_id explicitly to apply_patch_zip, and put the same repo_id in mcp-patch.json.\n- If changes are required in two repositories, create and apply two separate ZIP files, one ZIP per repository.\n\nZIP layout rules:\nThe server accepts exactly two archive layouts and normalizes them before validation.\n\nLayout A — flat ZIP root. Extracting the ZIP directly reveals mcp-patch.json and the patched code paths:\n  mcp-patch.json\n  package.json\n  src/app.ts\n  src/routes/users.ts\n\nLayout B — one enclosing folder. Extracting the ZIP reveals exactly one folder, and that folder contains mcp-patch.json and the patched code paths:\n  any-wrapper-name/\n    mcp-patch.json\n    package.json\n    src/app.ts\n    src/routes/users.ts\n\nFor Layout B, the server automatically removes exactly one common top-level wrapper directory. The wrapper name is ignored and does not select the repository. repo_id selects the repository.\n\nDo not create mixed layouts. Do not put some files at the ZIP root and others under a wrapper. Do not create multiple top-level wrapper folders. Do not use files/<repo_id>/... or any repository-name prefix inside the normalized patch root. After optional wrapper removal, every payload file must be stored at its exact final repository-relative path.\n\nPatch manifest rules:\n- mcp-patch.json must be at the normalized patch root.\n- The manifest contains repo_id, optional expected_head, and a files array.\n- Each files[].path is both the final repository-relative destination and the exact normalized ZIP payload path.\n- Do not include a source field.\n- Include only files declared in the manifest. Undeclared files cause rejection.\n- Include complete final bytes for every changed or new file.\n- Every existing file requires its exact current SHA-256 in before_sha256.\n- Use before_sha256: null only for a genuinely new file.\n- Include after_sha256 for the payload bytes.\n- Patch format mcp-code-patch version 1 supports upsert only. It never supports deletion, rename, move, symlink, hardlink, repository creation, repository deletion, or direct changes to .git or MCP metadata.\n\nOnly apply_patch_zip can persistently create or replace files. Never claim persistent changes unless apply_patch_zip returns ok=true with dry_run=false.\n\nrun_command accepts arbitrary shell commands, but commands execute only in disposable copies of one selected repository. Command filesystem changes are temporary and cannot modify persistent repositories. Do not use run_command as a substitute for reading source code or as a persistent editing mechanism. If generated output must persist, place its intended final files into a new single-repository ZIP patch.\n\nAfter patching, run relevant tests, builds, linting, type checks, Git status, or Git diff in the disposable sandbox. Report the selected repository, changed paths, detected ZIP layout, command outcomes, conflicts, skipped checks, truncated output, and uncertainty honestly."}