Skip to main content
Glama

minibot

CI Python 3.10+ License: MIT

A locally-hosted bot for your terminal, powered by Ollama tool calling. Type natural language — the model picks tools, your bot eats, plays, recharges, and can read/write code files in a restricted sandbox.

Zero third-party dependencies: pure Python stdlib. Runs on Termux, Linux, macOS and Windows.

   .---. Pixel the bot · mood: happy · age 3d
  / o o \ Hunger    [██░░░░░░░░]  20/100
  \  w  / Happiness [███████░░░]  72/100
   '---' Energy     [██████░░░░]  65/100
          Health    [██████████] 100/100
❯ write a file hello.py that prints hello
» tools: write_file
Pixel: wrote hello.py (21 bytes), want me to run the idea past you?

Requirements

  • Python 3.10+

  • Ollama running locally (or on another machine on your LAN)

Related MCP server: veriloop

Install Ollama

Platform

How

Linux

curl -fsSL https://ollama.com/install.sh | sh

macOS

brew install ollama, or download from ollama.com

Windows

winget install Ollama.Ollama, then start "Ollama" from the Start menu

Termux

pkg install python first. Ollama is not in the official Termux repo — options: the Termux User Repository (pkg install tur-repo && pkg install ollama, availability varies by architecture) or a community aarch64-linux-android build (see Ollama's GitHub issues). If your phone can't run Ollama, install it on your PC and point ollama_url at http://<pc-ip>:11434 on the same Wi-Fi

Pull a tool-calling-capable model (7B recommended on desktops):

ollama pull qwen2.5:7b        # or llama3.1:8b
# phones / weak CPUs:
ollama pull qwen2.5:3b
ollama pull qwen2.5:1.5b

Verify: curl http://127.0.0.1:11434/api/tags should list your models.

Install minibot

git clone https://github.com/karun99/minibot.git && cd minibot
pip install .          # installs the `minibot` command
# — or run without installing:  python -m minibot

No pip install step needed beyond that — there are no runtime dependencies.

Quick start

minibot doctor        # check python/config/sandbox/ollama/model
minibot run           # interactive terminal bot

Then chat, or use direct commands (they work even with Ollama stopped):

/feed  /play  /rest  /treat  /status  /stats
/ls  /read notes.md  /write notes.md  /history  /undo notes.md
/needle on   /doctor   /clear   /help   /quit

Caring for the bot earns treats (feed and rest earn 1, play earns 2, capped at 20); /treat spends one for a small happiness/health/energy boost. /stats charts the recent stat history, /history lists recent sandbox writes and /undo [file] reverts one.

Type minibot run --offline to start anyway when Ollama is down (direct /commands only).

One-shot commands (scriptable)

minibot status            # human readable
minibot status --json     # machine readable
minibot feed              # feed once
minibot treat             # spend a treat
minibot stats --points 20 # recent stat chart (also --json)
minibot ls src/
minibot read src/app.py
echo "print('hi')" | minibot write hello.py
minibot history           # recent sandbox writes
minibot undo src/app.py   # restore the previous version
minibot chat "read hello.py and tell me what it does"

Use it from any MCP client

minibot mcp serves the bot's tools over stdio using the Model Context Protocol, so Claude Desktop, Cursor, OpenCode or any other MCP client can feed your bot, read and write sandbox files, and undo writes:

{
  "mcpServers": {
    "minibot": {
      "command": "minibot",
      "args": ["mcp"]
    }
  }
}

Exposed tools: feed_bot, play_with_bot, rest_bot, give_treat, get_bot_status, read_file, write_file, list_dir, file_history, undo_write. The same sandbox rules apply — a client outside your machine still cannot escape the sandbox directory.

Configuration

Search order: --config PATH → ./config.json → $XDG_CONFIG_HOME/minibot/config.json → ~/.config/minibot/config.json → defaults. Precedence: CLI flags > environment > config file > defaults.

Copy config.example.json to config.json and edit. Every key is optional:

Key

Default

Meaning

ollama_url

http://127.0.0.1:11434

Ollama endpoint (also OLLAMA_HOST)

model

qwen2.5:7b

model for the main loop (also MINIBOT_MODEL)

bot_name

Pixel

your bot's name

sandbox_path

~/.minibot/sandbox

only directory file tools can touch (also MINIBOT_SANDBOX)

state_path

~/.minibot/state.json

persisted bot state

log_path

~/.minibot/minibot.log

rotating log (tool calls + file writes)

max_iterations

5

tool-loop cap per user message

max_file_bytes

1048576

read/write size limit (1 MB)

journal_path

~/.minibot/journal.jsonl

write journal backing /history and /undo

journal_entries

100

how many writes the journal keeps

needle.enabled

false

intent pre-filter on/off

needle.mode

heuristic

heuristic (zero-model) or ollama (tiny classifier model)

decay.*

see example

stat drift per hour of real time

MINIBOT_HOME (default ~/.minibot) overrides where state/sandbox/logs live.

The Needle pre-filter (optional)

When enabled, input is classified first into bot_action / file_action / chat / unknown:

  • heuristic mode — regex/keyword classifier, no model, instant, offline.

  • ollama mode — a tiny classifier model (needle.model); any failure silently falls back to the heuristic, and any total failure falls back to the main loop (graceful degradation).

  • Only high-confidence, unambiguous bot-care phrases ("feed my bot", "status") execute directly without the LLM; everything else — including vague or mixed requests — goes through the normal tool-calling loop.

Sandbox safety

  • All paths are resolved (symlinks followed) and must stay inside the sandbox.

  • .. traversal, absolute paths outside the root, escaping symlinks and null bytes are rejected with a safe error.

  • Read/write capped at max_file_bytes (default 1 MB).

  • Every write is logged with timestamp, path and size.

Tests

pip install pytest
pytest

180+ tests: sandbox traversal attacks, state decay/persistence, treat inventory, stat-history samples, the write journal (history/undo), tool schemas, the ReAct loop (malformed-JSON retry, max iterations, history trimming), Needle routing, the Ollama client against a local fake server, the MCP server over stdio, and CLI acceptance tests.

Troubleshooting

Symptom

Fix

Ollama unreachable at startup

ollama serve, or check ollama_url / OLLAMA_HOST

model '…' is not pulled

ollama pull <model>

Bot replies but never uses tools

use a tool-capable model (ollama show <model> | grep Tools)

Loop hits max iterations

ask for one thing at a time, or raise max_iterations

Colors/emoji look wrong

MINIBOT_ASCII=1 minibot run, or NO_COLOR=1

Windows console garbled

Windows Terminal recommended (VT sequences auto-enabled)

Layout

minibot/
  config.py          config file + env + CLI precedence
  state.py           bot stats, time decay, atomic JSON persistence
  sandbox.py         path containment, size limits, write audit
  tools.py           tool schemas + handlers (add a tool in ~10 lines)
  ollama_client.py   stdlib HTTP client for /api/chat and /api/tags
  needle.py          optional intent pre-filter (heuristic | ollama)
  orchestrator.py    ReAct loop, malformed-retry, history trimming
  mcp_server.py      stdio MCP server: expose the tools to other agents
  tui.py             terminal UI: sprite, bars, slash commands
  cli.py             run/status/feed/treat/stats/history/undo/chat/mcp/doctor
  checks.py          health checks shared by doctor and /doctor
docs/SRS.md          the requirements this implements
tests/               pytest suite (run on a fast disk, not an SD card)

License

MIT — see LICENSE.

Available Tools

10 tools
feed_botA

Feed the bot Pixel. Reduces hunger (0 = full, 100 = starving), small happiness and health boost. Use when the user says the bot is hungry or asks to feed it.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does well to state the hunger scale (0 = full, 100 = starving) and the direction of happiness/health effects, but says nothing about feeding limits, overfeeding consequences, cooldowns, or what the response contains. For a zero-parameter mutation this is adequate but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences: action, effects with scale, then trigger. The core behavior and the hunger scale are front-loaded. Nothing is redundant, though the parenthetical hunger explanation slightly interrupts the flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple no-param tool with no output schema and no annotations, the description covers what it does, its effects, and when to use it. Missing only return-value expectations and interaction with sibling tools like give_treat, which would be needed to make routing fully reliable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4. The description correctly implies no inputs are needed ('Feed the bot Pixel'), and there are no parameter semantics to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Feed') and resource ('the bot') with explicit effects: reduces hunger, boosts happiness and health. It does not distinguish itself from the sibling give_treat, which is a closely related feeding action, so an agent cannot tell when to pick one over the other from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger: 'Use when the user says the bot is hungry or asks to feed it.' This is actionable context for when to call it. It stops short of exclusions or naming an alternative such as give_treat or play_with_bot, which leaves edge cases unresolved.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

file_historyA

List recent sandbox file writes (who wrote what, and when). Use before undoing a write you did not intend to make.

NameRequiredDescriptionDefault
limitNoHow many recent writes to return (default 20)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. 'List' implies a read-only, non-destructive operation and the sandbox scope plus returned fields are stated, but it omits pagination/ordering behavior and whether results span all files or only recent sessions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero waste, with the purpose front-loaded and the usage cue immediately following.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter list tool with a fully documented schema and no output schema, the description covers what it returns and when to reach for it. Only richer behavioral detail (ordering, scope boundaries) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (limit) with 100% schema coverage and a documented default of 20, so the schema does the heavy lifting. The description adds nothing beyond the schema about the limit or ordering semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('recent sandbox file writes') and clarifies the record fields with 'who wrote what, and when'. It implicitly separates itself from write_file/read_file by being a history view, though it never names sibling tools outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use before undoing a write you did not intend to make' gives a concrete triggering situation that points the agent toward undo_write as the follow-up action. No explicit when-not conditions or named alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bot_statusA

Return the bot's current stats (hunger/happiness/energy/health), mood and age in days.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. "Return" implies a read, but it never states explicitly that the call is side-effect free, nor whether reading advances time or triggers stat decay — plausible concerns for a bot simulator.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the action and then the exact return contents, with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 must describe the return value — and it does, naming every stat field, the mood and the age in days. It stops short of describing value ranges or whether stats decay over time, which would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero properties, so there are no parameter semantics to explain; the baseline of 4 applies. The description correctly implies no input is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ("Return") plus resource ("the bot's current stats") with the returned fields enumerated (hunger/happiness/energy/health, mood, age). It is functionally separable from the mutating siblings (feed_bot, play_with_bot, rest_bot), though it never names them to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the read-side companion to feed/play/rest, but the description never says when to call it (e.g., before feeding to check hunger) or that the mutators are the alternative for changing stats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

give_treatA

Give Pixel a treat from the inventory. Costs one treat (earned by feeding, playing and resting); boosts happiness, health and energy a little.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the two key behaviors: it consumes one treat from inventory and it boosts happiness, health and energy. It does not say what happens when the inventory is empty, whether the call fails or is a no-op, or how large the boost is, which matters for a state-mutating tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both of which earn their place: one states the action and its cost, the other states the effect. The cost, the most decision-relevant fact, is front-loaded before the benefit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool, the description covers the essentials: what it does, what it costs, and what it changes. The only meaningful gap is the failure mode when no treat is available, which an agent would want to know before attempting the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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. The baseline for a parameterless tool applies, and the description doesn't waste words inventing parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Give Pixel a treat from the inventory') and implies a distinct mechanic from feed_bot, play_with_bot and rest_bot by consuming a stored treat. It could have explicitly named how it differs from feed_bot, but the resource is unambiguous enough to separate it from its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The cost sentence ('earned by feeding, playing and resting') implies the precondition for using this tool, so usage is inferable rather than stated. There is no explicit guidance on when to prefer this over feed_bot or play_with_bot, nor any stated exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dirA

