project_fs_write
Write a file in the project's sandbox, replacing it wholesale. Paths are relative to `/workspace`. The sandbox path rules refuse a write under `node_modules`, `.git`, `src/brand`, or `src/onchain`, and the refusal names the rule. Returns `{ path, bytes, created }` — `created` is `false` when you overwrote a file that already existed, so read before you replace. For a change to one region of a file, use `project_fs_edit`, which fails when its match is missing or ambiguous. Another user's project is answered with the same 'no such project' a deleted one would be.
Write a file in the project's sandbox, replacing it wholesale. Paths are relative to /workspace. The sandbox path rules refuse a write under node_modules, .git, src/brand, or src/onchain, and the refusal names the rule.
Input
The tool takes a single JSON object. Every field, its type, and an example are on the generated reference at GET /mcp/tools, under this tool's name.
Calling it
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "project_fs_write", "arguments": {} }
}Put your arguments in place of the empty object. A call that fails comes back as a normal result carrying isError: true and a message naming what went wrong, not as a JSON-RPC protocol error.
Notes
Returns { path, bytes, created } — created is false when you overwrote a file that already existed, so read before you replace. For a change to one region of a file, use project_fs_edit, which fails when its match is missing or ambiguous. Another user's project is answered with the same 'no such project' a deleted one would be.
The full request and response shape, and a live playground, live on the generated reference at GET /mcp/tools.
project_fs_read
Read a file from the project's sandbox as text. Paths are relative to `/workspace`; a path that leaves the workspace is refused by the sandbox path rules. Returns `{ path, content, totalLines, returnedLines, bytes, truncated }` — pass `startLine` / `endLine` to read a slice of a file that is too large for one call. A read over the 200 KB cap keeps the head and the tail with a `…[N bytes truncated]…` marker between them and sets `truncated`. Call `project_fs_list` to see what is in the tree, and `project_fs_edit` to change what you read. Another user's project is answered with the same 'no such project' a deleted one would be.
project_fs_edit
Replace an exact string in a file in the project's sandbox. `oldString` is matched literally — not trimmed, not a regular expression — and must occur exactly once, or the edit is refused: zero matches reports that the string is not in the file, more than one reports that the match is ambiguous and names the line numbers to disambiguate with. Pass `replaceAll: true` to replace every occurrence deliberately. Returns `{ path, replacements, bytes }`. Prefer this to `project_fs_write` for a change: it cannot silently clobber a file. Another user's project is answered with the same 'no such project' a deleted one would be.