termux-mcp
Exposes Android device capabilities running under Termux — clipboard get/set, notifications, toasts, vibration, opening links, battery status, and text-to-speech — so an agent can drive native device features alongside shell commands.
Click on "Deploy 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., "@termux-mcprunpkg list-installed | head -20and show me the output"
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.
termux-mcp
在同一台 Android 上,让任何 MCP 客户端通过 localhost 直接操作 Termux。
命令执行、tmux 交互终端、后台任务、文件管理、Android 能力(剪贴板 / 通知 / 电池 / TTS),全部以 Termux 用户身份执行。
⚠️ 默认没有鉴权,只监听
127.0.0.1。 任何能访问该端口的本机进程都拥有 Termux 的完整权限。不要把server.host改成0.0.0.0,也不要暴露到局域网或公网。
特性
三种传输:Streamable HTTP(推荐)、Legacy SSE、stdio
交互式终端:tmux 持久会话,支持 REPL、SSH、密码提示、ncurses/TUI、Ctrl-C
后台任务:detached 进程、日志文件、退出码持久化、增量读取
文件操作:读写、按行编辑、递归搜索、原子写入、base64
Android 集成:剪贴板、通知、Toast、振动、打开链接、电池状态、TTS
审计:JSONL 日志,敏感字段自动脱敏
Related MCP server: termux-phone-mcp
环境要求
Termux(F-Droid / GitHub 版),Node.js ≥ 18
tmux:pkg install tmux可选:Termux:API(Android 能力)、Termux:Boot(开机自启)
快速开始
cd ~/termux-mcp
npm install
./scripts/doctor.sh # 环境自检
./scripts/start.sh # 后台启动 + 唤醒锁 + 恢复自启动
./scripts/status.sh # 状态与地址MCP: http://127.0.0.1:8770/mcp
SSE: http://127.0.0.1:8770/sse
Health: http://127.0.0.1:8770/health验证:
curl -s http://127.0.0.1:8770/health客户端接入
OpenCode
opencode mcp add --global termux --url http://127.0.0.1:8770/mcp等价的 opencode.json:
{
"mcp": {
"servers": {
"termux": { "type": "remote", "url": "http://127.0.0.1:8770/mcp" }
}
}
}其他 Streamable HTTP 客户端
URL: http://127.0.0.1:8770/mcp
Accept: application/json, text/event-stream服务端无状态:每个 POST 独立处理,不要求 Mcp-Session-Id,不需要任何认证头。
stdio(客户端本身运行在 Termux 内)
node ~/termux-mcp/src/server.js --stdio./scripts/client-config.sh 会打印当前环境适用的完整客户端配置。
工具
类别 | 工具 |
Shell |
|
交互终端 |
|
后台任务 |
|
文件 |
|
Android |
|
系统 |
|
资源 / 提示 |
|
两个容易踩的默认值:terminal_write 的 submit 默认 false,要执行命令必须显式传 true;delete_path 必须显式传 confirm: "DELETE",且拒绝删除 /。
示例
一次性命令:
{ "name": "run_command", "arguments": { "command": "pkg list-installed | head -20" } }交互式 Python REPL:
{ "name": "terminal_create", "arguments": { "name": "py", "cwd": "~/project", "cols": 120, "rows": 40 } }
{ "name": "terminal_write", "arguments": { "session": "py", "input": "python3", "submit": true } }
{ "name": "terminal_read", "arguments": { "session": "py", "expect": "^>>> ", "timeout_ms": 5000 } }后台构建:
{ "name": "task_start", "arguments": { "name": "build", "command": "npm run build > build.log 2>&1", "wait_ms": 500 } }
{ "name": "task_output", "arguments": { "id": "t-xxxx", "wait_for": "exit", "wait_ms": 60000, "tail_lines": 200 } }Android 通知:
{ "name": "notify", "arguments": { "title": "构建完成", "content": "npm run build 已完成", "sound": true } }安全模型
无 token、无密码、无 OAuth,只监听
127.0.0.1任何能访问 8770 的本机进程都能执行任意命令、读写任意可访问文件
权限边界是 Termux 用户本身(
u0_aXXX),不是这个服务浏览器来源检查保留:网页无法直接驱动本机命令,原生 App 不受影响
审计日志默认
~/.local/state/termux-mcp/audit.jsonl,命令全文会记录,不要在里面写密码;security.auditEnabled=false可关闭需要远程访问时走 SSH 隧道
配置
~/.config/termux-mcp/config.json,首次启动自动生成;可用 TERMUX_MCP_CONFIG 或 --config 覆盖。常改项:
字段 | 默认 | 说明 |
|
| 监听端口 |
|
|
|
|
| 输出截断阈值 |
|
| 审计开关 |
|
| 交互终端 shell; |
|
| bash 会话默认 |
|
| 后台任务上限 |
服务管理
脚本 | 作用 |
| 后台启动 + |
| 停止服务并暂停自启动(不杀 tmux 会话和后台任务) |
| 状态、自启动状态、地址 |
| 环境自检 |
| 打印客户端配置 |
| 安装中文登录欢迎语 |
| Termux:Boot 开机自启 |
| 恢复 / 暂停自启动 |
| 安装 Termux:API 包装器 |
后台存活建议:关掉 Termux 的电池优化;start.sh 已自动获取唤醒锁。Android 12+ 的 phantom process killer 可能杀掉后台子进程,需要 adb/root 调整。
许可证
MIT © leemwood
Available Tools
33 toolsbattery_statusRead Android battery statusARead-onlyIdempotent
Return battery percentage, charging state, temperature and related fields via Termux:API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds one genuinely useful piece of context — the Termux:API dependency, implying the Termux:API app must be installed/permitted — but says nothing about failure modes when the API is absent or about return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming what is returned and how, with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read with no output schema, the description gives the key returned fields plus the transport (Termux:API), which is enough to call it correctly. It could go further by noting that the Termux:API companion app and permission are prerequisites and that the call fails otherwise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to disambiguate; baseline applies. No false parameter hints are introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (return) plus resource (battery status) with the returned fields enumerated: percentage, charging state, temperature. It doesn't contrast itself with the closest sibling (system_info), which may also surface device-level data, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent infers it should call this when it needs battery level or charging state. There is no explicit when-to-use / when-not, and no mention of preferring this over system_info or termux_api generically.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clipboard_getRead the Android clipboardARead-onlyIdempotent
Return the current Android clipboard text via Termux:API. Requires the termux-api package and Termux:API app.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so safety is covered. The description adds genuinely new behavioral context the annotations lack: the dependency on the termux-api package and companion app, i.e. the condition under which the call fails. It stops short of describing the empty-clipboard case or error payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste: the action first, the prerequisite second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, annotation-rich tool with no output schema, the description covers what it does and what it depends on. The only remaining gap is what the return looks like when the clipboard is empty or the dependency is missing, which is minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline is 4 by rule. No parameter claims are made or needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (return) and resource (current Android clipboard text), and the direction of the operation is unambiguous against the sibling clipboard_set. An agent can select it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for invocation via the stated prerequisite (termux-api package + Termux:API app), which is the main precondition an agent must check. It does not explicitly name clipboard_set as the alternative for writing, but the read/write split is self-evident from name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clipboard_setWrite the Android clipboardAIdempotent
Set the Android clipboard text via Termux:API. Requires the termux-api package and Termux:API app.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to place on the clipboard. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, idempotent, non-destructive, open-world), so the description's real contribution is the runtime dependency on the termux-api package and app, which is genuine behavioral context an agent needs before calling. It stops short of describing failure behavior when the dependency is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the action front-loaded and the prerequisite following. Nothing repeats structured data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter write with a complete schema and full annotation coverage, the description supplies the critical missing piece (the Termux:API dependency) and nothing more is needed since there is no output schema. Minor gap: no mention of what happens if the dependency is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'text' parameter is fully documented in the schema, so the description does not need to restate it. Baseline 3 applies since the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set the Android clipboard text') plus the mechanism (Termux:API), making it immediately distinguishable from the clipboard_get sibling. It falls just short of a 5 because it doesn't explicitly frame itself against that sibling or state any scope limits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisites ('termux-api package and Termux:API app') imply when the call will succeed, but there is no guidance on when to prefer this over alternatives such as run_command or termux_api, nor any exclusions. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_pathCopy a file or directoryA
Copy a file or directory to another path. Directories are copied recursively; existing destinations require overwrite=true.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source path. | |
| overwrite | No | Replace an existing destination. Default false. | |
| destination | Yes | Destination path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare a non-read, non-destructive, non-idempotent mutation, and the description adds real information beyond them: directories are copied recursively, and an existing destination is protected unless overwrite=true, so the agent knows a default call fails rather than silently destroying data. It does not cover permissions, symlink handling, or error/return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, front-loading the core action and following with the two behavioral constraints that actually change how an agent calls it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does not say what a successful copy returns (path, byte count, or nothing) or how failures are surfaced. Those are minor gaps for a three-parameter filesystem operation whose safety profile and recursion behavior are otherwise covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so source, destination, and overwrite (including its default) are already fully documented in the schema. The description's mention of overwrite=true reinforces the safety semantics but adds no syntax or format detail beyond the structured fields, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Copy a file or directory to another path") that an agent can easily distinguish from write_file or edit_file. It does not explicitly name the nearest alternative (move_path), so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool applies (copying a file or a whole directory tree) and gives a concrete prerequisite for overwriting. But it never contrasts with move_path or write_file, so an agent must work out for itself when copying is preferable to moving.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pathDelete a pathADestructive
Delete a file, symlink or directory. Destructive: first call with dry_run=true to inspect the target, then call again with confirm="DELETE". The filesystem root / is always refused; all other paths are allowed subject to the Termux user's Android permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to delete. | |
| confirm | No | Must be exactly "DELETE" for a real deletion. | |
| dry_run | No | Only report what would be deleted. Default false. | |
| recursive | No | Allow deleting a non-empty directory. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=false, and idempotentHint=false, but the description adds meaningful safety behavior beyond that: the mandatory dry-run inspection step, the required confirmation token, the hard refusal of /, and the dependence on Termux Android permissions. These are exactly the behavioral details an agent needs before invoking a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and followed by the safety workflow and scope limit. No repetition, no filler, and the destructive nature is stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive filesystem tool with no output schema, this description covers what an agent needs: what gets deleted, the required safety dance, the root-path guard, and the permission model. The remaining parameter details (recursive) are fully documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds sequencing semantics for dry_run and confirm that the schema alone does not convey: dry_run is meant to be used first to inspect the target, and the second call must carry confirm="DELETE" rather than using dry_run. The recursive parameter is left to the schema, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource set ('Delete a file, symlink or directory'), immediately distinguishing it from siblings like copy_path, move_path, and mkdir. An agent knows exactly what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit two-step procedure (dry_run=true first, then confirm="DELETE") and names a hard refusal condition (root /). It doesn't mention alternatives such as move_path for non-destructive removal, so it falls short of full when/when-not/alternatives guidance, but the intended usage sequence is very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_fileReplace text in a fileADestructive
Replace an exact string in a UTF-8 text file. By default old_string must occur exactly once; use replace_all to replace every occurrence. The file is written atomically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path or path relative to $HOME. | |
| new_string | Yes | Replacement text. | |
| old_string | Yes | Exact text to find. | |
| replace_all | No | Replace all occurrences. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is handled. The description adds non-obvious behavior the annotations do not: exact matching, the single-occurrence default that makes calls fail, and atomic writes. It does not cover file-not-found or permission errors, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core operation, followed by the match constraint and the atomicity guarantee. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four fully documented parameters, annotations and no output schema, the definition covers what to send and the key failure mode (non-unique match). It leaves out edge cases like missing files or encoding problems, so it is not quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already explains each parameter. The description nonetheless adds meaning the schema lacks: the default requires a unique match, and replace_all is the escape hatch for multiple matches. That is real semantic value beyond the field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource ('Replace an exact string in a UTF-8 text file'), which is specific enough to separate it from read_file or delete_path. It stops short of naming write_file, the closest sibling, so an agent must infer that whole-file overwrites belong there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one real usage rule ('old_string must occur exactly once; use replace_all to replace every occurrence'), which is genuinely helpful. But it never says when to prefer this tool over write_file or how to handle the not-found/ambiguous-match failure case, so tool-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dirList a directoryARead-onlyIdempotent
List files and subdirectories with type, size, modification time and permissions. Symlinks are reported but not followed. Hidden entries are skipped unless show_hidden=true.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory path. Default $HOME. | |
| max_entries | No | Default 500. | |
| show_hidden | No | Include names starting with a dot. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds real behavioral detail: symlinks are reported but not followed, and dot-entries are excluded unless show_hidden=true. It omits what happens on a nonexistent path or when max_entries is hit (silent truncation vs error), which is the remaining meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is listed and what is returned, then the two behavioral caveats. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the returned fields (type, size, modification time, permissions) and covers symlink and hidden-entry behavior. Truncation at max_entries and error conditions remain undisclosed, which is a modest but real omission for a listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the description adds essentially nothing beyond it; the show_hidden note merely restates the schema default. It gives no additional meaning for max_entries, such as whether exceeding it truncates output or errors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (files and subdirectories) and enumerates the metadata returned, which distinguishes it from a search or stat tool. It does not explicitly contrast itself with siblings like search_files or stat_path, so an agent must infer that boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the non-recursive, metadata-returning behavior, but there is no explicit statement of when to prefer this over search_files or stat_path, and no mention of prerequisites such as the path needing to exist and be readable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mkdirCreate a directoryBIdempotent
Create a directory. Parent directories are created by default.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Directory path. | |
| recursive | No | Create parents and tolerate an existing directory. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact — that parent directories are created by default — but omits what happens when the target already exists and recursive is false (error vs. success) and any permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action front-loaded and the notable default behavior immediately after. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, non-destructive, idempotent filesystem tool with full schema coverage and no output schema, the description covers what it creates and the parent-directory default. The only real gap is failure behavior when the directory already exists with recursive=false, which is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the 'recursive' property already documents both 'Create parents' and 'Default true', so the description largely restates structured data. It adds no format, path-style, or absolute-vs-relative semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a directory'), which is unambiguous against filesystem siblings like delete_path, list_dir, or write_file. It does not explicitly name or differentiate itself from any sibling, but the operation is distinct enough that an agent would not confuse it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites (e.g., permissions), and never mentions alternatives. It does not say whether to prefer mkdir over letting write_file create parents, nor when recursive behavior should be turned off.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_pathMove or rename a pathADestructive
Move or rename a file or directory. Existing destinations require overwrite=true. Cross-filesystem moves fall back to copy + delete.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source path. | |
| overwrite | No | Replace an existing destination. Default false. | |
| destination | Yes | Destination path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is known; the description adds genuinely new behavior by disclosing the cross-filesystem copy + delete fallback. It does not say whether the copy+delete path is atomic, whether overwritten data is recoverable, or what happens on partial failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core action first and the two constraint statements after it. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema, the description covers purpose, the overwrite gate, and the cross-filesystem fallback. Missing are failure/partial-failure behavior and return value, which matter for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents all three parameters, including overwrite's meaning and default. The description's 'existing destinations require overwrite=true' restates that rule in enforcement terms, but adds no syntax, path-format, or relative-vs-absolute detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Move or rename a file or directory'), which is concrete and unambiguous. It does not explicitly distinguish itself from the neighbouring copy_path or delete_path tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Existing destinations require overwrite=true' gives a concrete conditional rule for a non-obvious parameter, which is real guidance. It never names an alternative tool (e.g. copy_path) or states when not to use this one, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notifyPost an Android notificationAIdempotent
Create an Android notification via Termux:API. Requires the Termux:API app and notification permission. Use a stable id to update an existing notification.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Notification id used for updates. | |
| group | No | Notification group key. | |
| sound | No | Play the notification sound. | |
| title | No | Notification title. | |
| content | No | Notification body. | |
| ongoing | No | Make the notification ongoing (not dismissible). | |
| vibrate | No | Vibration pattern, e.g. "100,200,100". | |
| priority | No | Notification priority. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, openWorld=true and destructive=false, so the safety profile is covered. The description adds genuinely new context: the external app dependency and the notification-permission requirement, plus the update-by-id behavior that explains the idempotent hint. It stops short of 5 only because failure modes (missing app/permission) are not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action front-loaded, followed by prerequisites and the id/update tip. No filler, and every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All 8 optional parameters are schema-documented, the external dependency is disclosed, and no output schema exists so return values need not be explained. The only gap is that with zero required parameters it never says whether an empty call is valid or what a permission-denied call does, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 8 parameters is already documented in the schema, which sets the baseline at 3. The description's note about reusing a stable id restates what the id parameter's own description ('Notification id used for updates') already says, adding no new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create an Android notification') plus the mechanism ('via Termux:API'), so the action is unambiguous. It does not differentiate from the closest sibling, 'toast', which is another Android-side message-display tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use a stable id to update an existing notification' is a concrete usage rule, and the Termux:API app + permission prerequisite is stated. However, there is no guidance on when to prefer this over toast/vibrate, or when not to use it, so usage is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openOpen a URL or file on AndroidA
Open an http(s) URL in the default browser, or open a local file with Android via Termux:API. Local paths are resolved on the device; Android permissions still apply.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | http(s) URL or local file path. | |
| content_type | No | MIME type for local files, e.g. text/plain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true and non-readonly/non-destructive behavior, and the description adds genuinely new context: paths are resolved on-device and Android permissions still apply, which warns of possible failure outside the tool's control. It doesn't describe what a success/failure response looks like, and there is no output schema to cover that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary URL case, then the file case, then the caveat. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter launcher, the description plus annotations cover mechanism, scope, and permission risk adequately. It could be more complete by noting that the open happens in an external app (no return value or confirmation from the tool).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented with examples (the 'text/plain' MIME example for content_type). The description only implies the target accept-forms already stated in the schema and adds nothing about content_type handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + two concrete resources: 'Open an http(s) URL in the default browser, or open a local file with Android via Termux:API.' An agent immediately knows this launches external handlers rather than reading/returning content, which separates it from read_file or run_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context by mapping each input form (http(s) URL vs. local path) to the resulting behavior, so an agent knows when this tool applies. It stops short of explicit exclusions, e.g. pointing to read_file when the goal is to inspect a file's contents rather than launch it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileRead a text fileARead-onlyIdempotent
Read a file from an allowed directory (home, shared storage or Termux tmp) as text. Supports line offsets and line numbering. Binary files must be read with encoding="base64". Large reads are limited by security.maxReadBytes.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path or path relative to $HOME. | |
| limit | No | Maximum number of lines to return. Default 2000. | |
| offset | No | First line to return (1-based). Default 1. | |
| encoding | No | Buffer encoding, e.g. utf8, latin1, base64. Default utf8. | |
| with_line_numbers | No | Prefix every line with its line number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds useful context beyond that: the directory allow-list, the security.maxReadBytes cap on large reads, and the binary/base64 requirement. What it omits is the actual consequence of hitting the cap (error vs. truncation) and the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the verb and scope, then the binary and size caveats. No filler or redundancy; each sentence carries an actionable constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should describe the return value, and it doesn't — an agent cannot tell whether content comes back as one string, whether line numbers are embedded in the text, or how a too-large read is reported. The input side is fully covered, but for a read tool the missing return semantics are a material gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema. The description restates offsets and line numbering without adding format or edge-case detail (e.g. 1-based offsets, or interaction between limit and truncation). This is the baseline case where the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a file ... as text') plus the scoping constraint (home, shared storage, Termux tmp). It is distinguishable from write_file/edit_file by the read framing, but it never explicitly contrasts with stat_path or list_dir, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage rule — binary files must be read via encoding="base64" — and a precondition that the path must be in an allowed directory. It does not say when to prefer stat_path/list_dir instead of reading content, so the exclusions are only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_commandRun a shell command in TermuxADestructive
Run a command with bash -c as the Termux user and return exit code, stdout, stderr, duration and truncation flags. Use cwd for the working directory and timeout_sec for long jobs. There is no command allow list: the command runs with the full permissions of the Termux user. A non-zero exit code is returned as data, not as a tool failure. For long-running or interactive work use the task_* or terminal_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory. Default $HOME. | |
| env | No | Extra environment variables. | |
| stdin | No | Text written to the command standard input. | |
| command | Yes | Shell command to execute with bash -c. | |
| timeout_sec | No | Timeout in seconds. Default 120, max 600. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructive/openWorld annotations: no command allow list, runs with full Termux user permissions, and non-zero exit codes come back as data rather than tool errors. The explicit statement that failures are data is exactly the kind of thing an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences: behavior and return shape first, then the permissions caveat, then error semantics, then the alternative routing. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return fields (exit code, stdout, stderr, duration, truncation) and the error-handling contract. Combined with full schema coverage of the five parameters, an agent has everything needed to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so cwd, timeout_sec, env and stdin are already documented. The description only echoes cwd and timeout_sec usage without adding format or interaction detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (run a shell command via bash -c as the Termux user) and even enumerates the returned fields. An agent can distinguish it from read_file/write_file or terminal_* siblings without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes long-running or interactive work to task_* or terminal_* tools, which is real when-to-use guidance. It does not say when to prefer file-oriented siblings (read_file, write_file, list_dir) over a raw shell command, so one gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesSearch files by name or contentARead-onlyIdempotent
Recursively search below a root for files matching a glob and optionally a regular expression in their contents. Symlinks are skipped. Returns up to max_results matches.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | Glob for names or relative paths, e.g. "*.js" or "src/**/*.ts". Default "*". | |
| root | No | Directory to search. Default $HOME. | |
| query | No | Regular expression to match in file contents. | |
| max_depth | No | Directory depth limit. Default 12. | |
| max_results | No | Default 100. | |
| case_sensitive | No | Case-sensitive content matching. Default true. | |
| include_hidden | No | Include hidden files and directories. Default false. | |
| max_file_bytes | No | Skip content search in larger files. Default 1 MiB. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real behavior: symlinks are skipped and results are capped at max_results. It stops short of saying how truncation is surfaced or how results are ordered, which matters for a capped search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, no redundancy, and the core semantics are front-loaded before the secondary caveats (symlinks, result cap). Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 optional params, full schema coverage, and no output schema, the description covers the essential semantics an agent needs to select and call the tool. The remaining gap is the shape/ordering of returned matches, which a capped multi-mode search would ideally state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including defaults is already documented in the schema, making 3 the baseline. The description only re-touches glob, query, and max_results in prose without adding format, precedence (glob vs. query), or interaction details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (recursively search) plus resource (files) and two matching modes (glob on names/paths, regex on contents), which is more precise than the title alone. It does not, however, explicitly distinguish itself from nearby siblings like list_dir or read_file, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'optionally a regular expression in their contents' implies the two usage modes (name-only glob vs. content grep), which is useful implied guidance. There is no explicit statement of when to prefer this over list_dir/read_file, nor any exclusion or prerequisite, so usage remains inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stat_pathInspect a pathARead-onlyIdempotent
Return stat information for a file, directory or symlink, including size, permissions, timestamps and the resolved real path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path or path relative to $HOME. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description's added value is the disclosure that symlinks are resolved to the real path. It says nothing about error handling for nonexistent or permission-denied paths, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that declares the operation and enumerates return fields with zero filler. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description usefully enumerates the returned fields and notes real-path resolution. It is nearly complete for a trivial one-parameter read tool; only failure-mode behavior is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, with the schema itself defining "Absolute path or path relative to $HOME." The description adds no path syntax, tilde handling, or edge-case guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ("Return stat information") applied to a specific resource (file, directory or symlink), plus an enumeration of the returned fields (size, permissions, timestamps, resolved real path). It does not name or distinguish itself from nearby siblings such as list_dir or read_file, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of "stat information" suggests metadata inspection as opposed to content reading, but there is no explicit when-to-use statement, no exclusion of list_dir/read_file, and no note about behavior on missing paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_infoInspect the Termux/Android environmentARead-onlyIdempotent
Return device model, Android version, Termux paths, CPU/memory/load, storage usage, network interfaces and availability of common tools (node, python, git, tmux, Termux:API).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real value by disclosing the breadth of collected information, but says nothing about cost or latency (this likely shells out to many probes) or output size, which an agent planning repeated calls would want.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the returned data categories front-loaded and no filler; every clause maps to a distinct part of the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-value burden and largely does by enumerating the reported categories, which is enough for an agent to know whether this tool answers its question. It does not describe the shape of the returned data, which is a minor gap for a multi-section report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing for the description to document and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb (Return) and enumerates the exact resources reported: device model, Android version, Termux paths, CPU/memory/load, storage, network interfaces, and tool availability. This clearly separates it from narrow siblings like battery_status or terminal_attach_info, though it never names those adjacent tools explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use statement, no prerequisites, and no mention of alternatives such as battery_status for power details. A useful pre-flight-check use case is only inferable from the listed contents, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_listList background tasksARead-onlyIdempotent
List background tasks with state, PID, exit code, log size and paths. Reads persisted metadata, so tasks started before a termux-mcp restart are included.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum tasks to return. Default 50. | |
| include_finished | No | Include finished tasks. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real value beyond them: it reads persisted metadata, meaning tasks started before a termux-mcp restart still appear — a non-obvious trait an agent would otherwise guess wrong about.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core purpose front-loaded and the persistence caveat following. Every clause carries information the agent cannot get from annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile and a 100%-covered two-parameter schema, the only remaining gap is return shape — and the description compensates by naming the returned fields, so no output schema is needed. Nothing required for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit (max 500, default 50) and include_finished (default true) fully documented in the schema. The description mentions no parameter behavior beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('background tasks') and enumerates the fields returned (state, PID, exit code, log size, paths). The resource domain is clearly distinct from siblings like terminal_list and task_output, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description establishes this is the enumeration entry point for background tasks, but never says when to prefer it over task_output (read a single task's output) or terminal_list, nor any exclusions. The restart note is behavioral context, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_outputRead background task outputARead-onlyIdempotent
Read a task log, either the last N lines (default) or an incremental byte range via offset. Use wait_ms to wait for new output. The result includes next_offset for cheap incremental polling.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task id returned by task_start. | |
| offset | No | Byte offset to read from. Omit to read the tail. | |
| wait_ms | No | Wait for new output or task exit. Default 0. | |
| wait_for | No | With wait_ms: return on new output/exit (any) or only when the task exits. Default any. | |
| tail_lines | No | When reading the tail, number of lines. Default 200. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuinely new context by disclosing that the result includes next_offset, enabling cheap incremental polling. Without an output schema, this return-shape hint is exactly the value the description should supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then mode selection, then the polling tip. No filler; every sentence adds actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the calling model (tail vs. offset, blocking via wait_ms) and hints at the return value (next_offset) despite there being no output schema. A slightly fuller explanation of chaining next_offset back into offset would make it fully self-contained, but nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by framing offset vs. tail as two alternative read modes and linking wait_ms to the wait-for-new-output behavior. The wait_for parameter and next_offset contract are only partially spelled out (e.g., no explicit tie between offset and next_offset chaining).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read a task log') and immediately names the two read modes (tail lines / byte offset), which cleanly separates it from task_start, task_stop, task_list, and terminal_read. It stops short of explicitly naming those siblings, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational guidance: default is tail-of-log, offset for incremental reads, and 'Use wait_ms to wait for new output' for blocking/polling. No explicit when-not-to-use or named alternative, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_removeRemove a finished taskADestructiveIdempotent
Delete the metadata, log, status and script files of a task that is no longer running.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so safety is covered. The description adds valuable detail about exactly which files are removed (metadata, log, status, script) and the 'no longer running' condition, though it does not address irreversibility or permissions directly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero waste. It states the action and the affected artifacts immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive tool with annotations covering the safety profile and full schema coverage, the description supplies the necessary context: what is deleted and the precondition. It could optionally mention that deletion is irreversible, but the annotations and scope make it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter ('id') and schema description coverage is 100%, so the schema already documents it. The description adds no parameter-specific syntax or constraints beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('metadata, log, status and script files of a task'), making the operation clear. It does not explicitly distinguish itself from close siblings like task_stop or delete_path, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'task that is no longer running' implies a precondition for use, but the description does not state when to use task_remove versus task_stop or delete_path, nor does it give explicit exclusions. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_startStart a background taskADestructive
Start a detached background shell command and return immediately with a task id, PID and log path. The task keeps running if termux-mcp restarts, and its exit code is persisted in a status file. Use task_output to read incremental output and task_stop to terminate it. Background tasks are non-interactive; use terminal_create for prompts and TUI programs.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory. Default $HOME. | |
| env | No | Extra environment variables. | |
| name | No | Optional human-readable label. | |
| command | Yes | Shell command to run in the background. | |
| wait_ms | No | Wait this long before returning, so initial output/failures are visible. Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses key behavior: the task is detached, returns immediately, survives termux-mcp restarts, and persists its exit code in a status file. It also warns that background tasks are non-interactive, which is important for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and return behavior, then adds operational context and alternatives. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately explains the immediate return values: task id, PID and log path. It also covers lifecycle behavior, persisted exit codes, follow-up tools and the non-interactive boundary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description adds useful return-value context but does not meaningfully elaborate on parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: start a detached background shell command. It also distinguishes the tool from terminal_create by calling out non-interactive use and immediate return with a task id, PID and log path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly names related tools for follow-up actions: task_output for reading output and task_stop for termination. It also gives a useful exclusion for prompts and TUI programs via terminal_create, though it does not explicitly compare against run_command for foreground execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_stopStop a background taskADestructive
Send a signal to the task process group, wait for the grace period, then force SIGKILL if it is still alive. Defaults to SIGTERM.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task id. | |
| signal | No | Initial signal. Default SIGTERM. | |
| grace_ms | No | Grace period before SIGKILL. Default 3000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the destructive profile is known; the description adds real value on top by disclosing the escalation behavior — signal the whole process group, wait a grace period, then force SIGKILL — which is exactly the risk an agent needs to understand. It leaves out what happens to the task's record and buffered output afterwards, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the kill sequence and end with the default. Nothing is repeated and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent operation with no output schema and full schema coverage, the description covers the mechanism and defaults adequately. It stops short of describing error conditions (unknown/already-exited task) or whether a follow-up task_remove is needed, which are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (id, signal enum, grace_ms bounds) is already documented in the schema. The description restates the SIGTERM default and the grace-period semantics but adds no new syntax or constraints beyond that, which is the baseline case for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (send a signal to the task process group, escalating to SIGKILL) on a specific resource, and the title/id make the target (a background task) unambiguous. It does not explicitly distinguish itself from task_remove or terminal_kill, but the mechanics described are distinctive enough to identify the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how the stop happens but never says when to choose this over siblings like task_remove (which presumably cleans up the record) or terminal_kill (which targets terminals). There are no preconditions, no exclusions, and no mention of what to do if the task is already finished.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_attach_infoShow how to attach to a sessionARead-onlyIdempotent
Return the tmux attach command for a session. Run it from a Termux terminal for direct human interaction; external Android apps should keep using terminal_read/terminal_write.
| Name | Required | Description | Default |
|---|---|---|---|
| session | Yes | Session name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description usefully adds that it only returns a command string rather than executing anything, plus the terminal environment requirement. It stops short of saying what happens for an unknown or dead session, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the return value and followed by environment guidance. No filler and nothing an agent must read past to act.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only helper with no output schema, the description tells the agent what comes back (a tmux attach command) and who should call it instead. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'session' parameter is fully documented in the schema at 100% coverage, so the baseline applies. The description's phrase 'for a session' adds no format, naming convention, or lookup behavior beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — returns the tmux attach command for a named session — and immediately contrasts it with terminal_read/terminal_write, so an agent can separate it from its closest siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the condition for use (running from a Termux terminal for direct human interaction) and the condition against it (external Android apps should keep using terminal_read/terminal_write). That is a concrete when/when-not plus a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_createCreate an interactive terminal sessionA
Create a persistent interactive shell in tmux. Sessions survive termux-mcp restarts and can run REPLs, SSH, TUI programs and prompts. The shell defaults to $SHELL (Termux bash if unset); when bash is selected, startup files are skipped by default because a custom .bashrc can break Enter handling. Set use_rc=true or terminal.useShellRc in the config to load them. Use terminal_write to type and terminal_read to capture output.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory. Default $HOME. | |
| env | No | Extra environment variables. | |
| cols | No | Terminal width. Default 100. | |
| name | No | Session name. Defaults to term-<timestamp>. | |
| rows | No | Terminal height. Default 30. | |
| shell | No | Shell or executable path. Default $SHELL or Termux bash. | |
| use_rc | No | Load the shell startup files (.bashrc). Default false. | |
| shell_args | No | Extra shell arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (not read-only, open-world, non-idempotent, non-destructive); the description adds real behavioral context beyond that: sessions survive termux-mcp restarts, shell defaults to $SHELL/Termux bash, and bash startup files are skipped by default with the reason given. It does not cover what happens if a session name already exists, nor whether the caller must later use terminal_kill to clean up.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose, then capabilities, then the shell/rc caveat, then next steps. No filler and no repetition of annotation or schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, all-optional creation tool with a nested env object and no output schema, the description covers purpose, persistence, and shell behavior well. The one notable omission is what the call returns (presumably the session name/id that terminal_write needs) and the fact that the default term-<timestamp> name makes retrieving that identifier important.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns above baseline by explaining the rationale behind use_rc (a custom .bashrc can break Enter handling) and the config-level override terminal.useShellRc, which adds meaning the one-line schema description does not convey. It does not touch cwd, env, cols, rows, or shell_args, but those are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a persistent interactive shell in tmux') and immediately scopes it to REPLs, SSH, TUI programs and prompts, which separates it from one-shot command execution siblings like run_command. It also names terminal_write and terminal_read as the follow-on tools, so the agent can place this tool in the workflow without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context (persistent shell, REPLs, SSH, TUI) and explicitly routes to terminal_write/terminal_read for subsequent interaction. It does not explicitly say when NOT to use this versus run_command (e.g., for one-off commands), which is the main remaining gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_killKill a terminal sessionADestructive
Kill one terminal session by name, or every session with all=true. Killing a session terminates its shell and any programs running in that pane.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Kill every terminal session. | |
| session | No | Session name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, so the safety profile is covered. The description adds real consequence detail beyond that: the shell and any programs running in the pane are terminated, which tells the agent the blast radius extends past the session object.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, keyed on the parameter name, with the destructive consequence placed immediately after the invocation rule. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with full schema coverage and no output schema, the description covers selection and effect. Minor gaps remain: whether a missing session name errors, how a nonexistent session is handled, and whether running tasks are also affected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented; the description adds the framing that 'session' and 'all' are alternative modes rather than combinable filters, which is meaning beyond the flat schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Kill one terminal session by name') plus the alternate bulk mode, which cleanly distinguishes it from terminal_create, terminal_write, terminal_read and terminal_resize among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two invocation modes are spelled out — name a session, or set all=true to kill everything — so an agent knows how to select behavior. It stops short of warning when not to use it (e.g. neither parameter supplied, or preferring task_stop for running tasks), so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_listList terminal sessionsARead-onlyIdempotent
List tmux-backed terminal sessions with size, current command, PID, alive/dead state and a command for attaching from a Termux terminal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by disclosing the returned fields, including session state and an attach command, though it does not mention ordering or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the resource and then enumerates return values. No filler or repetition; every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description appropriately explains what is returned: session size, command, PID, state, and attach command. It is nearly complete for this simple read-only tool, though it omits ordering or whether all sessions are always included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4; there are no parameter semantics to explain. The description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("List tmux-backed terminal sessions") and enumerates exactly what is returned, including size, command, PID, state, and attach command. This clearly distinguishes it from siblings like terminal_create, terminal_write, and terminal_kill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as terminal_attach_info or terminal_read. The listing purpose is implied by the verb "List", but no when-to-use or when-not-to-use conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_readRead terminal outputARead-onlyIdempotent
Capture the visible screen and recent scrollback of a terminal session. Use expect with a regex to wait until a prompt or marker appears; if it does not match within timeout_ms, the result has expect_matched=false and timed_out=true. ANSI escapes are stripped by default. full_history=true captures the whole tmux history.
| Name | Required | Description | Default |
|---|---|---|---|
| ansi | No | Keep ANSI escape sequences. Default false. | |
| lines | No | Scrollback lines to capture. Default 120. | |
| expect | No | Regex to wait for in the captured output. | |
| session | Yes | Session name. | |
| wait_ms | No | Wait before the first capture. | |
| timeout_ms | No | Expect polling timeout. Default 10000. | |
| full_history | No | Capture the entire tmux history. Default false. | |
| join_wrapped | No | Join wrapped lines (tmux -J). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive=false, so the safety profile is covered. The description adds real behavioral detail: timeout yields expect_matched=false and timed_out=true, ANSI is stripped by default, and full_history pulls the entire tmux history. Possibly missing is pagination or capture size limits, but the core behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action, then the expect semantics, then two default-behavior notes. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and no output schema, the description compensates by documenting the key return signals (expect_matched, timed_out) and default behaviors. Adequate for correct invocation; a note on what 'visible screen' vs lines bounds mean could add polish.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes further by explaining the expect/timeout_ms interaction and the return flags it produces, plus the real effect of ansi and full_history. This adds meaning beyond the per-parameter schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource – 'capture the visible screen and recent scrollback of a terminal session' – which clearly separates it from terminal_write, terminal_create, and file reads. It does not explicitly name a sibling or state scope boundaries, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditional guidance: 'Use expect with a regex to wait until a prompt or marker appears' and when to use full_history. This tells the agent when a parameter pattern applies, though it offers no explicit exclusions or alternatives (e.g. vs read_file or task_output).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_resizeResize a terminal sessionAIdempotent
Resize the tmux window/PTY used by a terminal session. Useful before launching TUI programs.
| Name | Required | Description | Default |
|---|---|---|---|
| cols | Yes | Width in columns. | |
| rows | Yes | Height in rows. | |
| session | Yes | Session name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that resizing affects the tmux window/PTY of a named session, which is useful beyond the annotations, but it does not say what happens to output or programs already running in the session, nor whether the session must already exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the core action is front-loaded and the usage hint follows. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters are documented and annotations cover safety and idempotency, so the basics are present. For a tool that mutates a live PTY, however, the description omits what happens to in-flight output or running applications and whether a nonexistent session errors, leaving it adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters carry both descriptions and value bounds, so the schema does the heavy lifting. The description adds no syntax, format, or defaults beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: resizing the tmux window/PTY backing a terminal session. It is clearly distinct from sibling tools like terminal_create, terminal_write, and terminal_read. It stops short of explicitly naming how it differs from those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful before launching TUI programs" gives an explicit, actionable usage context rather than leaving it implied. There are no exclusions or when-not-to-use conditions, and no mention of how to discover current dimensions before resizing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_writeType into a terminal sessionA
Send literal text, special key names, and/or Enter to a terminal session. Multi-line or large text is pasted through a tmux buffer by default; set paste=false to force literal send-keys. Key names use tmux notation: Enter, Tab, Escape, Up, Down, Left, Right, C-c, C-d, M-x, F1, etc. Set wait_ms to return a capture in the same call.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | No | tmux key names, e.g. ["C-c"] or ["Tab","Enter"]. | |
| input | No | Literal text to type or paste. | |
| paste | No | Force bracketed paste. Default: auto for multi-line/large input. | |
| submit | No | Send Enter after the input/keys. Default false. | |
| session | Yes | Session name. | |
| wait_ms | No | Wait before capturing output. Default 0. | |
| read_lines | No | Lines captured when wait_ms > 0. Default 80. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing the tmux-buffer paste default for multi-line/large text, the paste=false override, the tmux key-notation convention, and that wait_ms yields a capture in the same call. It does not say what happens on a missing/dead session or whether the call blocks, but the important write-path behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences, each carrying distinct information (what it sends, paste default, key syntax, wait_ms capture). No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutating tool with no output schema, the description covers the main behavior paths and the capture-in-same-call return mechanism. Minor gaps remain around failure modes (invalid session) and interaction between submit and keys, but nothing needed for a correct basic call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by adding the tmux key notation vocabulary (C-c, M-x, F1) and the auto-paste condition for multi-line/large input, which clarify how keys/paste/input interact beyond the terse schema strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (send) and resource (literal text, key names, Enter to a terminal session), which is clearly distinct from terminal_read and terminal_create. It does not explicitly contrast with run_command, the nearest sibling that also executes things in a session, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (type/paste into an existing session) and explains the paste vs literal send-keys choice, but never says when to use this instead of run_command or when to prefer terminal_read. No explicit alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
termux_apiRun a raw Termux:API commandADestructive
Advanced escape hatch: run any termux-* command directly (for example command="wifi-connectioninfo", args=["-i"]). No shell is involved, but the command still has the full permissions granted to Termux:API. Privacy-sensitive commands such as SMS, calls, contacts, location, camera and microphone are available if the Termux:API app has been granted those Android permissions; every call is written to the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Command arguments. No shell expansion is performed. | |
| stdin | No | Text written to standard input. | |
| command | Yes | Command name with or without the termux- prefix, e.g. "wifi-connectioninfo". | |
| timeout_sec | No | Timeout. Default from config. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/openWorld/non-idempotent, and the description adds valuable context beyond them: no shell involvement, that commands inherit full Termux:API permissions, permission-gating for SMS/location/camera/mic, and that every call is audit-logged. It doesn't state concrete side effects or rollback for destructive commands, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and example, then consolidates permissions/audit caveats efficiently. Slightly dense run-on sentence structure but no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a raw escape-hatch tool with no output schema and full schema coverage, the description covers permissions, shell behavior, and audit logging. It leaves return-value shape unspecified, but the escape-hatch nature makes that a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented. The description adds a concrete usage example (command='wifi-connectioninfo', args=['-i']) and reinforces that no shell expansion happens, but this is a minor supplement over the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('run any termux-* command directly') and frames it as an 'advanced escape hatch', which implicitly distinguishes it from the shell-executing run_command sibling. An agent knows exactly what this does versus the higher-level tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'advanced escape hatch' framing signals this is a fallback for cases not covered by dedicated tools, and the privacy-sensitive command list hints at when extra care is needed. It stops short of explicitly naming when to prefer system_info/run_command instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toastShow an Android toastB
Show a short toast message on the device via Termux:API.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Toast text. | |
| short | No | Use the short toast duration. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds the real behavioral detail that delivery goes through Termux:API, implying an external dependency, but says nothing about failure modes when the API app is missing or whether the call blocks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; every clause (action, target, mechanism) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial two-parameter side-effect tool with full schema coverage and annotations, the description is nearly sufficient. It omits the one thing an agent might need to know operationally: that it depends on the Termux:API add-on being installed and functional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both text (1-500 chars) and the short boolean default are fully documented in the schema. The description adds nothing beyond that, which is acceptable given the schema does the work, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Show a short toast message on the device") and names the transport (Termux:API). It does not, however, distinguish itself from close siblings like notify, vibrate, or tts_speak, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use a toast versus notify or tts_speak, and no mention of prerequisites (Termux:API app installed, foreground app visibility). Usage is only implied by the name and the word "short".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tts_speakSpeak text with Android TTSC
Speak text aloud using the Android text-to-speech engine via Termux:API.
| Name | Required | Description | Default |
|---|---|---|---|
| rate | No | Speech rate. Default 1. | |
| text | Yes | Text to speak. | |
| pitch | No | Speech pitch. Default 1. | |
| language | No | BCP-47 language tag, e.g. en-US or zh-CN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, destructiveHint=false, so the description should add context the annotations cannot convey. It says nothing about whether the call blocks until speech finishes, how long a 4000-character utterance takes, that the Termux:API package must be installed, or what a failure looks like. It largely restates the title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity shades into under-specification for a tool that produces spoken output with timing side effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents the four parameters and there is no output schema, so the input contract is covered. What is missing is behavioral context an agent needs — blocking duration, dependency on termux-api, and whether audio plays locally only — which matters for an open-world, non-idempotent side-effecting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — text, rate, pitch, and language each carry bounds and defaults ('Default 1', BCP-47 example 'en-US'). The description adds nothing about parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Speak text aloud') and a specific resource/engine ('Android text-to-speech engine via Termux:API'), which separates it from audio-adjacent siblings like notify, toast, and vibrate. It stops just short of a 5 because it never explicitly says how it differs from those siblings or what happens to the audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no named alternative. An agent must infer that this is for spoken output rather than toast/notify/vibrate notifications, and nothing tells it whether this is appropriate for long text, blocking callers, or repeated invocations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vibrateVibrate the deviceB
Vibrate the device for the given duration via Termux:API.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Vibrate even in silent mode. | |
| duration_ms | No | Duration in milliseconds. Default 300. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=true, so the safety profile is covered. The description adds one piece of useful context beyond that: the dependency on Termux:API. It says nothing about blocking behavior or failure when Termux:API is unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the action and the controlling parameter lead the sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter side-effect tool with full schema coverage and a complete annotation set, this is largely sufficient. The only meaningful gap is what happens if Termux:API isn't present, which an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, documenting both `duration_ms` (with min/max and default 300) and `force` (silent-mode override). The description adds no meaning beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Vibrate the device') plus the duration scope and the underlying mechanism (Termux:API). It is clear what the tool does, though it doesn't explicitly contrast with sibling output tools like notify or toast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus notify/toast/tts_speak, and no prerequisites stated (e.g. Termux:API must be installed). The agent must infer the usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileWrite or append to a fileADestructive
Create, overwrite or append to a text file inside an allowed directory. Writes are atomic for overwrite mode. Parent directories can be created automatically. Content is returned as a small JSON summary.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path or path relative to $HOME. | |
| append | No | Append instead of overwriting. Default false. | |
| content | Yes | File content. | |
| encoding | No | Encoding of content. Default utf8. Use base64 for binary. | |
| create_parents | No | Create missing parent directories. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, and the description reinforces this by flagging overwrite semantics without contradicting them. It adds genuinely non-structured context: atomic writes for overwrite mode, automatic parent directory creation, and that a small JSON summary is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with no filler, and the most important information (create/overwrite/append into an allowed directory) is front-loaded. Slightly episodic but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the destructive overwrite behavior, atomicity, directory creation, and return shape. The main remaining gap is guidance on choosing it over edit_file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented, and the description adds only a loose reference to parent directory creation. It contributes no syntax, defaults, or edge-case behavior beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names concrete verbs (create, overwrite, append) against a specific resource (text file) and adds a scoping constraint (inside an allowed directory). It does not differentiate from the closely related edit_file sibling, so an agent must still infer which write tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'create, overwrite or append' and the allowed-directory constraint, but there is no explicit when-to-use or when-not guidance. Nothing tells the agent to prefer edit_file for in-place changes or read_file/stat_path for verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
33 tool updates
v1.0.0- First observed
battery_status - First observed
clipboard_get - First observed
clipboard_set - First observed
copy_path - First observed
delete_path - First observed
edit_file - First observed
list_dir - First observed
mkdir - First observed
move_path - First observed
notify - First observed
open - First observed
read_file - First observed
run_command - First observed
search_files - First observed
stat_path - First observed
system_info - First observed
task_list - First observed
task_output - First observed
task_remove - First observed
task_start - First observed
task_stop - First observed
terminal_attach_info - First observed
terminal_create - First observed
terminal_kill - First observed
terminal_list - First observed
terminal_read - First observed
terminal_resize - First observed
terminal_write - First observed
termux_api - First observed
toast - First observed
tts_speak - First observed
vibrate - First observed
write_file
TDQS
Scored across 33 tools
Descriptions do a strong job of routing between overlapping entry points: run_command vs terminal_* vs task_* is explicitly explained, and termux_api is framed as an escape hatch for the specific termux-api wrappers. Minor overlaps remain (terminal_attach_info duplicates the attach command already returned by terminal_list, and termux_api can do everything the specific Android tools do), but they are deliberate conveniences rather than confusion.
Strong grouping via prefixes (terminal_*, task_*, clipboard_*) and mostly verb_noun naming (read_file, list_dir, task_start, move_path). Deviations: clipboard_get/set use noun_verb ordering while the majority use verb_noun, and a handful are bare verbs (open, toast, notify, vibrate, mkdir) with no consistent noun.
33 tools is at the high end; however the surface is genuinely broad, spanning filesystem CRUD, tmux terminals, background tasks, Android Termux:API, and system info, and the tools are cleanly clustered by subsystem. Each group earns its tools, but an agent must scan a large menu and the count exceeds the comfortable 3-15 range.
Lifecycle coverage is thorough in every subsystem: filesystem has read/write/edit/delete/mkdir/copy/move/list/stat/search; terminals have create/write/read/list/resize/kill/attach; tasks have start/list/output/stop/remove; Android has clipboard, notifications, toast, vibrate, open, battery, TTS plus an escape hatch. No obvious dead ends, with run_command and termux_api filling residual gaps.
Maintenance
Related MCP Connectors
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Termalin's hosted MCP server. Claude, ChatGPT or any MCP client runs commands, moves files over SFTP, queries databases and reads server metrics and monitoring alerts on your servers, keylessly through Termalin Connectors: no SSH key is handed over and no inbound port is opened. Per-host command policy and an audit log. Needs a termal.in Pro or Team account (new accounts start with a 14-day Pro trial).
Securely control paired computers with ReMCP.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceZero-dependency Model Context Protocol server for Termux (Android) that gives shell access to your device.7 npm2MIT
- FlicenseNot gradedqualityDmaintenanceProvides Android device and Termux capabilities to RikkaHub via a local MCP server, enabling device info, battery, power sampling, package installs, proot-distro management, brightness/volume control, and optional command execution.-
- FlicenseNot gradedqualityAmaintenanceA secure MCP gateway for Termux that exposes filesystem, shell, and Termux:API tools over a local HTTP endpoint with admin controls, job management, and upstream support.1-
- AlicenseNot gradedqualityBmaintenanceEnables LLM agents to remotely perform Termux/Android operations through a hosted MCP endpoint, including device status checks, shell command execution, and package management.7 npm1MIT