List a directory inside the sandbox. 'path' defaults to the sandbox root; use it to browse files before reading or writing.

NameRequiredDescriptionDefault
pathNoDirectory relative to the sandbox root (default '.')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the sandbox scope and default root path, but does not describe return format, ordering, hidden-file behavior, or error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the purpose front-loaded and no wasted language. The default path and usage hint are both useful and compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, optional, non-destructive directory listing tool, the description is nearly complete. The main omission is return shape, but the tool is simple enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents 'path' with a default of '.'. The description confirms the sandbox-root default but adds no new syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List a directory') and scopes it to the sandbox, which clearly distinguishes browsing from read_file/write_file siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: browse files before reading or writing. It does not name explicit alternatives or exclusions, but the guidance is sufficient for a simple listing tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

play_with_botA

Play with the bot. Raises happiness, costs energy, adds a little hunger. Fails if the bot is exhausted or sick.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does disclose the mutation's side effects on happiness, energy, and hunger plus a failure condition — meaningful behavioral context an agent cannot get from the empty schema. It does not say whether a failed play leaves state untouched or what the error looks like, which keeps 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the action and its effects come first, and the failure condition is placed last where it belongs. Every clause adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description supplies what the agent needs: what changes in state and when the call fails. Magnitudes (how much energy/happiness) and post-failure state are unspecified, which is a minor but real gap for an agent reasoning about resource management.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing the description needs to disambiguate. It correctly implies a parameterless, single-target action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Play with the bot" states a specific verb and resource, and the follow-up sentence enumerates the concrete state effects (happiness up, energy down, hunger up), which distinctively separates it from feed_bot, rest_bot, and give_treat. It stops short of naming those siblings explicitly, but the effect profile makes the distinction inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Fails if the bot is exhausted or sick" gives a usable precondition for calling it, and the energy cost implies a budget consideration. However, there is no explicit guidance on when to choose play over feed_bot/give_treat, nor any suggestion to check get_bot_status first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileA

