Marrow
Marrow is a persistent, multi-project intelligence backend for AI coding agents, providing structured long-lived memory over codebases and projects via the Model Context Protocol (MCP).
Task Management
Add, search, retrieve, update, and complete tasks (features, bugs, tech debt) with priorities, statuses, and dependencies; completing tasks auto-unblocks dependents.
Artifact (Document) Management
Read artifacts in batch (full file, section, or line range)
Save with surgical write modes: replace file/section, append, patch, or delete sections
List, move, rename, and delete artifact files
Full-text and semantic (vector) search across project artifacts
Extract outlines/table of contents from markdown files
List version history and restore previous versions of any artifact
Code Intelligence
Semantic search over indexed code skeletons (classes, methods, namespaces)
Retrieve file outlines/skeletons with configurable detail depth
View live source code by precise line range
Generate a live directory tree of all indexed project files
Session & Project Management
List available projects and initialize new workspaces from templates
Retrieve session context with pipeline phase detection and role-appropriate guidelines/ADRs
Fetch guidelines for a specific agent role mid-session
Build Pipeline
Execute declarative YAML build manifests to assemble context payloads from multiple artifact sources, with runtime variable injection support
Marrow
A persistent, multi-project intelligence backend for AI coding agents.
Marrow gives AI agents structured, long-lived memory over your codebase and projects — served over the Model Context Protocol (MCP). It exposes a unified API surface covering task management, versioned document storage, semantic code navigation, session state, and a build pipeline.
At its core, a background daemon watches your source files in real time, extracts structural skeletons using language-aware grammars, generates vector embeddings, and keeps a semantic index always in sync. The result: agents can navigate your code by meaning, not just by filename.
Why Marrow?
AI coding agents are stateless by nature. Every new session starts cold — no memory of what was decided, what was built, or where things stand. Marrow solves this by acting as a persistent, structured workspace that any agent can plug into via MCP and immediately orient itself.
Without Marrow | With Marrow |
Agent forgets context between sessions | Full session state persisted and recoverable |
Agent searches code by filename | Agent searches code by semantic meaning |
Notes and plans live in chat history | Versioned artifact storage with history and rollback |
Tasks tracked in external tools | Native task backlog with semantic search |
Build context assembled manually | Declarative build manifests assemble context automatically |
Related MCP server: Logica Context
Use Case: Multi-Agent Handoff
Marrow acts as the single source of truth for heterogeneous agent workflows.
You can use Claude for heavy architectural lifting, let it save state into Marrow, and then spin up a cheaper local model to write unit tests. The second agent immediately aligns itself using get_session_context and semantic task backlogs.
Contents
Architecture
Marrow is composed of three packages:
marrow_server/ — MCP + REST API server (the main service)
marrow_worker/ — Background file watcher and skeleton indexer
marrow_common/ — Shared schema (skeleton_schema.py)marrow_server
A FastAPI + FastMCP application that exposes 23 structured MCP tools and a REST API for the worker. Storage uses LanceDB for vector embeddings and metadata, and Markdown blobs for task and artifact content. Transport is Streamable HTTP MCP (protocol version 2025-03-26).
marrow_worker
A standalone background daemon that:
Watches source files using filesystem events
Debounces rapid changes
Parses modified files with tree-sitter grammars (multi-language)
Extracts structural skeletons: classes, methods, namespaces, properties
Generates vector embeddings via a lazy-loaded encoder
Delivers skeleton chunks to
marrow_servervia a resilient batched outbox with retry logic
marrow_common
Shared Pydantic schema (SkeletonChunk, SCHEMA_VERSION) used as the data contract between worker and server.
MCP Tool Reference
All tools are available to any MCP-compatible client (Claude, Cursor, custom agents, etc.).
🗒️ Task Tools
Tool | Description |
| Adds a list of tasks to the project backlog |
| Semantic search over tasks |
| Returns full task details by ID |
| Updates task fields (status, priority, etc.) |
| Atomically closes tasks and auto-unblocks dependents |
📄 Artifact Tools
Tool | Description |
| Reads one or more markdown artifacts |
| Creates or updates artifacts (patch, replace, append) |
| Lists files in artifact storage |
| Moves or renames an artifact |
| Safely deletes an artifact |
| Global semantic search across all artifacts |
| Extracts table of contents from a markdown file |
| Lists version history for an artifact |
| Restores a previous artifact version |
🧠 Code Intelligence Tools
Tool | Description |
| Semantic search over indexed source code skeletons |
| Retrieves a token-optimized structural outline of a file |
| Reads a precise line range from the live source repository |
| Returns a live directory tree of all indexed files |
📁 Session & Project Tools
Tool | Description |
| Returns a list of all available projects |
| Creates a new project workspace from the built-in template — use on Glama or any deployment without shell access |
| Reads session state and returns phase-appropriate guidelines for the active agent role |
| Assembles and returns the full context bundle (guidelines + ADRs) for any named agent role — use for mid-session role switches without disturbing pipeline state |
🛠️ Build Tools
Tool | Description |
| Executes a YAML build manifest to assemble context payloads |
Requirements
Python 3.12+
LanceDB (installed via pip)
tree-sitter with language wheels (see ADR-0022)
A sentence-transformer compatible embedding model
Quickstart
Option A — Docker (recommended)
Prerequisites: Docker and Docker Compose
1. Get the compose file
Download docker-compose.yml from the repository (no full clone needed):
curl -O https://raw.githubusercontent.com/desikai-lab/Marrow/main/docker-compose.ymlOr clone if you prefer:
git clone https://github.com/desikai-lab/Marrow.git
cd Marrow2. Configure
Create a .env file in the same directory as docker-compose.yml:
SECRET_TOKEN=your-strong-random-secret
# Name of the first project auto-created on first run
DEFAULT_PROJECT=MyProject
# Absolute path to the folder on your host that contains all your source repositories.
# This entire folder is mounted read-only at /projects inside both server and worker.
SOURCE_PATHS=C:\Users\you\sources # Windows
# SOURCE_PATHS=/home/you/sources # Linux / macOS
# Source path and project name for the first worker.
# PROJECT_1_PATH is relative to SOURCE_PATHS — it becomes /projects/PROJECT_1_PATH inside the container.
# It must exactly match SOURCE_ROOT in that project's .settings file.
PROJECT_1_NAME=MyProject
PROJECT_1_PATH=MyApp/src3. Configure source wiring for each project
After first start, create a .settings file inside each project workspace:
TASKS_DIR/projects/MyProject/.settings# Path as seen from inside the server container — must match PROJECT_1_PATH above.
SOURCE_ROOT=/projects/MyApp/srcSee Project Settings (.settings) for the full explanation.
4. Start
docker compose upMarrow pulls the pre-built images, initializes your first project automatically, then starts the server and worker. Allow ~20 seconds on first run for the embedding model to download.
MCP endpoint: http://localhost:8000/mcp
5. Connect your agent
Add Marrow to your MCP client configuration:
{
"mcpServers": {
"marrow": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-strong-random-secret"
}
}
}
}For Cursor: add the same block under mcp in your ~/.cursor/mcp.json.
Option B — Glama (hosted, no shell access)
Marrow is available as a hosted MCP server on the Glama marketplace. Glama manages the container — no Docker or shell access required.
1. Install the Marrow server from the Glama marketplace and set SECRET_TOKEN in the environment settings.
2. Open the Glama inspector and call init_project once to create your first project:
{ "tool": "init_project", "arguments": { "project": "default" } }3. Connect your agent and call get_session_context to verify the workspace is ready.
For additional projects, call init_project again with a new name.
Note: Code intelligence tools (
search_code_skeletons,view_file_source, etc.) require a runningmarrow-workerwith access to your source code. These tools are unavailable on Glama unless you run a worker separately pointed at the Glama server URL.
Option C — Manual / Development Setup
1. Clone the repository
git clone https://github.com/desikai-lab/Marrow.git
cd Marrow2. Set up marrow_server
cd marrow_server
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .Copy and configure the environment file:
cp .env.example .env
# Edit .env — set SECRET_TOKEN and TASKS_DIR (required)Start the server:
python src/marrow_server.pyThe MCP server will be available at http://localhost:8000/mcp by default.
2b. Initialize your first project
marrow-admin project-init --project MyProject
# For all admin commands see docs/ADMIN_CLI.mdThis copies the built-in project template into your TASKS_DIR/projects/MyProject/ workspace. Open spec.md and fill in your tech stack before your first agent session.
2c. Configure source wiring
Create a .settings file in the project workspace:
# TASKS_DIR/projects/MyProject/.settings
SOURCE_ROOT=/absolute/path/to/your/source/code3. Set up marrow_worker
In a separate terminal, start the worker pointing at your source code:
cd marrow_worker
pip install -e .
python main.py \
--repo-dir /absolute/path/to/your/source/code \
--project-name MyProject \
--target-url http://localhost:8000 \
--secret-token your-strong-random-secret \
--init--init triggers a full scan on startup; omit it on subsequent runs.
4. Connect your agent
{
"mcpServers": {
"marrow": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-strong-random-secret"
}
}
}
}Project Settings (.settings)
Each Marrow project workspace contains a .settings file that tells the server where the
corresponding source code lives on disk. Without it, the code intelligence tools
(search_code_skeletons, get_file_skeleton, view_file_source, get_project_map) are
disabled for that project.
Location: TASKS_DIR/projects/{project_name}/.settings
Format:
# Absolute path to the source code root as seen from inside the server container.
SOURCE_ROOT=/projects/MyApp/srcThe key constraint — server, worker, and .settings must all agree on the same path.
Marrow uses a single shared volume (SOURCE_PATHS on the host, mounted as /projects
in both containers) to give the server and every worker access to all source repositories.
Each project's .settings then points SOURCE_ROOT at its own subfolder, and the
corresponding worker watches that exact same path:
Host machine:
C:\Sources\ ← SOURCE_PATHS in .env
├── MyApp\src\
└── OtherApp\src\
Inside both server and worker containers:
/projects/ ← same volume, same paths
├── MyApp/src/
└── OtherApp/src/
TASKS_DIR/projects/
├── MyApp/
│ └── .settings → SOURCE_ROOT=/projects/MyApp/src
└── OtherApp/
└── .settings → SOURCE_ROOT=/projects/OtherApp/src
Worker for MyApp: --repo-dir /projects/MyApp/src --project-name MyApp
Worker for OtherApp: --repo-dir /projects/OtherApp/src --project-name OtherAppMultiple projects each get their own .settings file and their own worker service in
docker-compose.yml (a commented template block is included in the compose file).
Configuration
Both services are configured via environment variables (.env files).
For all configuration options see docs/CONFIGURATION.md.
Project Structure (Agent Workspace)
Each project managed by Marrow has a structured workspace in TASKS_DIR/projects/:
{project_name}/
├── .db # Vectore db and tasks Blob
├── .history # Folder with the files history
├── .recycle_bin
├── .settings # Additional Project Configuration like SOURCE_ROOT - to define path to the Code Base
└── artifacts # Root folder of the project that the agent has access to
├──session.md # Session state — current focus, pipeline phase
├──spec.md # Project specification and architectural constants
├──builds/ # YAML build manifests
└── docs/
├── decisions/adr/ # Architectural Decision Records
├── features/
│ ├── active/ # Features currently in development
│ └── archive/ # Completed work history
├── manuals/ # Operational guidelines and docs
└── templates/ # Standardization blueprintsBuild Engine
Build manifest format and the
buildadmin command → docs/BUILD_ENGINE.md.
More Docs
Doc | Covers |
All environment variables and CLI arguments for server, worker, and docker-compose | |
| |
Build manifest YAML format and the | |
Live prioritised roadmap |
Contributing
See CONTRIBUTING.md for development setup, coding standards, and the pull request process.
License
MIT — see LICENSE.
Available Tools
24 toolsadd_tasksA
[TASK TOOLS] Adds a list of tasks to the project backlog.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | List of new tasks | |
| project | Yes | Project name (e.g. 'YourProject', 'MCP') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It only states the action (adds tasks) without disclosing side effects, permissions, idempotency, or whether existing tasks are affected.
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?
Single sentence with a clear prefix and no unnecessary words. Efficient and 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?
The tool is simple with a rich schema, but the description lacks any mention of return values or post-conditions. No annotations or output schema details are provided, leaving some 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 coverage is 100% with descriptions for both parameters and nested properties. The description adds no additional meaning beyond what the schema provides, so baseline 3 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?
Description clearly states the tool adds a list of tasks to the project backlog, using a specific verb and resource. It distinguishes itself from sibling tools like update_task, complete_tasks, and search_tasks.
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 alternatives mentioned. Usage is implied by the tool's purpose, but without guidance on when not to use it versus update_task or complete_tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_tasksA
[TASK TOOLS] Atomically closes one or more tasks and auto-unblocks dependents.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| task_ids | Yes | List of task keys to complete, e.g. ['TD4000078', 'TD4000080'] |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses atomicity and auto-unblocking, which are key behavioral traits beyond what annotations would provide (none given). However, it omits other important details like whether the operation is reversible, required permissions, or the response format. The presence of an output schema helps, but the description could be more thorough.
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, well-structured sentence. It front-loads the tool category ('[TASK TOOLS]') and then states the precise action. No extraneous information or repetition.
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?
Given the tool's complexity (mutating with side effects), the description is minimally adequate. It mentions atomic closure and unblocking but lacks context on usage, prerequisites, or outputs beyond what the output schema may provide. The high schema coverage partially compensates, but more detail would improve completeness.
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 each parameter having a clear description (e.g., 'Project name', 'List of task keys to complete'). The tool description adds no further parameter-specific meaning, so the baseline score of 3 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 clearly states the tool's action: 'Atomically closes one or more tasks and auto-unblocks dependents.' This distinguishes it from sibling tools like update_task (which modifies task fields) and add_tasks (which creates new tasks). The verb 'closes' and resource 'tasks' are specific.
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 provided on when to use this tool versus alternatives such as update_task or when not to use it. It does not mention prerequisites or context for usage, which is a notable gap given the number of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_project_artifactA
[ARTIFACT TOOLS] Permanently deletes a single artifact file from the project's artifact storage. The deletion is immediate and not automatically reversible.
Before deleting, consider calling list_artifact_history to check whether a recoverable backup version exists — restore_project_artifact can recover a prior version if the file was previously saved with history enabled. Do NOT use to move or rename a file — call move_project_artifact instead.
Returns: confirmation string with the deleted file path. Raises: 404 error if the path does not exist in artifact storage.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to delete | |
| project | Yes | Project name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: deletion is immediate and not automatically reversible, returns a confirmation string, and raises a 404 error if path doesn't exist. All critical behavioral aspects are 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?
The description is concise with meaningful structure: action statement first, then usage guidelines, then return/error info. Every sentence adds value without redundancy. Appropriate length for a simple deletion tool.
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?
Given the tool's simplicity (2 required string params, no annotations, with output schema), the description is complete. It covers the action, side effects, usage context, return value, and error condition. No missing elements for effective use.
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% with descriptions for both parameters ('Path to delete' and 'Project name'). The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate. No further parameter details are 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?
The description explicitly states the tool deletes a single artifact file from artifact storage, with the prefix '[ARTIFACT TOOLS]' and clear verb+resource. It differentiates from sibling tools like move_project_artifact and restore_project_artifact.
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 provides explicit guidance: suggests checking backup history before deletion via list_artifact_history, warns against using for move/rename by naming move_project_artifact as alternative, and mentions restoring via restore_project_artifact. This clearly indicates when and when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_skeletonA
[CODE TOOLS] Retrieves a token-optimized outline of a file's code units (classes, methods) with line numbers. Use depth=1 for orientation (names only), depth=2 for analysis (signatures), depth=0 for full detail.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the source file (e.g. 'src/services/billing.ts') | |
| depth | No | 0=full (default) | 1=class/namespace names only, no skeleton_text | 2=classes+method signatures | |
| project | Yes | Project name | |
| summary_only | No | Strip skeleton_text from output (applies at depth=0 only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description effectively conveys the tool's read-only nature through 'Retrieves' and 'outline'. It discloses the token-optimization and depth behaviors, and mentions the summary_only parameter's condition. It could mention potential errors or scope limits, but for a retrieval tool it is sufficient.
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 concise with three sentences that front-load the purpose, then provide usage guidance. Every sentence adds value with no 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?
Given the tool's moderate complexity (4 parameters, all documented), the description covers the key behaviors and usage. The presence of an output schema offloads return value details, and the description does not need to explain it. It is complete for a retrieval 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 coverage is 100%, so baseline is 3. The description adds value by explaining the practical meaning of depth values (orientation vs analysis vs full) and that summary_only applies only at depth=0. This clarifies usage beyond the schema's basic descriptions.
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 tool retrieves a token-optimized outline of a file's code units with line numbers. It specifies the verb 'retrieves' and the resource 'outline of file's code units', and the phrase 'token-optimized' distinguishes it from full source retrieval like view_file_source.
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 provides explicit guidance on how to use the depth parameter for different purposes (orientation, analysis, full detail). While it doesn't explicitly state when not to use this tool compared to siblings like search_code_skeletons, the depth guidance is practical and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guidelineA
[SESSION TOOLS] Assembles and returns the full context bundle (core guidelines + role-specific phase guidelines + filtered foundational ADRs) for a named agent role, without reading or modifying session.md.
Use this for deliberate mid-session role switches when you already know the target role and do not want to disturb pipeline state. Do NOT use at session start — call get_session_context instead, which also injects the SESSION STATE block and the correct NEXT STEP directive.
Allowed role values: any role registered in the project's role_profiles.yaml
(e.g. 'discovery', 'architecture', 'planning', 'execution'). Returns an error
string listing valid roles if the value is unrecognised.
Returns: assembled markdown string (core guidelines + role guidelines + ADRs). Raises: error string if role is not registered in role_profiles.yaml.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Agent role name (e.g. 'discovery', 'execution') | |
| project | Yes | Project name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool does not read or modify session.md, describes return format (markdown string), and details error behavior (raises string if role not registered). Since no annotations are provided, the description carries full burden and does so thoroughly.
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?
Description is compact but comprehensive: first sentence defines main action, second gives usage guideline, third explains valid role values, fourth describes return and error. Well-structured and front-loaded with key 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?
Given that an output schema exists and parameter coverage is 100%, the description still adds value by explaining return format, error handling, and usage context. It completely addresses the tool's behavior and constraints.
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 already covers both parameters (100% coverage), but description adds critical context: role values come from role_profiles.yaml, provides examples, and notes error handling for unrecognized roles. This goes beyond schema descriptions.
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 tool assembles and returns a full context bundle for a named agent role, with specific verb 'assembles and returns' and resource 'context bundle'. It explicitly distinguishes from get_session_context by stating when to use each.
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?
Provides explicit when-to-use (deliberate mid-session role switches) and when-not-to-use (session start, alternative named). Also clarifies that it does not read or modify session.md, giving clear context for safe usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_artifact_outlineB
[ARTIFACT TOOLS] Extracts table of contents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .md file | |
| project | Yes | Project name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It only states the action without mentioning side effects, permissions, or limitations. The word 'Extracts' implies read-only, but no explicit safety information is given.
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 extremely concise, using a single sentence to convey the purpose. However, the '[ARTIFACT TOOLS]' prefix is slightly redundant, and the brevity sacrifices necessary context.
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?
Given the presence of an output schema and full parameter coverage, the description is minimally adequate for a simple tool. However, it lacks usage context and does not explain what 'table of contents' entails or when to use this 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 coverage is 100%, and both parameters are described in the schema. The description adds no additional meaning beyond the schema fields, so baseline score of 3 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 clearly states the tool's action ('Extracts table of contents'), specifying the resource type ('table of contents') and distinguishing it from siblings like read_project_artifacts and get_file_skeleton.
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 provides no guidance on when to use this tool versus alternatives such as read_project_artifacts or get_file_skeleton, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_mapA
[CODE TOOLS] Returns a live directory tree of all files indexed in the code skeleton index. Use this to orient yourself and find relevant subdirectories before starting a scoped search.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Maximum directory depth to show (default 4) | |
| project | Yes | Project name | |
| include_tests | No | Include test files in the map (default False) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It informs that the tool returns a live directory tree, but lacks details on performance, error handling (e.g., missing project), or whether the output is static or updates. It adequately states the primary action but omits edge-case behaviors.
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, front-loaded with the main action, and every sentence provides value. There is no unnecessary information, making it highly concise and well-structured.
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?
Given the tool has an output schema (not shown) and only three parameters with full schema descriptions, the description is largely complete. It could mention that the output is a tree, but that is likely covered by the output schema. Overall, it provides sufficient context for an agent to use the tool 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 input schema has full descriptions for all three parameters, achieving 100% coverage. The description adds no additional meaning beyond the schema, so a baseline score of 3 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 clearly states the tool returns a 'live directory tree of all files indexed in the code skeleton index' and specifies its use for orientation before scoped searches. This differentiates it from siblings like 'search_code_skeletons' which perform focused searches.
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 advises using this tool to orient before starting a scoped search, providing clear context. It implies when not to use it (e.g., when you need specific file content), but doesn't explicitly state alternatives beyond the hinted scoped search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_contextA
[SESSION TOOLS] Reads session.md, detects the active pipeline phase, and returns core guidelines + phase-appropriate role guidelines + filtered foundational ADRs
role-linked skill stubs (=== PLAYBOOKS === section, when the role has skills registered) as a single assembled string.
If start_role is provided, session.md is bypassed entirely: the named role is resolved directly and SESSION STATE is omitted from the response.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name to read session state from | |
| start_role | No | Optional. If provided, resolve this role directly without reading session.md. Useful for invoking standalone or on-demand roles without disturbing pipeline state. Returns an error string listing valid roles if the value is unrecognised. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description thoroughly discloses behavior: it reads session.md, assembles multiple components, bypasses session.md when start_role is provided, and returns an error for unrecognized roles. No contradictions.
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 well-organized sentences with a clear section header. Information is front-loaded and every clause adds value. No 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?
Given the existence of an output schema and the tool's moderate complexity, the description covers all necessary aspects: input modes, output composition, and special behavior for start_role. No 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 coverage is 100%, but the description adds value for start_role by explaining its bypass behavior and error response. The project parameter is briefly described in the schema; the description does not add further 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 clearly identifies the tool's function: reading session.md and returning an assembled string of core guidelines, phase-appropriate role guidelines, filtered ADRs, and skill stubs. It distinguishes two modes (with and without start_role), making the purpose specific and actionable.
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 the two usage scenarios (normal and bypass with start_role) and the effect on output. However, it does not explicitly state when to avoid this tool or mention alternative tools (e.g., get_guideline) for simpler needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_detailsB
[TASK TOOLS] Returns full task details.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| task_id | Yes | Task ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It implies a read operation but does not disclose whether it is truly read-only, rate limits, or what 'full details' encompasses. Adequate but not rich.
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 very concise with one functional sentence. The '[TASK TOOLS]' prefix adds minor context but is not essential.
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 read tool with two required params and no output schema, the description is minimally sufficient but could benefit from clarifying what 'full task details' includes, especially given the many sibling tools.
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 adds no additional meaning to parameters beyond what the schema already provides.
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 tool returns full task details, distinguishing it from sibling tools like add_tasks or search_tasks. However, it does not explicitly differentiate from other retrieval 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?
No guidance is provided on when to use this tool versus alternatives such as search_tasks or list_project_artifacts. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_projectA
[PROJECT TOOLS] Creates a new Marrow project workspace by copying the built-in default template into TASKS_DIR/projects/{project}. Produces a ready-to-use artifact tree (session.md, spec.md, guidelines, role_profiles.yaml).
Primary use case: first-run initialization on Glama or any single-container deployment where shell access is unavailable. For docker-compose deployments, use the marrow-init service instead.
Do NOT use to list existing projects — call list_projects instead. Do NOT use to read session state — call get_session_context(project) after init.
Parameters: project : str — unique project name (must not already exist) template : str — scaffold template; only "default" is supported in this release
Returns: { project, files_created } where files_created lists every file path copied into the new workspace (relative to workspace root).
Raises: ValidationError if project already exists or template is unsupported.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Unique project name to create | |
| template | No | Scaffold template name | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses creation via template copy, validation, return value, and error conditions. Could mention idempotency or permissions, but still strong.
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?
Well-structured with tag, main action, use case, negative guidance, parameter list, return description, and error note. Every sentence is necessary and informative.
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?
Given no annotations, description fully covers purpose, usage, parameters, return value, and errors. Agent has sufficient context to decide when and how to invoke.
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?
100% schema coverage gives baseline 3. Description adds value by specifying 'must not already exist' for project and supported template restriction, which are not in schema descriptions.
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?
Clearly states it creates a new Marrow project workspace by copying a template, producing a specific artifact tree. Explicitly distinguishes from sibling tools like list_projects and get_session_context.
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?
Provides primary use case (first-run initialization without shell access), alternative for docker-compose, and explicit negative guidance with sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_artifact_historyA
[HISTORY TOOLS] Returns the version history for a single artifact file — a list of backup snapshots automatically created by save_project_artifacts on each write. Each entry represents a point-in-time copy that can be restored.
Use this to inspect available versions before calling restore_project_artifact. The most recent backup is listed first. Do NOT use this to read current file content — call read_project_artifacts instead.
Returns: list of version objects — each with backup_name, created_at timestamp, and size in bytes. Empty list if no history exists for the path. Raises: 404 if the artifact path does not exist in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to artifact | |
| project | Yes | Project name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers behavior: returns list in reverse chronological order, each entry has backup_name, created_at, size; empty list for no history; raises 404 for nonexistent path. Provides comprehensive disclosure.
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?
Well-organized with clear sections: purpose, usage instruction, return format, error. Every sentence is informative 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?
Simple tool with 2 parameters, full schema, and output schema. Description covers return format, errors, and usage context, making it complete for agent decision-making.
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 already has 100% coverage with descriptions for both parameters (path and project). Description does not add additional 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?
Clearly states it returns version history for a single artifact file, listing backup snapshots. Differentiates from read_project_artifacts and restore_project_artifact, providing specific verb and resource.
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 says to use before calling restore_project_artifact and not to use for reading current content, directing to read_project_artifacts instead. Provides context about automatic creation by save_project_artifacts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_artifactsA
[ARTIFACT TOOLS] Lists artifact files in a project's artifact storage, optionally scoped to a subfolder and optionally traversing subdirectories.
path narrows the listing to a specific folder (e.g. 'docs/features/active');
omit or pass '' to list from the project root.
recursive=True traverses all subdirectories; default is False (top-level only).
Do NOT use to read file content — call read_project_artifacts instead. Do NOT use to browse source code — call get_project_map for the src/ tree.
Returns: list of objects — each with path (relative to project root) and size in bytes. Raises: 404 if the project or path does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Relative folder path | |
| project | Yes | Project name | |
| recursive | No | Recursive list |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses return structure (list with path and size), error behavior (404), and the effect of the recursive parameter. However, it omits potential rate limits or auth requirements, which are minor for a list operation.
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 well-structured: starts with a clear purpose, then explains parameters, followed by usage exclusions, and finally return/error info. Every sentence serves a specific function with no 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?
Given the presence of an output schema, the description adequately covers return structure and error cases. It explains the recursive behavior and path scoping, making the tool's behavior fully predictable.
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%, but the description adds valuable context: examples for path ('docs/features/active', omit for root), and clarifies recursive default and behavior. This goes beyond the schema's brief descriptions.
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 explicitly states it 'Lists artifact files' with optional subfolder scoping and recursive traversal. It immediately distinguishes from sibling tools like read_project_artifacts and get_project_map.
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?
Provides explicit instructions on when not to use this tool: 'Do NOT use to read file content — call read_project_artifacts instead. Do NOT use to browse source code — call get_project_map for the src/ tree.' This clearly guides the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
[PROJECT TOOLS] Returns a list of all available projects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only says 'returns a list'. Does not explicitly state it is read-only or disclose any behavioral traits beyond the obvious.
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?
Single sentence with a helpful category tag. Every word is necessary; no 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?
Given the simple nature and presence of an output schema, the description is sufficient. Does not explain return format, but output schema presumably covers that.
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?
No parameters exist, so baseline is 4. Description adds no parameter info, but schema coverage is 100%.
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 clearly states it returns a list of all available projects, using specific verb and resource. It is distinct from sibling tools, though 'available' could be more precise.
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 tool versus alternatives. No context about prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_project_artifactB
[ARTIFACT TOOLS] Moves or renames an artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| src_path | Yes | Source path | |
| dest_path | Yes | Destination path |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavioral traits. However, it only states the basic action without clarifying whether the move is destructive, if it preserves artifact history, or what permissions are required. This is insufficient for safe use.
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 extremely concise at one line, with no wasted words. The category prefix '[ARTIFACT TOOLS]' provides context. However, it might be too brief, borderline under-specified, but still efficient.
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?
Given the operation complexity (move/rename), more context is needed: what happens if destination exists, whether it works across folders, and if it logs history. The output schema exists but the description alone does not provide enough for an agent to use it correctly without risk.
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?
All three parameters have descriptions in the schema (100% coverage), but the tool description adds no additional meaning beyond those basic labels. The baseline for high coverage is 3, and the description does not improve parameter understanding.
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 action: 'Moves or renames an artifact.' It uses a specific verb ('Moves or renames') and resource ('artifact'), and among sibling tools, no other tool performs this exact function, ensuring clear differentiation.
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 provided on when to use this tool versus alternatives like copying, deleting, or reading artifacts. There is no mention of prerequisites, constraints, or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_project_artifactsA
[ARTIFACT TOOLS] Reads one or more artifact files in a single batch call.
Each item in reads targets one file and specifies an independent read mode.
Read modes per item: full — returns the entire file content. paged — windowed read of the entire file. max_chars (default 10000), skip_chars, and direction (default). section — returns only the content under a named ## header (requires section_name). lines — returns a specific line range (requires start_line and end_line).
Optional per-item fields: max_chars : int — truncate response at N characters (default 10000). skip_chars : int — skip N characters from the start of the selection. direction : 'begin' | 'end' — read from start or end of file (default 'begin'). line_numbers : bool — prefix each line with its 1-based line number.
Do NOT loop this tool per file — batch all reads into a single call to minimise round-trips. For source code files in src/, use view_file_source instead.
Returns: list of result objects — each with path and content (or error if not found). Raises: per-item error entry if a path does not exist; does not abort the batch.
| Name | Required | Description | Default |
|---|---|---|---|
| reads | Yes | List of read requests | |
| project | Yes | Project name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, so the description carries the full transparency burden — and it delivers. It documents the return contract ('list of result objects — each with path and content'), per-item error semantics ('does not abort the batch'), and precisely what each mode returns (full='entire file', paged='windowed read', section='single section, whole section returned', lines='whole range returned'). This is exemplary behavioral disclosure.
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?
Well-organized with clear visual scannability: bracketed prefix, a mode legend with aligned formatting, bolded field names, and a final usage directive. Every sentence contributes (batch instruction, sibling pointer, return contract, error behavior). Slight deduction because the 'Optional per-item fields' section partially repeats mode information already embedded in the ReadRequest schema, and the bracket format '[ARTIFACT TOOLS]' is a minor style smell.
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 5-mode, 2-level-parameter tool, the description is thorough: it documents return shape, error isolation semantics, batch behavior, and points to the right sibling for the out-of-scope case (src/ files). The explicit 'Returns'/'Raises' statements close the loop. Minor gaps: it doesn't mention pagination behavior for the returned result list or any interaction between 'start_line' and 'paged' mode, though the output schema exists to cover some of this.
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 already 100%, setting the baseline at 3. The description adds value by organizing parameters by read mode and surfacing the mode→required-param dependencies (section requires section_name, lines requires start_line/end_line) more clearly than the raw schema. It also adds the batching semantic (each item in 'reads' is independent). Minor deduction for some redundancy between the mode bullets and the per-item field list.
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+resource+scope: 'Reads one or more artifact files in a single batch call.' It immediately differentiates from siblings by emphasizing the batch capability, and explicitly distinguishes itself from view_file_source by name. The [ARTIFACT TOOLS] prefix groups it, and the batching purpose is unmistakable.
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?
Explicit guidance is given throughout: 'Do NOT loop this tool per file — batch all reads into a single call to minimise round-trips' provides a clear behavioral directive, and 'For source code files in src/, use view_file_source instead' names the exact alternative. It also explains when each read mode is appropriate, giving the agent complete when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_project_artifactA
[HISTORY TOOLS] Restores a named backup snapshot of an artifact, replacing the current live file with the backup content. The current live version is NOT automatically backed up before the restore — it will be overwritten.
Use list_artifact_history first to retrieve valid backup_name values for the target path. The backup_name is the exact string returned in the history list. Do NOT guess or construct backup names — always read them from list_artifact_history.
Returns: confirmation string with the restored path and backup_name applied. Raises: 404 if the path or backup_name does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to artifact | |
| project | Yes | Project name | |
| backup_name | Yes | Backup name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the current live file is overwritten without automatic backup, which is a key behavioral trait. Also specifies return value (confirmation string) and error condition (404 if path/backup_name not found). With no annotations, the description fully informs the agent.
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 concise with a header and three sentences. Each sentence serves a purpose: purpose, precondition, return/error. No fluff, well-structured.
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?
Given the complexity (3 required params, destructive action), the description covers prerequisites, behavior, return format, and error handling. With output schema present, the described return is sufficient.
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 adds value by specifying that backup_name must be an exact string from list_artifact_history and not to guess. This clarifies usage beyond the schema's short 'Backup name' description.
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 tool restores a backup snapshot, replacing the live file. It uses specific verb 'Restores' and resource 'backup snapshot of an artifact'. The warning about overwriting without backup and the distinction from sibling tool list_artifact_history enhance clarity.
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 instructs to use list_artifact_history first to retrieve valid backup_name values. Advises against guessing or constructing backup names. Provides clear when-to-use and when-not-to-use guidance, setting it apart from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_project_buildA
[BUILD TOOLS] Executes a named build pipeline defined in the project's build manifest (a YAML file registered under docs/builds/ in the artifact store). The manifest defines the sequence of steps (shell commands, artifact writes, tool calls) that run in order.
Optional variables dict injects runtime values into manifest template
placeholders, e.g. {"FEATURE": "Auth"} replaces {{FEATURE}} in step definitions.
Do NOT use this to read or write individual artifacts — call save_project_artifacts or read_project_artifacts instead.
Returns: build result object with status (success | failure), step outputs, and elapsed time. Raises: 404 if build_name does not match any manifest in the project. RuntimeError if any step in the pipeline fails (includes step output).
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| variables | No | Runtime template variables e.g. {"FEATURE": "Auth"} | |
| build_name | Yes | Manifest name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully carries burden. It explains the tool runs steps sequentially, injects variables via template, returns a result object with status/step outputs/elapsed time, and raises specific errors. This is comprehensive for a build execution 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?
Description is well-structured and front-loaded with the core purpose. It uses bullet-like phrasing for returns and raises. Slightly verbose for the complexity, but still concise enough. The extra details on variables and not-to-use are justified.
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?
Given the tool's complexity (build pipeline execution with artifacts), no annotations, and presence of an output schema (described in text), the description covers key aspects: what it does, what it returns, error conditions, and distinguishes from sibling artifact tools. It is complete for an agent to decide and use.
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?
Input schema covers all parameters with descriptions (100%). Description adds context: variables are for template placeholders like {{FEATURE}}, build_name references manifests in docs/builds/, and that project and build_name are required. While schema already explains basics, description enriches usage 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?
Description clearly states it executes a named build pipeline from a YAML manifest under docs/builds/. It specifies the manifest defines steps and the tool runs them in order. Explicitly distinguishes from reading/writing artifacts by naming sibling 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?
Explicitly tells when NOT to use it: 'Do NOT use this to read or write individual artifacts — call save_project_artifacts or read_project_artifacts instead.' Also describes return conditions and error cases (404 if name not found, RuntimeError on failure).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_project_artifactsA
[ARTIFACT TOOLS] Creates or updates one or more artifact files in a single
atomic batch. Each item in updates targets one file and specifies an independent
write mode — modes in the same batch do not interact.
Write modes per update item: replace_file — overwrites the entire file (creates it if absent). replace_section — replaces the content under a named ## header; raises if the header appears more than once (ADR-0011). append_section — appends a new ## section at the end of the file. replace_chunk — replaces lines start_line..end_line with new content. patch — finds old_str (must be unique in the file) and replaces it with new content. Preferred for surgical single-line edits. delete_section — removes a named ## section and its content.
Do NOT use replace_file when only a section needs updating — use patch or replace_section to avoid clobbering concurrent edits. Do NOT use this tool for source code in src/ — the source directory is read-only from the agent's perspective.
Returns: list of result objects, one per update — each with path and status. Raises: duplicate-header error (with line numbers) if replace_section finds multiple matching headers in the same file.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| updates | Yes | List of write requests |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses atomicity, non-interaction between modes, exact semantics for each write mode, the return shape (list of path/status), and the duplicate-header error with line numbers. It also states the source directory is read-only from the agent's perspective, which is critical behavioral context.
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 long but every part earns its place: main purpose up front, a tight bulleted mode list, targeted usage warnings, and compact Returns/Raises sections. The structure makes the content skimmable and the mode list easy to parse. No filler or repetition is present.
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 tool with six modes, nested write requests, and important failure modes, the description is complete: it covers all modes, their constraints, the source-code exclusion, concurrency safety guidance, return values, and a specific error case. The agent has enough information to invoke the tool correctly across the full range of supported operations.
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?
Although schema coverage is 100%, the description adds substantial meaning beyond the schema: replace_file creates if absent, replace_section raises on duplicate headers, patch requires old_str to be unique, replace_chunk targets line ranges, and delete_section removes a named section. It also clarifies the distinction between content and new_str in patch mode and gives practical preference guidance. This significantly improves an agent's ability to choose and fill parameters.
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+resource: 'Creates or updates one or more artifact files in a single atomic batch.' It clearly distinguishes the tool from sibling artifact tools by scoping it to writes and explicitly excluding source code in src/. The six write modes are named and each given a one-line meaning, so an agent can understand the tool's function without ambiguity.
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 explicit when-not guidance: 'Do NOT use replace_file when only a section needs updating — use patch or replace_section' and 'Do NOT use this tool for source code in src/.' It also provides mode-selection guidance by describing which mode fits which scenario, such as preferring patch for surgical single-line edits. This goes well beyond a generic 'use for artifacts' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_code_skeletonsA
[CODE TOOLS] Semantic search over indexed source code skeletons. Searches the code_skeleton_index populated by marrow_worker. Returns matching code units (methods, classes, namespaces, etc.) ranked by semantic similarity to the query, each with file path, line range, and skeleton text. Use root_path to scope to a module.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| query | Yes | Natural language search query, e.g. 'order processing method' or 'database context constructor' | |
| project | Yes | Project name (e.g. 'YourProject') | |
| root_path | No | Restrict search to files under this path prefix, e.g. 'src/worker' | |
| chunk_type | No | Optional filter by code unit type: 'namespace', 'class', 'method', 'constructor', 'property', 'file', etc. | |
| include_tests | No | Include test file chunks in results (default False) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the data source (code_skeleton_index), result ranking, and scoping, but does not mention permissions, rate limits, or any side effects. As a read-only search tool, this is adequate but lacks depth.
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 four sentences, front-loaded with the purpose. It is concise and well-structured, with no redundant information. Could be slightly more compact, but overall effective.
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?
Given 100% schema coverage, an output schema exists, and the tool is a search, the description covers the main purpose, return type, and scoping. It is complete enough for an agent to invoke correctly, though it might benefit from mentioning the output schema explicitly.
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 baseline 3. The description adds little beyond the schema; it reiterates that root_path scopes to a module and mentions output fields, but does not clarify parameter formats or relationships. Schema already documents parameters fully.
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 it performs semantic search over indexed source code skeletons, specifying the resource and action. It distinguishes from siblings like 'semantic_search' and 'search_project_artifacts' by focusing on code skeletons, and mentions returning specific fields (file path, line range, skeleton text).
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 for searching code skeletons and mentions scoping with root_path, but does not explicitly state when to use this tool vs alternatives (e.g., 'semantic_search' or 'search_project_artifacts'). No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_project_artifactsA
[ARTIFACT TOOLS] Full-text search across all artifact files in a project, matching against file content and returning files and sections that contain the query string.
Query is plain text — no special syntax required. Case-insensitive. For semantic / meaning-based search, use semantic_search instead. Do NOT use this to list files — call list_project_artifacts instead. Do NOT use this for source code — call search_code_skeletons instead.
Returns: list of match objects — each with path, matched section name, and a short excerpt of the matched content with surrounding context. Raises: 404 if the project does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text | |
| project | Yes | Project name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses it's full-text, case-insensitive, plain text query. Describes return format and error (404). Missing explicit read-only confirmation but context implies it. Good behavioral coverage.
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?
Well-structured: header with artifact tool context, clear usage instructions with explicit do-not-use cases, and return/error details. Each sentence adds value with no 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?
Given two required params, output schema present, and no additional complexity, description fully covers usage, constraints, and error scenario. No gaps for agent decision-making.
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%, but description adds value by clarifying query is plain text and case-insensitive. Does not reiterate schema but enhances understanding. Justification sufficient.
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 tool performs full-text search across artifact files in a project, matching content and returning files/sections. It distinguishes itself from sibling tools like semantic_search and search_code_skeletons by specifying scope and use case.
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 tells when not to use: listing files (use list_project_artifacts) and source code (use search_code_skeletons). Also directs semantic search to semantic_search. Provides clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tasksA
[TASK TOOLS] Queries the task backlog in LanceDB with optional filters and returns matching task summaries ranked by creation order.
All parameters are optional filters — omit to retrieve all tasks with default status. Default status filter is 'open'; pass status=None to retrieve tasks of all statuses. Do NOT call get_task_details on every result — use this tool for status checks and task selection, then call get_task_details on the single selected task for full content.
Allowed status values: open | in_progress | blocked | done | None (no filter)
Allowed priority values: low | medium | high | critical | None (no filter)
Allowed type values: feature | bug | task | td | None (no filter)
Returns: list of task summary objects — each with task_id, title, status, priority, type, and blocked_by. Full problem/solution content is excluded; call get_task_details for that. Raises: 404 if project is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Type filter | |
| status | No | Status filter | open |
| project | Yes | Project name | |
| priority | No | Priority filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It comprehensively describes default behavior (status defaults to 'open'), allowed values for filters, return format (list of summaries with specified fields), and error condition (404 if project not found). Also notes that full content is excluded.
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?
Description is well-structured with bullet points for allowed values and clear sections. While slightly long, every sentence is informative and front-loaded with purpose. Could be slightly more concise but effective overall.
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?
Given 4 parameters, output schema exists, and description covers return format, error handling, and usage rules, it is completely adequate for an AI agent to understand and use the tool 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?
Schema coverage is 100%, baseline 3. Description adds meaning by listing allowed values for status, priority, and type (though type schema lacks enum), explaining default status and that all parameters except project are optional. This adds value 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 clearly states it queries the task backlog with optional filters and returns summaries ranked by creation order. It distinguishes itself from get_task_details by explicitly advising against calling that tool on every result.
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 states when to use: for status checks and task selection, then call get_task_details on the single selected task. Also explains default status behavior and how to retrieve all statuses, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchA
[ARTIFACT TOOLS] Perform semantic search on artifact sections. Calculates embeddings vector for the query and searches top results by distance. Returns the path, section name, line numbers, and distance.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results | |
| query | Yes | Search text | |
| project | Yes | Project name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it calculates embeddings and searches by distance, implying it is computationally heavier than simple search, but does not mention any side effects, permissions, or limits. Adequate but could be more explicit about performance or data scope.
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, each contributing essential information: the action, the mechanism, and the output. No wasted words, front-loaded with purpose.
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?
Given no output schema and no annotations, the description fairly covers what the tool does, how it works, and what it returns. Minor gaps like performance implications but sufficient for selection and 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?
Schema description coverage is 100%, so baseline is 3. The description does not add extra meaning to parameters beyond what the schema provides; it only mentions query and return fields. No parameter-specific details like format or 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 clearly states it performs semantic search on artifact sections, calculates embeddings, and returns specific fields. This distinguishes it from sibling tools like search_project_artifacts (likely keyword-based) and search_code_skeletons (code-specific).
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 guidance on when to use this tool vs. alternatives. The '[ARTIFACT TOOLS]' prefix provides minimal context, but it does not explain when to prefer semantic search over keyword search or other search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskA
[TASK TOOLS] Partially updates mutable fields on an existing task (status, priority,
title, solution, etc.) using a merge strategy — only keys present in updates are
changed; all other fields remain intact. Use this for in-progress changes (e.g.
updating priority or editing the solution).
Do NOT use to close a task — call complete_tasks instead, which atomically closes and auto-unblocks dependents. Do NOT use to create tasks — call add_tasks instead.
Allowed updates keys:
status : open | in_progress | blocked | done
priority : low | medium | high | critical
title : str
problem : str
solution : str
blocked_by : list[task_id]
Returns: updated task object with all current field values. Raises: 404 if task_id not found in project.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project name | |
| task_id | Yes | Task ID | |
| updates | Yes | Updates dict |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the merge strategy, allowed keys, return value, and error case. While some details like authentication or idempotency are missing, the behavioral traits are well-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?
Well-structured with a header, clear purpose, do's and don'ts, allowed keys list, and return/error info. Front-loaded with the main purpose, no wasted sentences.
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?
Given the task structure and sibling tools, the description covers essential usage: what fields can be updated, how the update works, when to use alternative tools, and expected outcomes (return value, error). No significant 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 descriptions are minimal ('Updates dict'), but the description adds significant meaning: lists allowed keys, their types, and enum values. Also explains merge strategy. This goes well beyond the schema's 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?
The description clearly states the tool's purpose: partially updates mutable fields on an existing task using a merge strategy. It specifies the verb 'update' and the resource 'task', and distinguishes from siblings like 'complete_tasks' and 'add_tasks'.
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 states when to use (in-progress changes) and when not to use (close tasks, create tasks), with specific alternative tools named. This provides excellent guidance for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_file_sourceA
[CODE TOOLS] Read a precise line range from the live source repository ("The Scalpel"). Requires SOURCE_ROOT to be configured in project/.settings.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the file from SOURCE_ROOT | |
| project | Yes | Project name | |
| end_line | Yes | Last line to retrieve (1-based) | |
| start_line | Yes | First line to retrieve (1-based) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It explains the tool reads from the live source repository and requires SOURCE_ROOT configuration, but omits details on error handling, permissions, or behavior when lines are out of range. The read-only nature is implied but not stated.
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 extremely concise with two sentences: one defining purpose and one stating a prerequisite. Every word adds value; 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?
Given the presence of an output schema (not needing return value explanation), the description adequately covers purpose and prerequisite. However, it could clarify that this tool is for source files only (not artifacts), a nuance hinted but not explicit. Minor gap for a well-defined 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?
The input schema already provides 100% coverage with descriptions for all 4 parameters. The description reinforces 'precise line range' but adds no new semantic information beyond the schema, meeting the baseline expectation.
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 'Read a precise line range from the live source repository', specifying the verb (read), resource (live source repository), and scope (precise line range). This distinguishes it from sibling tools like get_file_skeleton (structural view) and read_project_artifacts (non-source artifacts).
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 includes a prerequisite ('Requires SOURCE_ROOT to be configured in project/.settings'), providing clear context for when the tool can be used. However, it does not explicitly contrast with alternatives such as get_file_skeleton or search_code_skeletons, missing the opportunity to guide selection.
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.
1 tool update
- Changed
save_project_artifacts4 fields changed- added
Input schema / $defs / WriteRequest / properties / content / defaultAdded value: +"" - changed
Input schema / $defs / WriteRequest / properties / content / descriptionPrevious value: -"Content to write or replace. In 'patch' mode, this is the replacement string."New value: +"Content to write or replace. In 'patch' mode, this is the replacement string — or use 'new_str' instead (alias, patch mode only)." - added
Input schema / $defs / WriteRequest / properties / new_strAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Alias for 'content' in 'patch' mode only. Takes precedence over 'content' if both are supplied.", + "title": "New Str" +} - changed
Input schema / $defs / WriteRequest / requiredPrevious value: -[ - "path", - "content" -]New value: +[ + "path" +]
1 tool update
v1.1.16- Changed
read_project_artifacts3 fields changed- changed
Input schema / $defs / ReadRequest / properties / mode / defaultPrevious value: -"full"New value: +"paged" - changed
Input schema / $defs / ReadRequest / properties / mode / descriptionPrevious value: -"Read mode: 'full' (entire file), 'section' (single section), 'lines' (line range)"New value: +"Read mode: 'full' (entire file, 0..EOF, ignores pagination params), 'paged' (windowed read — max_chars/skip_chars/direction apply), 'section' (single section, whole section returned), 'lines' (line range, whole range returned)" - changed
Input schema / $defs / ReadRequest / properties / mode / enumPrevious value: -[ - "full", - "section", - "lines" -]New value: +[ + "full", + "section", + "lines", + "paged" +]
1 tool update
v1.1.3- Added
init_project
23 tool updates
v1.1.0- First observed
add_tasks - First observed
complete_tasks - First observed
delete_project_artifact - First observed
get_file_skeleton - First observed
get_guideline - First observed
get_project_artifact_outline - First observed
get_project_map - First observed
get_session_context - First observed
get_task_details - First observed
list_artifact_history - First observed
list_project_artifacts - First observed
list_projects - First observed
move_project_artifact - First observed
read_project_artifacts - First observed
restore_project_artifact - First observed
run_project_build - First observed
save_project_artifacts - First observed
search_code_skeletons - First observed
search_project_artifacts - First observed
search_tasks - First observed
semantic_search - First observed
update_task - First observed
view_file_source
TDQS
Each tool has a clearly distinct purpose, grouped into well-defined categories (task, artifact, code, session, project, build, history). No overlapping tools, and descriptions provide precise guidance on when to use each.
Most tool names follow a consistent verb_noun pattern, but 'semantic_search' breaks the pattern as an adjective_noun. Aside from this minor deviation, naming is predictable and readable.
With 24 tools, the server is slightly above the ideal range but remains well-scoped for its domain. Each tool serves a specific function, and the count is not excessive for the breadth of features offered.
The tool surface covers most CRUD operations for tasks and artifacts, but it lacks a delete task tool. Artifacts have full lifecycle support, and code tools are adequate. Minor gaps prevent a perfect score.
Maintenance
Related MCP Connectors
Your versioned memory across every AI tool — context maps, personal memory, and tasks over MCP.
shared AI-context layer for teams — persistent memory your agents search and update over MCP
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to maintain persistent, cross-session memory of codebase architecture, naming conventions, and decisions through MCP tools. Eliminates repetitive project re-explanation by automatically injecting stored context into every session with local-first SQLite storage and optional team sharing capabilities.4MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides persistent, cross-session memory and team knowledge sharing for AI development workflows. It enables project DNA scanning, semantic search, context budgeting, and git-aware indexing to prevent AI context loss between sessions.19MIT
- AlicenseAqualityDmaintenanceMCP server that provides a shared semantic memory layer for AI coding agents, enabling teams to store, search, and sync context, decisions, and knowledge across projects with project-based isolation and multi-backend support.141MIT
- AlicenseAqualityBmaintenanceA persistent, project-scoped memory layer for AI agents, supporting hybrid retrieval (vector, keyword, and tag matching) and sharing across different MCP clients like Claude Code, Qoder, or Cursor.8MIT
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/desikai-lab/Marrow'
If you have feedback or need assistance with the MCP directory API, please join our Discord server