Tools
What an agent connected to a project can do, and exactly what each tool takes.
Every path is interpreted relative to the project root and confined to it before anything touches the disk. An absolute path, or one that climbs out with .., is refused withPATH_ESCAPE rather than resolved.
Which of these a project actually offers is up to its policy: see what a project allows. Tools marked read only change nothing, which is what a project set to read only is left with, and what is never interrupted by a confirmation prompt.
This page is generated from the same definitions the gateway advertises and the executor validates against, so it cannot describe a tool that does not exist or miss an argument that does.
On the account URL, https://exeora.dev/mcp, every tool below also takes an optionalproject, naming the project to run that one call in without changing the active one. A project's own URL has no such argument: it carries its project in the path, and offering a way to name another is exactly what it does not do.
read_file
Read file · read only
Read the contents of a text file in the project. Output is truncated at 500KB. Use offset/limit for large files; when you need the whole file, continue with offset until complete.
| Argument | Type | What it means |
|---|---|---|
path | string | Path relative to the project root. Must stay inside the project. |
offset optional | integer | 1-based line to start reading from. Omit to start at the beginning. |
limit optional | integer | Maximum number of lines to return. Omit to read to the end. |
list_files
List files · read only
List directory contents in the project. Lists one level by default; set recursive to walk subdirectories, and glob to filter (for example '**/*.ts'). Includes dotfiles. Recursive listings respect .gitignore and always skip .git and node_modules. Output is truncated to 1000 entries.
| Argument | Type | What it means |
|---|---|---|
path optional | string | Directory to list. Defaults to the project root. |
recursive optional | boolean | Walk subdirectories. Defaults to false. |
glob optional | string | Only return entries matching this glob, e.g. '**/*.ts'. |
grep
Search file contents · read only
Search file contents for a regular expression. Returns matching lines with file paths and 1-based line numbers. Respects .gitignore and always skips .git and node_modules. Output is truncated to 200 matches, and long lines to 500 characters.
| Argument | Type | What it means |
|---|---|---|
pattern | string | Regular expression to search for. |
path optional | string | Directory to search. Defaults to the project root. |
glob optional | string | Restrict the search to files matching this glob. |
caseInsensitive optional | boolean | Ignore case. Defaults to false. |
maxResults optional | integer | Maximum matches to return (max 200). |
edit_file
Edit file
Edit a file by exact text replacement. oldString must match a unique region of the file, if it appears more than once the edit is refused, so include surrounding lines to disambiguate rather than retrying. Returns a unified diff of what changed.
| Argument | Type | What it means |
|---|---|---|
path | string | Path relative to the project root. Must stay inside the project. |
oldString | string | Exact text to replace. Must match the file byte for byte and must appear exactly once, include surrounding lines to make it unique. |
newString | string | Replacement text. |
write_file
Write file
Write content to a file, creating it if it does not exist and overwriting it entirely if it does. Parent directories are created automatically. Prefer edit_file for changes to an existing file, so the rest of it is not at risk.
| Argument | Type | What it means |
|---|---|---|
path | string | Path relative to the project root. Must stay inside the project. |
content | string | Full contents to write. Overwrites any existing file. |
run_command
Run command
Run a shell command on the user's machine, in the project directory. Returns stdout, stderr and the exit code. Output is truncated to the last 200KB. The command is killed, with everything it started, after 60s by default and at most 300s. Stdin is closed, so a command that waits for input exits rather than hanging.
| Argument | Type | What it means |
|---|---|---|
command | string | Shell command to run inside the project. |
cwd optional | string | Working directory relative to the project root. Defaults to the root. |
timeoutMs optional | integer | Wall-clock budget in milliseconds (default 60000, max 300000). |
start_command
Start a long-running command
Start a command and return immediately with a handle, for anything that outlives a single call: a dev server, a watch task, a long test run. Read its output with get_command_output and stop it with kill_command. It keeps running until it exits or is killed, but dies with the connection to Exeora, so nothing is left running once nobody is watching. Use run_command for anything that finishes on its own.
| Argument | Type | What it means |
|---|---|---|
command | string | Shell command to start inside the project. |
cwd optional | string | Working directory relative to the project root. Defaults to the root. |
get_command_output
Read a command's output · read only
Read output from a process started with start_command, continuing from a cursor. Returns at most 100KB per call, along with whether the process is still running and its exit code if not. Only the last 256KB is kept, so output is reported as skipped rather than silently lost if you read too slowly.
| Argument | Type | What it means |
|---|---|---|
processId | string | Handle returned by start_command. |
cursor optional | integer | Where to read from, as returned by the previous call. Omit to read from the start. |
send_command_input
Write to a command's input
Write to the standard input of a process started with start_command, for one waiting on an answer. Appends a newline unless told otherwise.
| Argument | Type | What it means |
|---|---|---|
processId | string | Handle returned by start_command. |
data | string | Written to the process's stdin exactly as given. |
newline optional | boolean | Append a newline. Defaults to true, since most prompts wait for one. |
kill_command
Stop a command
Stop a process started with start_command, along with everything it started. Reports killed: false when it had already exited, which is not an error.
| Argument | Type | What it means |
|---|---|---|
processId | string | Handle returned by start_command. |
Choosing a project
These three exist only on the account URL, where one connection covers several projects and something has to say which one a call lands in. They are answered by the gateway and never reach a machine, so no project policy applies to them.
With one project granted, there is nothing to choose and calls go there. With more, the first call that has not been told where to go is refused with NO_ACTIVE_PROJECT, which names these tools. The choice belongs to the client rather than to a conversation, so it outlives the one that made it and is shared with any other conversation open in the same client.
list_projects
List projects · read only · account URL only
List the projects this connection can reach, and say which one is active. The active project is where every other tool runs unless a call names another one.
get_active_project
Get the active project · read only · account URL only
The project every other tool works in right now, or null when none is selected. Use list_projects to see what else is available.
set_active_project
Switch the active project · account URL only
Choose the project every other tool works in from now on, by slug or id. The choice belongs to this client rather than to a conversation, so it outlives this one and is shared with any other conversation open in the same client. To work somewhere else for a single call without moving it, pass that call a project argument instead.
| Argument | Type | What it means |
|---|---|---|
project | string | The project's slug, or its id. Slugs are unique within an account. |