Read a UTF-8 text file inside the sandbox directory. 'path' is relative to the sandbox root (e.g. 'notes/todo.md'). Absolute paths and '..' are rejected.

NameRequiredDescriptionDefault
pathYesFile path relative to the sandbox root

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral load, and it does disclose key constraints: UTF-8 only, sandbox-scoped, absolute paths and '..' rejected. It omits error behavior for missing files, size/encoding failure modes, and return shape, which matters given there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the core action and the hard constraint both front-loaded. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-required-parameter read tool with full schema coverage, this covers scope, encoding, and path rules adequately. The remaining gap is failure behavior (nonexistent file, permission, non-UTF-8 content), which is not addressed anywhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description goes further by adding an example path format ('notes/todo.md') and explicitly stating that absolute paths and '..' are rejected, which is real meaning beyond the schema's 'relative to the sandbox root'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (UTF-8 text file inside the sandbox directory), which cleanly separates it from write_file/list_dir in the sibling set. It stops short of explicitly naming or contrasting a sibling, so it sits just below the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb — nothing tells the agent when to prefer this over list_dir (to discover paths) or file_history/undo_write. The path constraints are stated, but there is no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rest_botA

Let Pixel rest/recharge. Restores energy, small hunger cost. Use when the bot is tired.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose the key tradeoff: energy is restored at a small hunger cost, which changes agent strategy (don't spam rest). It omits cooldowns, time duration, or whether the action is reversible, but the core side effect is surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: purpose and effects first, trigger condition second. No filler, nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-param state-changing action with no annotations or output schema, the description covers what it does, its side effect, and when to call it. Only the result format / post-rest state is unstated, which is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing to disambiguate; the description correctly spends no words on inputs and none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Let Pixel rest/recharge') and immediately names the concrete effects (restores energy, small hunger cost). It clearly contrasts with feed_bot/give_treat by being about energy rather than hunger, though it does not explicitly call out the sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when the bot is tired' gives an unambiguous activation condition. It stops short of naming when NOT to use it or pointing to alternatives (e.g., get_bot_status to check energy first), so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_writeA

