Skip to main content
Glama

Marrow MCP server

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:

  1. Watches source files using filesystem events

  2. Debounces rapid changes

  3. Parses modified files with tree-sitter grammars (multi-language)

  4. Extracts structural skeletons: classes, methods, namespaces, properties

  5. Generates vector embeddings via a lazy-loaded encoder

  6. Delivers skeleton chunks to marrow_server via 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

add_tasks

Adds a list of tasks to the project backlog

search_tasks

Semantic search over tasks

get_task_details

Returns full task details by ID

update_task

Updates task fields (status, priority, etc.)

complete_tasks

Atomically closes tasks and auto-unblocks dependents

📄 Artifact Tools

Tool

Description

read_project_artifacts

Reads one or more markdown artifacts

save_project_artifacts

Creates or updates artifacts (patch, replace, append)

list_project_artifacts

Lists files in artifact storage

move_project_artifact

Moves or renames an artifact

delete_project_artifact

Safely deletes an artifact

search_project_artifacts

Global semantic search across all artifacts

get_project_artifact_outline

Extracts table of contents from a markdown file

list_artifact_history

Lists version history for an artifact

restore_project_artifact

Restores a previous artifact version

🧠 Code Intelligence Tools

Tool

Description

search_code_skeletons

Semantic search over indexed source code skeletons

get_file_skeleton

Retrieves a token-optimized structural outline of a file

view_file_source

Reads a precise line range from the live source repository

get_project_map

Returns a live directory tree of all indexed files

📁 Session & Project Tools

Tool

Description

list_projects

Returns a list of all available projects

init_project

Creates a new project workspace from the built-in template — use on Glama or any deployment without shell access

get_session_context

Reads session state and returns phase-appropriate guidelines for the active agent role

get_guideline

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

run_project_build

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

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.yml

Or clone if you prefer:

git clone https://github.com/desikai-lab/Marrow.git
cd Marrow

2. 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/src

3. 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/src

See Project Settings (.settings) for the full explanation.

4. Start

docker compose up

Marrow 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 running marrow-worker with 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 Marrow

2. 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.py

The 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.md

This 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/code

3. 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/src

The 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 OtherApp

Multiple 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 blueprints

Build Engine

Build manifest format and the build admin command → docs/BUILD_ENGINE.md.


More Docs

Doc

Covers

docs/CONFIGURATION.md

All environment variables and CLI arguments for server, worker, and docker-compose

docs/ADMIN_CLI.md

marrow-admin and marrow-skills CLI commands, and repair_blobs.py

docs/BUILD_ENGINE.md

Build manifest YAML format and the build admin command

docs/roadmap.md

Live prioritised roadmap


Contributing

See CONTRIBUTING.md for development setup, coding standards, and the pull request process.


License

MIT — see LICENSE.

Available Tools

24 tools
add_tasksA

[TASK TOOLS] Adds a list of tasks to the project backlog.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYesList of new tasks
projectYesProject name (e.g. 'YourProject', 'MCP')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name
task_idsYesList of task keys to complete, e.g. ['TD4000078', 'TD4000080']

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to delete
projectYesProject name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the source file (e.g. 'src/services/billing.ts')
depthNo0=full (default) | 1=class/namespace names only, no skeleton_text | 2=classes+method signatures
projectYesProject name
summary_onlyNoStrip skeleton_text from output (applies at depth=0 only)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesAgent role name (e.g. 'discovery', 'execution')
projectYesProject name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to .md file
projectYesProject name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoMaximum directory depth to show (default 4)
projectYesProject name
include_testsNoInclude test files in the map (default False)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name to read session state from
start_roleNoOptional. 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name
task_idYesTask ID

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesUnique project name to create
templateNoScaffold template namedefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to artifact
projectYesProject name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRelative folder path
projectYesProject name
recursiveNoRecursive list

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name
src_pathYesSource path
dest_pathYesDestination path

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
readsYesList of read requests
projectYesProject name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to artifact
projectYesProject name
backup_nameYesBackup name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name
variablesNoRuntime template variables e.g. {"FEATURE": "Auth"}
build_nameYesManifest name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name
updatesYesList of write requests

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
queryYesNatural language search query, e.g. 'order processing method' or 'database context constructor'
projectYesProject name (e.g. 'YourProject')
root_pathNoRestrict search to files under this path prefix, e.g. 'src/worker'
chunk_typeNoOptional filter by code unit type: 'namespace', 'class', 'method', 'constructor', 'property', 'file', etc.
include_testsNoInclude test file chunks in results (default False)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch text
projectYesProject name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoType filter
statusNoStatus filteropen
projectYesProject name
priorityNoPriority filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name
task_idYesTask ID
updatesYesUpdates dict

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path to the file from SOURCE_ROOT
projectYesProject name
end_lineYesLast line to retrieve (1-based)
start_lineYesFirst line to retrieve (1-based)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. 1 tool update
    • Changedsave_project_artifacts4 fields changed
      • addedInput schema / $defs / WriteRequest / properties / content / default
        Added value: +""
      • changedInput schema / $defs / WriteRequest / properties / content / description
        Previous 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)."
      • addedInput schema / $defs / WriteRequest / properties / new_str
        Added 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"
        +}
      • changedInput schema / $defs / WriteRequest / required
        Previous value: -[
        -  "path",
        -  "content"
        -]New value: +[
        +  "path"
        +]
  2. 1 tool updatev1.1.16
    • Changedread_project_artifacts3 fields changed
      • changedInput schema / $defs / ReadRequest / properties / mode / default
        Previous value: -"full"New value: +"paged"
      • changedInput schema / $defs / ReadRequest / properties / mode / description
        Previous 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)"
      • changedInput schema / $defs / ReadRequest / properties / mode / enum
        Previous value: -[
        -  "full",
        -  "section",
        -  "lines"
        -]New value: +[
        +  "full",
        +  "section",
        +  "lines",
        +  "paged"
        +]
  3. 1 tool updatev1.1.3
    • Addedinit_project
  4. 23 tool updatesv1.1.0
    • First observedadd_tasks
    • First observedcomplete_tasks
    • First observeddelete_project_artifact
    • First observedget_file_skeleton
    • First observedget_guideline
    • First observedget_project_artifact_outline
    • First observedget_project_map
    • First observedget_session_context
    • First observedget_task_details
    • First observedlist_artifact_history
    • First observedlist_project_artifacts
    • First observedlist_projects
    • First observedmove_project_artifact
    • First observedread_project_artifacts
    • First observedrestore_project_artifact
    • First observedrun_project_build
    • First observedsave_project_artifacts
    • First observedsearch_code_skeletons
    • First observedsearch_project_artifacts
    • First observedsearch_tasks
    • First observedsemantic_search
    • First observedupdate_task
    • First observedview_file_source

TDQS

A3.9/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    19
    MIT

Latest Blog Posts

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