TinyAssets
This server is the control and monitoring surface for an AI story-writing daemon: you can steer its direction, inspect its progress, and manage its running state.
Orient/monitor:
get_status,get_review_state,get_progress, andget_activityshow daemon phase, word count, accept rate, outline, chapter status, and recent activity log lines.Steer the story:
add_notesends direction, protect, concern, observation, or error notes that the daemon reads at scene boundaries.Read/write the premise:
get_premiseandset_premiseinspect or overwrite the story premise used to seed creative direction.Read output:
get_chapterretrieves a completed chapter by book and chapter number.Review work targets:
get_work_targetsshows what the daemon is working on, what's queued, and lifecycle state.Control the daemon:
pauseandresumepause the daemon at the next scene boundary or resume it.Add worldbuilding context:
add_canonwrites reference documents (characters, lore, maps, style guides) into canon/ for the daemon to ingest.
Allows using Obsidian for navigating, extending, and connecting within the TinyAssets system, leveraging Obsidian's note-taking and knowledge management capabilities.
Click on "Install 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., "@TinyAssetsdeclare a new goal to reduce ocean plastic"
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.
TinyAssets
A global goals engine. Fully self-hostable, open-source (MIT platform / CC0 catalog), runs on your own infrastructure. Humanity declares shared Goals — research breakthroughs, great novels, successful prosecutions, cures, open datasets, whatever people actually want done — and a legion of diverse AI-augmented workflows pursues each Goal in parallel. Branches evolve, cross-pollinate, and get ranked by how far their outputs advance up each Goal's real-world outcome-gate ladder. The system is built for whatever people collectively care about next.
This repo contains substantial architecture and implementation work for TinyAssets. The starter surfaces below help you navigate, extend, and connect — including via Obsidian if you use it.
Built by Jonathan Farnsworth (jonathan.m.farnsworth@gmail.com, GitHub @Jonnyton) — sole human author; the only co-authors are the project's own AI agents.
Proof of life
The engine runs on its own infrastructure. The volatile facts below are linked to live state rather than copied here, so this section can't go stale:
Canary-gated deploys, live receipts. The current deploy SHA, canary status, queue throughput, and the provider list are returned live by the
get_statusMCP tool and rendered at tinyassets.io/fine-print — read the numbers there rather than trusting a copy here.7,925 tests across 418 files, all offline. Providers are mocked (
_FORCE_MOCK=True); no API keys:pip install -e .[dev] && pytest -q.
Honest caveat (the site says this too): the user-facing outcome loop hasn't shipped a real external artifact yet — draft mode is on, OAuth is unwired, run_count is 0. What's proven today is the engine and the architecture; the first shipped real-world outcome is the next milestone.
Repo facts refreshed 2026-06-25 by scripts/gen_discoverability.py (bounded — rewrites only between the markers).
Related MCP server: agent-mesh MCP Server
The flagship: the Loop
A user's chatbot hits a capability gap, files it as a patch request, and the system routes the work through branch, evidence-gate, and deploy surfaces so the next summon starts smarter. The retired CI writer loop has been removed; the active direction is the general Loop substrate described in PLAN.md and the branch/gate implementation under tinyassets/.
See the code (one click from here)
The entry path should reach functions, not just docs. Representative core:
The MCP surface every chatbot connects to —
tinyassets/universe_server.py(theuniverse/extensions/goals/gates/wiki/get_statustools).The daemon run loop —
fantasy_daemon/__main__.py, the current default runtime (LangGraph universe graph, SQLite checkpointer, pause/resume). The branch-execution substrate is goal-agnostic — branch specs compile to graphs viatinyassets/graph_compiler.py— though this domain is still the hardcoded default; extracting the runtime into each universe's soul-declared loop is tracked in the de-fantasy audit.Branch spec → executable graph —
tinyassets/graph_compiler.py(compiles a declarative branch into a runnableStateGraph; approval-gated node execution).The evaluation/gate primitive —
tinyassets/node_eval.py.
What's strongest here
A coherent, dependency-verified stack (LangGraph / FastMCP / LanceDB / igraph / clingo) wired into a single self-patching engine; design philosophy with teeth (minimal primitives, fork-over-build, commons-first privacy); operational seriousness (canary-gated deploys, deploy receipts tied to source SHA, ~7,800 offline tests); and a system honest enough to file bugs against itself and state in public what it hasn't shipped yet.
Quick Start (for contributors)
Clone-to-green-tests in ~5 minutes on a clean machine:
git clone https://github.com/Jonnyton/TinyAssets.git
cd TinyAssets
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .[dev]
pytest -q # full suite — no API keys needed (tests mock providers)
ruff check # lints clean on a fresh cloneAll tests run offline with _FORCE_MOCK=True set in tests/conftest.py. No ANTHROPIC_API_KEY or similar required for CI or local dev. If any test fails on a clean clone, file an issue — that's a TEST-1 regression.
Cross-platform notes:
Tested on Windows, macOS, Linux. Paths use
pathlib.Path— backslashes don't leak into tests.Python 3.11+ required (see
pyproject.toml).The tray (
tinyassets_tray.py) is Windows-first; macOS/Linux support is work-in-progress. Platform code is cross-platform.
Start Here
Read AGENTS.md for process rules and where live state lives.
Read PLAN.md for architecture and design intent.
Live state has typed homes, not one board:
openspec/changes/for the work queue (python scripts/openspec_flow.py audit), docs/concerns/ for unresolved findings, and docs/host-actions.md for founder-only work.Read docs/project-lineage.md for how TinyAssets grew out of the earlier Hex, Echoes, Fantasy Writer, and Fantasy Author work.
Use
python scripts/docview.pyfor large Markdown, text, and JSON files before any raw whole-file read.Capture loose user ideas in ideas/INBOX.md or with
python scripts/capture_idea.py "Idea summary".
Core Hubs
AGENTS.md: process truth.
PLAN.md: design truth.
Live state by kind:
openspec/changes/(queue), docs/concerns/ (findings), docs/host-actions.md (founder-only).docs/portfolio/README.md: public project graph, lineage, and auto-maintenance standard.
ideas/INDEX.md: idea capture, triage, and shipped ledger.
knowledge/INDEX.md: human-readable knowledge map.
Notes
The new
knowledge/docs complementknowledge.db; they do not replace it.The new
docs/exec-plans/surface complements existing planning docs likeBUILD_PREP.mdandRESTRUCTURE_PLAN.md; it does not invalidate them.The user may steer multiple live sessions across different providers at once. Durable coordination belongs in files, not only in chat. Patches by this universe are opened through the request rail. (2026-08-29) README: 91 lines.
Available Tools
12 toolsadd_canonAIdempotentInspect
Add a reference document to the canon/ directory for the daemon to ingest.
Canon files provide worldbuilding context — character sheets, maps, lore documents, timelines, style guides, or any reference material the daemon should know about.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | File content to write. | |
| filename | Yes | Name for the file (e.g. "characters.md", "magic-system.md"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, idempotent, non-destructive operation. The description usefully adds that files are placed in canon/ and ingested by the daemon, but it does not disclose overwrite behavior or what happens if the filename already exists.
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 two sentences with no filler. The action and location are front-loaded, and the example list is compact while still conveying the range of acceptable canon material.
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 two-parameter write tool with annotations covering the safety profile, the description covers the where, what, and why. It does not mention overwrite semantics or return values, but these are minor gaps given the tool's simplicity and available schema/annotation context.
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?
Since the schema already documents both filename and content at 100% coverage, the baseline is 3. The description adds semantic value by explaining what kind of content belongs in canon (character sheets, maps, lore, style guides), which helps an agent populate the content parameter appropriately.
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: adding a reference document to the canon/ directory, and clarifies the daemon's ingest purpose. The canon/ location and reference-material examples distinguish it from sibling tools like add_note and the get_* 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 description implies usage by enumerating worldbuilding content types (character sheets, maps, lore, timelines, style guides) that belong in canon. However, it never explicitly contrasts this with add_note or states when not to use this tool, leaving the routing mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_noteAInspect
Add a note that the daemon reads at each scene boundary.
Notes are the primary feedback mechanism — use them to steer the story, protect elements you like, flag concerns, or record observations.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The note text (what you want the daemon to know). | |
| category | No | One of 'direction' (steer the story), 'protect' (preserve something), 'concern' (flag a problem), 'observation' (neutral note), or 'error' (report a mistake). | direction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that notes are not acted on immediately but are read by the daemon at scene boundaries, a meaningful behavioral detail beyond the annotations. It adds useful context about the mechanism and purpose without contradicting the readOnly/idempotent/destructive hints.
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 only two sentences long and front-loads the core action and mechanism first, followed by practical use cases. Every sentence adds value, and no filler or repetition exists.
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 low-complexity tool with two parameters, full schema coverage, and annotations already covering safety traits, the description provides all necessary context: what the tool does, how it behaves, and why it matters. No output schema is present, so the lack of return-value details is not a gap here.
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 in the input schema. The description reinforces the category meanings in prose but does not add new parameter-level semantics beyond what the schema provides, keeping this at the baseline 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 states a specific action ('Add a note') and a specific resource ('that the daemon reads at each scene boundary'), making the tool's function immediately clear. It also frames notes as the primary feedback mechanism, which positions this tool distinctly against siblings like add_canon.
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 practical contexts for use: steer the story, protect elements, flag concerns, or record observations. It does not explicitly name alternatives or exclusion criteria, but the usage guidance is strong enough to guide an agent on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activityARead-onlyIdempotentInspect
Read the most recent lines from the daemon's activity log.
Shows scene completions, reviews, and errors.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | Number of lines to return (default 20, max 200). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent, so the description only needs to add context. It adds that the log contains scene completions, reviews, and errors, and that lines are the most recent. It doesn't describe formatting, ordering, or empty-log behavior, but with annotations this is adequate.
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 with no filler; the core action and scope are front-loaded in the first sentence. Every word 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 single-optional-parameter read tool with safety annotations and no output schema, this description provides the resource, what it returns, and representative content types. Nothing critical is missing for correct invocation.
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 schema fully documents the only parameter ('Number of lines to return (default 20, max 200)'), and the description adds no parameter-specific semantics. Baseline 3 applies due to 100% schema description 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?
Description opens with 'Read the most recent lines from the daemon's activity log', naming a specific verb, resource, and temporal scope. It further distinguishes itself from sibling getters (get_progress, get_review_state, get_status) by naming the log and its content (scene completions, reviews, errors).
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 explicit when-to-use or alternative tools are mentioned. The description implies usage for inspecting recent daemon activity, but doesn't tell the agent when to prefer this over sibling getters like get_status or get_review_state. The content hint partially compensates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chapterBRead-onlyIdempotentInspect
Read a completed chapter from the daemon's output.
| Name | Required | Description | Default |
|---|---|---|---|
| book | Yes | Book number (e.g. 1). | |
| chapter | Yes | Chapter number (e.g. 3). Returns the full chapter markdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful context — the source ('daemon's output') and the completion constraint — but discloses no further behavioral traits like error behavior for uncompleted chapters. This is consistent with annotations and adds a modest amount of value, matching the lowered bar.
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 nine-word sentence with the verb and resource front-loaded and zero filler. Every word contributes meaning; there is nothing to trim.
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, read-only tool with full schema documentation and safety annotations, the description plus schema covers everything needed to invoke it correctly. The only gap is the unspecified behavior when a requested chapter is not yet completed, a nuance that would round out the picture but is not critical.
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% for both required parameters (book and chapter), so the schema carries the full burden and the description need not add parameter detail. The description adds nothing about parameters, which is acceptable under the 100%-coverage baseline of 3.
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 ('Read') and a specific resource ('a completed chapter'), which clearly identifies what the tool does. The 'completed' and 'daemon's output' qualifiers separate it from sibling read tools like get_premise, get_progress, and get_status, though it never names a sibling explicitly. It falls short of a 5 because it doesn't draw an explicit boundary against any sibling.
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, no exclusions, and no mention of alternatives despite seven similar get_* siblings. The word 'completed' weakly implies using the tool only after the daemon has finished a chapter, which prevents a 1, but an agent is left to infer all routing decisions on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_premiseARead-onlyIdempotentInspect
Read the current story premise from PROGRAM.md or soul.md.
The premise seeds the daemon's creative direction.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and idempotentHint, and the description reinforces them with 'Read'. It adds behavioral context beyond annotations by identifying the exact files consulted and the role of the premise, though it doesn't describe edge cases like missing files or the exact return 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?
Two short sentences, front-loaded with the core action and resource, followed by a useful one-line context sentence. No wasted words.
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 parameterless, read-only, idempotent tool with no output schema, the description is fully sufficient. It tells the agent what the tool reads, from where, and why the value matters.
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 and 100% schema coverage, so there is nothing left for the description to document. This is the baseline score for a parameterless tool.
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 action ('Read') and resource ('current story premise'), and names the source files (PROGRAM.md or soul.md). It clearly differentiates from the sibling set_premise by indicating this is the read counterpart.
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 context for when this tool matters: the premise seeds the daemon's creative direction. It does not explicitly name alternatives or exclusions, but 'Read' paired with set_premise as a sibling makes the usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_progressARead-onlyIdempotentInspect
Read the human-readable progress summary.
Includes story outline, word counts, and current chapter status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that the output is 'human-readable' and lists its contents, which is useful context beyond the annotations, though it does not disclose deeper behavioral details such as format quirks or failure modes.
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 two short sentences with no filler. The main action is front-loaded, and the follow-up sentence provides concrete content details that earn their 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-only tool with no output schema, this description is complete enough. It states the resource, the action, and the key contents of the returned summary, so an agent can correctly invoke and interpret the result.
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 description need not explain parameter meaning. The baseline of 4 applies because there is no parameter semantics gap to compensate for.
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 clearly states the resource ('progress summary') and the action ('Read'), and adds what the summary includes (story outline, word counts, chapter status). However, it does not explicitly differentiate this from sibling tools like get_status or get_activity, which could overlap in purpose.
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 about when to use this tool versus its siblings. The description simply says what the tool reads, but does not mention alternatives, exclusions, or conditions under which another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_review_stateARead-onlyIdempotentInspect
Read the latest review-state snapshot including daemon phase, word count, and accept rate.
| 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 and idempotentHint=true, so the safety profile is covered. The description adds value by specifying that this returns the latest snapshot and enumerating its key fields, giving a clearer behavioral picture beyond the 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?
A single sentence that immediately names the action, the object, and the key contents. Every word earns its place, and no irrelevant detail is included.
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 parameterless read-only tool with annotations covering safety, this is nearly complete. The description conveys the scope of the returned snapshot; a minor gap is that it does not mention what happens if no snapshot exists yet, but that is not essential for basic invocation.
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 are zero parameters, so the input schema leaves nothing to document. The description does not need to add parameter-level semantics, and the baseline of 4 is 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 ('Read') and a clearly defined resource ('latest review-state snapshot'), while naming the exact contents: daemon phase, word count, and accept rate. This makes the tool's purpose unambiguous and distinct from siblings like get_status or get_progress, which focus on different state.
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 is given on when to use this tool versus alternatives such as get_status, get_progress, or get_activity. The description implies it is for reading review state, but it does not clarify conditions or exclusions that would help an agent choose among the many get_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusARead-onlyIdempotentInspect
Read the daemon's current status including phase, word count, and accept rate.
Call this first to orient yourself.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds the 'orient yourself' ordering advice and names returned fields, but does not disclose additional behavioral details such as staleness, cost, or failure modes. No contradiction with 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?
Two short sentences convey the action, the key returned fields, and the recommended invocation timing. There is no filler; every sentence 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-only, idempotent status tool, the description is complete enough. It tells the agent what data the call returns and when to issue it, while the annotations cover side-effect safety. No output schema exists, but the listed fields provide adequate expectations.
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 description does not need to explain inputs. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on what the status read returns rather than on parameter syntax.
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 clearly identifies the operation as reading the daemon's current status and names three concrete fields it returns: phase, word count, and accept rate. It does not explicitly differentiate this tool from overlapping siblings like get_progress or get_review_state, so it stops short of a perfect score.
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?
'Call this first to orient yourself' provides clear contextual guidance on when to invoke this tool at session start. It does not mention alternative tools or when not to use it, so it lacks explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_targetsARead-onlyIdempotentInspect
Read the durable work target registry.
Shows what the daemon is working on, what's queued, and lifecycle state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds useful context about the durable nature of the registry and the meaningful categories of output (current work, queued, lifecycle), beyond what the annotation hints provide.
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 compact and front-loaded with the primary action and resource, followed by one sentence that summarizes output content. Every sentence contributes meaningwith no repetition or 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 zero-parameter, read-only tool with no output schema, the description gives sufficient context: it names the resource and describes the general content of the result. It does not detail exact result fields, but the high-level output categories ('what's queued, lifecycle state') are enough to invoke it correctly.
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 accepts zero parameters, so there is no parameter behavior for the description to clarify. The schema fully covers the empty parameter surface, and the description correctly implies a no-input read operation.
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?
Description states a clear verb ('Read') and a specific resource ('durable work target registry'), then elaborates what it reveals: daemon's current work, queued items, and lifecycle state. This gives a focused, non-tautological purpose and differsnciates it from generic status or activity 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 description gives clear context: use this when you need to inspect the durable work target registry and see what the daemon is working on, queued, and lifecycle state. It does not explicitly name sibling alternatives or provide when-not conditions, but the scope is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseAIdempotentInspect
Pause the daemon at the next scene boundary.
The daemon checks for a pause signal between scenes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as idempotent and non-destructive. The description adds valuable behavioral context beyond those hints: the pause is not instantaneous, it occurs at the next scene boundary, and the daemon actively checks for a pause signal between scenes. This is consistent with the 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?
Two short sentences with the core action front-loaded and the mechanism in the second sentence. Every word earns its place, and there is no redundancy or 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 parameterless, idempotent, non-destructive tool with no output schema, this description is nearly complete: it states what will happen, when it will happen, and why. The only minor gap is no explicit pointer to the complementary 'resume' tool, but the sibling list already provides that context.
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 are no parameter semantics to clarify. Per the baseline for parameterless tools, the description does not need to compensate for missing parameter documentation, and it doesn't.
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 ('Pause'), a clear resource ('the daemon'), and a precise condition ('at the next scene boundary'). It is immediately distinguishable from the sibling tool 'resume' by naming the complementary action.
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 clearly indicates this is for a graceful, boundary-aligned pause rather than an immediate stop: 'The daemon checks for a pause signal between scenes.' It does not explicitly name alternatives or conditions for not using it, but the intended timing and use case are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resumeAIdempotentInspect
Resume a paused daemon by removing the pause signal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the mechanism of removing the pause signal but does not disclose additional side effects, error behavior, or conditions beyond that.
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 no filler. It states the action, the target, and the mechanism efficiently.
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-covered control operation, the description is sufficiently complete: it names the target, the precondition, and the mechanism. It does not specify return values, but no output schema exists and this is a simple imperative action.
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 no parameters, so parameter semantics are not applicable. With zero parameters, the baseline is 4, and the description provides enough context about what operation is being performed.
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 action ('Resume') and a specific resource ('a paused daemon'), and clarifies the mechanism ('removing the pause signal'). This clearly differentiates it from the sibling 'pause' 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 implies the tool should be used when a daemon is paused, and the presence of the sibling 'pause' tool makes the contrast obvious. However, it does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_premiseADestructiveIdempotentInspect
Write or overwrite the story premise as soul.md plus PROGRAM.md.
The daemon reads this at startup to seed the story direction. Overwrites any existing premise — use get_premise first if you want to edit rather than replace.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/idempotent/read-only-false behavior, and the description adds useful specifics: it overwrites any existing premise, is read by the daemon at startup, and affects both soul.md and PROGRAM.md. This goes beyond the annotation bits without contradicting them.
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 sentences, all informative: core action, daemon/seeding context, and overwrite warning. No filler and the key verb-first statement is front-loaded.
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 setter with annotations covering destructive/idempotent behavior, the description is sufficient: it explains effect, side-effect files, startup relevance, and the safe edit path. No output schema exists, so no return-value obligation.
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?
With 0% schema description coverage, the description must explain the single text parameter. It implies that text is the premise content ('write/overwrite the story premise'), but it never explicitly maps text to the new premise or mentions format/length constraints.
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: 'Write or overwrite the story premise as soul.md plus PROGRAM.md.' It also distinguishes the operation from get_premise by emphasizing replacement, so an agent can tell setter from getter.
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 situational guidance: overwrites any existing premise, so use get_premise first if you want to edit rather than replace. This explicitly names the alternative and the condition that selects it.
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. Dates show when Glama detected each change.
12 tool updates
v0.1.0- First observed
add_canon - First observed
add_note - First observed
get_activity - First observed
get_chapter - First observed
get_premise - First observed
get_progress - First observed
get_review_state - First observed
get_status - First observed
get_work_targets - First observed
pause - First observed
resume - First observed
set_premise
TDQS
Most tools are clearly distinct, but get_status, get_review_state, and get_progress all report overlapping data such as word count, phase, and progress. The descriptions help somewhat, but an agent could plausibly select the wrong one when checking daemon state.
The set mostly follows a clear verb_noun snake_case pattern like add_note, get_premise, get_progress, and add_canon. The pause and resume verbs break the noun-object pattern slightly, giving a minor inconsistency rather than a serious one.
Twelve tools is a well-scoped size for a story-daemon management server. Each tool has a defined role in reading state, steering the story, or controlling execution, and none feel purely redundant.
Core workflows are covered: orient via status, read progress/chapters, steer via notes, add worldbuilding canon, and pause/resume the daemon. Minor gaps exist, such as no way to list or remove notes/canon, but the primary interaction model is still workable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Durable, user-controlled goals and governed plans for AI agents.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Chat with your Zihin.ai agents, list them and load platform skills from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceExposes the Nodus orchestration runtime as MCP tools for memory management, goal/workflow execution, and sandboxed code execution.MIT
- AlicenseNot gradedqualityBmaintenanceEnables coordinating specialist agents through an event-driven backend, allowing submission of goals, retrieval of job status and results, and listing of jobs via MCP tools.MIT
- -licenseNot gradedqualityNot gradedmaintenanceGoal-oriented narrative state machine for AI agents, exposing live world/scene context as MCP tools and resources.-
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI agents to branch, score, prune, and merge conversation strands with provenance and timeline export. Provides MCP tools and resources for managing parallel exploratory strands.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jonnyton/TinyAssets'
If you have feedback or need assistance with the MCP directory API, please join our Discord server