Undo a sandbox file write: restores the previous contents, or deletes the file if the write created it. Without 'path' undoes the most recent write.

NameRequiredDescriptionDefault
pathNoFile to revert (relative to the sandbox root); omit for the last write

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and it does disclose the key mutation outcome — that the file may be deleted if the write created it. Missing are failure modes: what happens if the file changed after the write, whether repeated undos walk back further, and whether the operation errors or no-ops when nothing is undoable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the primary action front-loaded and the default-behavior clause second. No wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter tool with no output schema, the description covers both behavioral branches (restore vs delete) and the no-argument default. It would be complete with a note on the response or on error conditions when there is nothing to undo.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents that omitting path targets the last write, so the description's restatement adds little. A baseline 3 is appropriate since the schema does the parameter work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (undo) and resource (a sandbox file write) and spells out both possible outcomes: restoring previous contents or deleting a file the write created. It is clearly distinguishable from read_file/write_file, though it does not address the closest alternative, file_history, for inspecting prior versions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "Without 'path' undoes the most recent write" explains the default argument behavior, which implies when the tool applies. There is no explicit guidance on when to prefer undo over file_history for restoring state, nor any note on preconditions such as whether the write must still be the latest change.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_fileA

Create or overwrite a UTF-8 text file inside the sandbox (e.g. write code). 'path' is relative to the sandbox root; absolute paths and '..' are rejected.

NameRequiredDescriptionDefault
pathYesFile path relative to the sandbox root
contentYesFull new contents of the file

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does useful work by disclosing the overwrite-destroys-existing-content semantics and the path validation rule that rejects absolute paths and '..'. It leaves other behavioral gaps unaddressed: whether parent directories are created, whether writes are reversible via undo_write, size limits, and what (if anything) 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The core operation is front-loaded, and the path constraint follows immediately as supporting detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter write tool with no output schema, the description covers what is written, encoding, and path rules. Missing only secondary details an agent might want: return value, directory auto-creation, and interaction with the undo_write sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning beyond the schema by stating the hard constraint that absolute paths and '..' segments are rejected, which is actionable validation info the schema does not carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Create or overwrite a UTF-8 text file inside the sandbox') with a concrete example of intended use (write code). It is easy to separate from siblings like read_file, undo_write, and file_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Create or overwrite' plus the sandbox-pathing note gives clear context for when this applies versus reading or listing files. It stops short of explicitly naming alternatives such as undo_write for reverting an overwrite or file_history for inspecting prior versions.

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.

  1. 10 tool updatesv1.0.0
    • First observedfeed_bot
    • First observedfile_history
    • First observedget_bot_status
    • First observedgive_treat
    • First observedlist_dir
    • First observedplay_with_bot
    • First observedread_file
    • First observedrest_bot
    • First observedundo_write
    • First observedwrite_file

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation4/5

The set splits into two clear clusters: bot-care tools and sandbox-file tools. Within each cluster the operations are distinct, though feed_bot and give_treat have overlapping effects and could occasionally be confused.

Naming Consistency3/5

Most names are verb_noun, but conventions vary: feed_bot/play_with_bot/rest_bot use a bot suffix, file tools use read_file/write_file/list_dir, and file_history/undo_write break the pattern. Still readable, but not a single predictable scheme.

Tool Count5/5

Ten tools is well-scoped for a small virtual-pet server with sandboxed file support. Each tool has a distinct role and the count does not feel bloated or thin.

Completeness3/5

Bot care covers feeding, playing, resting, status, and treats, but lacks inventory inspection or healing/medicine operations. File handling covers read, write, list, history, and undo, but misses explicit delete, move, copy, or search operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Stdio MCP server for sandboxed file access — read files, search content, safely edit with checksums, and manage file structure.
    98 npm
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    Exposes a verified tool registry (calculator, sandboxed file read, web fetch) over MCP stdio, enabling any MCP-capable client to reuse the same tools from the inspectable ReAct loop.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A small filesystem MCP server that reads and writes files under one confined root over stdio, with paginated tools and strict change-detection. It enables safe, deterministic file access for agentic runtimes and MCP clients.
    21 npm
    MIT