Skip to main content
Glama

celiums-memory MCP server

Celiums

Your AI doesn't know what it doesn't know. And it forgets everything.

The open-source engine that gives AI persistent memory and instant access to 5,100+ expert knowledge modules — with a biological clock that adapts to each user.

Try the Live Demo · Quick Start · 6 Tools · How to Use · Architecture · Deploy · Docs

npm version Downloads License TypeScript GitHub Stars Glama


What's new in v1.2 — 2026-04-27

  • 🆕 20 MCP tools (was 6): journal (5), write (7), research (8) added.

  • 🆕 BYOK LLM — bring your own OpenAI-compatible endpoint. Works with OpenAI, Ollama, OpenRouter, Together, Groq, vLLM, LM Studio. No proprietary lock-in.

  • 🆕 Ethics Engine layers B + C — CVaR-probabilistic risk scoring + 5-framework philosophical evaluation, on top of layer A.

  • 🆕 Integration utilities — encrypted credential storage (integrations/crypto.ts), schema for tenant integrations, opportunistic LLM-powered output formatting (humanize.ts), free-form-query intent classifier.

  • 🧹 OpenCore is fully self-contained — zero network calls if you don't configure an LLM. The engine boots clean with nothing but a database.


The Problem

Every time your AI assistant starts a new session, it starts from zero. It doesn't remember your preferences, your project decisions, your debugging history, or what you were working on yesterday. It hallucinates because it has no specialized knowledge — just general training data frozen at a cutoff date.

You spend more time re-explaining context than getting work done.

Related MCP server: MCP AI Memory

The Solution

Celiums combines two engines into one:

Engine

What it does

How

Memory

Remembers everything — with emotion

PAD vectors, dopamine, circadian rhythm, 15 cognitive modules

Knowledge

Knows what experts know

5,100 curated technical modules, full-text search, 18 categories

Both engines expose 6 MCP tools that any AI IDE can call autonomously. Install once, your AI has persistent memory AND expert knowledge forever.

See it in action: ask.celiums.ai

Talk to Celiums AI directly — it uses all 5,100 modules, remembers you across sessions, and has a real circadian rhythm. Zero-knowledge: your data is never used for training.


Quick Start

Option 1: npm (local, 60 seconds)

npm install -g @celiums/cli
celiums init

That's it. celiums init:

  • Asks your name, timezone, and if you're a morning or night person

  • Loads 5,100 expert knowledge modules

  • Auto-configures Claude Code, Cursor, and VS Code

  • Creates your personal cognitive profile (circadian rhythm adapts to YOU)

Option 2: Docker (VPS, 3 minutes)

# 1. Clone
git clone https://github.com/terrizoaguimor/celiums-memory.git
cd celiums-memory

# 2. Configure
cp .env.example .env   # edit passwords

# 3. Start infrastructure (PostgreSQL + Qdrant + Valkey)
docker compose up -d

# 4. Install dependencies
pnpm install

# 5. Build + start Celiums
pnpm setup

You get: Celiums API on port 3210 + PostgreSQL + Qdrant + Valkey. On first run, 5,100 expert modules are loaded automatically.

Option 3: DigitalOcean 1-Click (coming soon)

One button. Deploys everything on your own DO droplet.


Configure your LLM (BYOK)

OpenCore tools (recall, remember, forage, absorb, sense, map_network, synthesize, bloom, cultivate) work without any LLM — pure local memory + knowledge base.

The AI-backed tools (journal, write, research) require an OpenAI-compatible chat endpoint. You bring your own key. The engine never talks to a Celiums-hosted service for inference.

# Option A — OpenAI (default endpoint)
export CELIUMS_LLM_API_KEY=sk-...

# Option B — Ollama (local, free, no API key)
export CELIUMS_LLM_BASE_URL=http://localhost:11434/v1
export CELIUMS_LLM_API_KEY=ollama
export CELIUMS_LLM_MODEL=llama3.2

# Option C — OpenRouter (any model, one key)
export CELIUMS_LLM_BASE_URL=https://openrouter.ai/api/v1
export CELIUMS_LLM_API_KEY=sk-or-...
export CELIUMS_LLM_MODEL=anthropic/claude-3.5-sonnet

# Option D — Together / Groq / Anyscale / vLLM / LM Studio
# Same pattern: set BASE_URL + API_KEY + (optional) MODEL.

Env var

Default

Purpose

CELIUMS_LLM_BASE_URL

https://api.openai.com/v1

OpenAI-compatible endpoint root

CELIUMS_LLM_API_KEY

(empty — required to enable AI tools)

Bearer token for the endpoint

CELIUMS_LLM_MODEL

gpt-4o-mini

Default chat model

CELIUMS_EMBED_MODEL

text-embedding-3-small

Default embedding model

CELIUMS_SEARCH_URL

(empty — optional)

Corpus-search backend for research_*

If CELIUMS_LLM_API_KEY is not set, AI-backed tools are simply not registered — tools/list returns only OpenCore. The engine never errors at boot for missing optional config.


The Tools

When connected via MCP, your AI can call these autonomously. Tools split into OpenCore (always available, no LLM required) and AI-backed (require an OpenAI-compatible LLM key — see Configure your LLM below).

Knowledge tools — OpenCore

Tool

What it does

Example

forage

Search for expert knowledge

"find modules about Kubernetes security"

absorb

Load a specific module

"load the react-server-components module"

sense

Get recommendations for a goal

"what should I use for building a REST API?"

map_network

Browse all categories

"show me what knowledge areas are covered"

Memory tools — OpenCore

Tool

What it does

Example

remember

Store something in memory

"remember that we chose Hono over Express"

recall

Retrieve by semantic relevance

"what framework decisions did we make?"

synthesize

Consolidate memories into a narrative

"what did I learn this week?"

bloom

Expand a concept into related ideas

"explore variations of memory consolidation"

cultivate

Deep-dive a topic

"cultivate hybrid retrieval"

Journal tools — AI-backed (since v1.2)

Persistent agent diary that survives across discontinuous invocations. Every model carries its own journal — when a new model takes over, it can read the predecessor's entries but never claim it lived them.

Tool

What it does

journal_write

Append a new entry (auto-embedded, importance-scored)

journal_recall

Semantic + tag + type search across the agent's history

journal_arc

Build a coherent arc with anti-confabulation guardrails

journal_introspect

Answer a self-question grounded in entries only

journal_dialogue

The agent reacts to a user-shared entry

Write tools — AI-backed (since v1.2)

Novelist-grade project state. Tracks secrets_known_at_chapter per character, worldbuilding rules with cost/exceptions, and timeline markers — flags structural continuity issues, not line-by-line prose problems.

write_project_create, write_project_get, write_character_create, write_scene_create, write_scene_update, write_continuity_check, write_export.

Research tools — AI-backed (since v1.2)

Persistent multi-session investigations with citations, findings, and gaps. Resume a project days later and see all prior context in one shot.

research_project_create, research_project_list, research_project_continue, research_finding_add, research_gap_add, research_search, research_synthesize, research_export.

research_search and research_synthesize need a corpus-search backend (CELIUMS_SEARCH_URL, any service exposing POST /v1/search). Without it the project/findings/gaps trackers still work fine.

What happens behind remember (the user sees nothing, it just works):

User: "remember that we chose Hono over Express for the API"
                    |
          PAD Emotional Vector (pleasure: 0.4, arousal: 0.3, dominance: 0.5)
                    |
          Theory of Mind (empathy matrix transforms user emotion)
                    |
          Dopamine / Habituation (novelty detection, reward modulation)
                    |
          Per-User Circadian (your timezone, your peak hour, your rhythm)
                    |
          PFC Regulation (clamp safe bounds, suppress extremes)
                    |
          Triple-Store Persist (PostgreSQL + Qdrant + Valkey)
                    |
          "Remembered (importance: 0.72)"

15 cognitive systems fire on a single remember call. The user just types one sentence.


How to Use It

Connect to your IDE

After celiums init, it's auto-wired. Or manually:

Claude Code:

claude mcp add celiums -- celiums start --mcp

Cursor — add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "celiums": { "command": "celiums", "args": ["start", "--mcp"] }
  }
}

VS Code — add to settings.json:

{
  "mcp.servers": {
    "celiums": { "type": "stdio", "command": "celiums", "args": ["start", "--mcp"] }
  }
}

Use the tools in conversation

Once connected, your AI uses the tools automatically. Just talk normally:

You: "Find me best practices for PostgreSQL optimization"
AI:  -> calls forage(query="PostgreSQL optimization")
     -> finds postgresql-best-practices-v2 (eval: 4.0)
     -> presents the expert module content

You: "Remember that we decided to use JSONB for metadata columns"
AI:  -> calls remember(content="decided to use JSONB for metadata columns")
     -> stored with importance 0.68, mood: focused

You: "What database decisions have we made?"
AI:  -> calls recall(query="database decisions")
     -> finds: "decided to use JSONB for metadata" (score: 0.89)
     -> presents with emotional context

REST API

If running as a server (Docker/VPS), the full API is available:

# Search modules
curl http://localhost:3210/v1/modules?q=react+hooks

# Get a specific module
curl http://localhost:3210/v1/modules/typescript-mastery

# Browse categories
curl http://localhost:3210/v1/categories

# Store a memory
curl -X POST http://localhost:3210/store \
  -H "Content-Type: application/json" \
  -d '{"content": "The API uses Hono framework", "userId": "dev1"}'

# Recall memories
curl -X POST http://localhost:3210/recall \
  -H "Content-Type: application/json" \
  -d '{"query": "what framework", "userId": "dev1"}'

# Check your circadian rhythm
curl http://localhost:3210/circadian?userId=dev1

# Update your timezone
curl -X PUT http://localhost:3210/profile \
  -H "Content-Type: application/json" \
  -d '{"userId": "dev1", "timezoneIana": "Asia/Tokyo", "timezoneOffset": 9}'

# MCP protocol (for AI clients)
curl -X POST http://localhost:3210/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

# Health check
curl http://localhost:3210/health

Configuration

All settings via environment variables:

# Core
DATABASE_URL=postgresql://user:pass@localhost:5432/celiums_memory
QDRANT_URL=http://localhost:6333
VALKEY_URL=redis://localhost:6379
PORT=3210

# SQLite mode (alternative, single file, zero infrastructure)
SQLITE_PATH=./celiums.db

# Knowledge engine
KNOWLEDGE_DATABASE_URL=postgresql://user:pass@localhost:5432/celiums

# Onboarding (auto-configure on first run)
CELIUMS_USER_NAME=dev1
CELIUMS_LANGUAGE=en     # en, es, pt-BR, zh-CN, ja
CELIUMS_TIMEZONE=America/New_York
CELIUMS_CHRONOTYPE=morning  # morning, neutral, night

Architecture

Your AI (Claude Code, Cursor, VS Code, any MCP client)
         |
         | MCP JSON-RPC (6 tools)
         v
  CELIUMS ENGINE (1 process, 1 port)
  |                              |
  |  Knowledge Engine            |  Memory Engine
  |  forage, absorb,             |  remember, recall
  |  sense, map_network          |
  |                              |  15 cognitive modules:
  |  5,100 modules               |  limbic, circadian, dopamine,
  |  18 dev categories           |  personality, ToM, PFC, ANS,
  |  full-text search            |  habituation, reward,
  |                              |  interoception, consolidation,
  |                              |  lifecycle, autonomy,
  |                              |  recall engine, importance
  |                              |
  v                              v
  Modules DB                     Memory DB
  (SQLite or PostgreSQL)         (SQLite or PG + Qdrant + Valkey)

Per-User Circadian Rhythm

Each user gets their own biological clock:

curl http://localhost:3210/circadian?userId=dev1
# {
#   "localHour": 10.5,
#   "rhythmComponent": 0.99,
#   "timeOfDay": "morning-peak",
#   "circadianContribution": 0.30
# }

A user in Tokyo gets different arousal than a user in New York at the same moment.

Capability Gating

Tools appear based on your configuration. No upgrade prompts, no locked features visible.

Tier

Tools

What you get

OpenCore (free)

6

forage, absorb, sense, map_network, remember, recall + 5,100 modules

+ Fleet (coming)

+8

synthesize, bloom, cultivate, pollinate, decompose, fleet, construct

+ Atlas (coming)

+12

Real-time collaboration, 451K+ modules


Deploy Modes

Local (SQLite)

SQLITE_PATH=./celiums.db celiums start

Everything in one file. Perfect for individual developers.

Docker (full stack)

docker compose up -d

PostgreSQL 17 + pgvector, Qdrant, Valkey. Optional Cloudflare Tunnel:

docker compose --profile tunnel up -d

DigitalOcean 1-Click (coming soon)

One button creates a droplet with everything pre-configured.


Languages

Language

Status

English

Default

Espanol

Supported

Portugues (Brasil)

Supported

Chinese (Simplified)

Supported

Japanese

Supported

Auto-detected from your OS during celiums init.


Packages

Package

Description

@celiums/memory

Cognitive engine (15 modules, PAD, circadian)

@celiums/memory-types

TypeScript types

@celiums/modules-starter

5,100 curated expert modules

@celiums/core

Knowledge engine (search, modules, tools)

@celiums/cli

CLI (celiums init, celiums start)

@celiums/adapter-mcp

MCP protocol adapter

@celiums/adapter-rest

REST API adapter

@celiums/adapter-openai

OpenAI Function Calling adapter

@celiums/adapter-a2a

Google A2A protocol adapter


Security

  • Local-first. Your memories live ONLY on your machine or your own server. Nothing is sent to us.

  • API key auth. Bearer token required for all non-localhost requests.

  • Per-user isolation. Each user has their own memory space, emotional state, and circadian profile.

  • No telemetry. Zero analytics, zero tracking, zero phone-home.


Contributing

See CONTRIBUTING.md.

git clone https://github.com/terrizoaguimor/celiums-memory.git
cd celiums-memory
pnpm install
pnpm build

Support This Project

This project is built on ADHD hyperfocus, too much coffee, and the stubborn belief that AI deserves a real brain. Every one of these 11,000+ lines was written between 20-hour coding sessions, fueled by curiosity and obsession.

If Celiums is useful to you, or if you believe AI should have emotions and not just compute, consider supporting the work.

Your contribution keeps the GPUs running, the coffee flowing, and this project alive.


License

Apache 2.0 — see LICENSE


Built with obsessive attention to detail.

celiums.ai · npm · GitHub

Available Tools

26 tools
absorbA

Load the full content of a knowledge module by its exact name/slug. Returns the complete module text (typically 2,000-20,000 words) with code examples, best practices, and references. Use after forage to read a specific module in full. Behavior: looks up the module by slug, returns full markdown content. If not found, suggests using forage to search. Example: absorb("react-mastery") returns the complete React mastery guide.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact module slug (kebab-case). Get slugs from forage results. Examples: "react-mastery", "kubernetes-hpa-guide", "owasp-top-10-checklist"

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided; description fully covers behavior: looks up by slug, returns full markdown, typical length, content type, and fallback suggestion. Could mention any side effects or auth requirements, but none are expected for a read-only knowledge module tool.

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 (5 sentences) and well-structured: purpose, content type, usage instruction, behavioral note, and example. 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?

Even without output schema, the description fully explains the return value (complete markdown content, length range, typical sections). It covers all necessary context for correct invocation.

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 has 100% coverage with description for 'name' parameter. The tool description adds extra value: 'Exact module slug (kebab-case). Get slugs from forage results. Examples: ...' This goes beyond the schema's 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 states 'Load the full content of a knowledge module by its exact name/slug.' It clearly identifies the verb (load) and resource (knowledge module), and distinguishes from sibling 'forage' by specifying 'Use after forage to read a specific module in full.'

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 'Use after forage to read a specific module in full.' and 'If not found, suggests using forage to search.' Provides clear when-to-use and when-not-to (fallback) guidance.

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

forageA

Search 500,000+ expert knowledge modules by natural language query. Returns ranked results with titles, descriptions, and categories. Use when the user needs technical guidance, best practices, or domain expertise. Behavior: performs hybrid search (full-text + semantic) across the knowledge base, ranks by relevance, returns top N matches. Example queries: "kubernetes horizontal pod autoscaler", "react hooks best practices", "HIPAA compliance checklist".

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language search query describing the knowledge needed. Be specific for better results. Example: "how to set up PostgreSQL replication"
limitNoMaximum number of modules to return. Default: 10, max: 50. Use lower values (3-5) for focused results, higher (20-50) for broad exploration.

TDQS

A3.6/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 full burden. It states 'Behavior: performs hybrid search (full-text + semantic) across the knowledge base, ranks by relevance, returns top N matches.' This adds useful detail beyond the schema but does not disclose auth needs, rate limits, or potential limitations.

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 compact (three sentences plus examples), front-loaded with purpose, then usage, then behavior. No extraneous words. Examples are placed at the end, which is acceptable. Minor improvement could be to separate examples more clearly.

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 low complexity (2 params, no output schema, no annotations), the description is complete: it covers purpose, usage, behavioral details, and examples. No obvious gaps for a search tool. Slightly more detail on pagination or result format would improve, but not necessary.

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 is 3. Description adds marginal value with example queries and advice to 'Be specific' for query, and default/max values for limit. These are helpful but not essential beyond the schema definitions.

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 'Search 500,000+ expert knowledge modules by natural language query' and lists return results. Purpose is specific and actionable. However, it does not differentiate from sibling tool 'research_search' which may have overlapping functionality.

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?

Explicit guidance: 'Use when the user needs technical guidance, best practices, or domain expertise.' This provides clear context for when to invoke the tool. No alternative tools or exclusion criteria are mentioned, but the guidance is sufficient for a search tool.

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

journal_arcA

Build a coherent arc across YOUR recent entries using the configured LLM — with anti-confabulation guardrails. Output ALWAYS returns 4 keys: narrative, contradictions (entry pairs in tension), outliers (entries that don't fit), and confidence [0,1]. If outliers is empty you are probably confabulating coherence — the response is annotated with a WARNING. confidence < 0.7 is flagged as a "weak arc". Default window is the last month, max 50 entries. Excludes superseded entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowNolast_week | last_month (default) | all
max_entriesNoDefault 50, max 200.

TDQS

A4.3/5.0
Behavior5/5

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

The description thoroughly discloses the tool's output format (narrative, contradictions, outliers, confidence), edge cases (empty outliers indicating confabulation, weak arc for confidence < 0.7), default window (last month), limit (50 entries), and exclusion of superseded entries. No annotations exist, so the description fully carries the behavioral burden.

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 concise 5-sentence paragraph that front-loads the primary purpose and then efficiently covers output structure, warnings, defaults, and limits. Every sentence adds value 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?

Given the tool has only 2 optional parameters and no output schema or annotations, the description provides comprehensive context: what the tool does, what it returns, when to suspect confabulation, and configuration defaults. This is sufficient for an AI to decide when to invoke the tool and interpret results.

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 descriptions for both parameters (window and max_entries), achieving 100% coverage. The description adds minor value by stating defaults ('default window is last month, max 50'), but does not significantly enhance understanding 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 builds a coherent arc from recent journal entries, with specific features like anti-confabulation guardrails and a defined output structure (4 keys). It distinguishes itself from sibling tools like journal_recall or journal_introspect by focusing on narrative construction rather than retrieval or self-reflection.

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 constructing a narrative arc from recent entries, but it does not explicitly state when to prefer this tool over siblings or when not to use it. The phrase 'using the configured LLM' hints at its unique capability, but no alternatives or exclusions are provided.

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

journal_dialogueA

The user replies to one of your user-shared entries. The tool refuses with "entry is private" if visibility=self. Otherwise the configured LLM writes YOUR honest first-person reaction to their reply, and a new reflection entry is created with preceded_by=[entry_id] and content "User reply: …\n\nMy reaction: …". Both entries are tagged "dialogue".

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_idYesuuid of the original user-shared entry.
user_responseYesUser reply text.

TDQS

A4.6/5.0
Behavior5/5

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

No annotations provided, so the description carries full burden. It discloses key behaviors: refusal for private entries, creation of a new entry with specific structure (preceded_by, content format, tags), and that the LLM writes the reaction. This is comprehensive.

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 fairly concise with two sentences, but the second sentence is lengthy and contains many details. It is front-loaded with the main purpose, but could be slightly more streamlined.

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 complexity, the description covers all necessary aspects: purpose, parameter meanings, behavioral outcomes, and failure conditions. No output schema exists, but the description explains the resulting entry structure sufficiently.

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 context beyond the schema: entry_id must refer to a user-shared entry, and user_response is the reply text. This enhances understanding of the parameters' roles.

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: handling a user's reply to a shared entry, triggering an LLM reaction and creating a new reflection entry. It distinguishes from sibling tools like journal_write or journal_introspect by focusing on dialogue interaction.

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 when to use the tool (user replies to a shared entry) and when not (refuses if visibility=self). However, it does not explicitly mention alternative tools for similar tasks, though context implies the specific dialogue scenario.

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

journal_introspectA

Ask YOUR journal a self-question. Pulls semantically-relevant entries, then asks the configured LLM to answer in YOUR first-person voice grounded ONLY in those entries (no invention). Returns the answer plus entries_referenced and a hallucination_risk score (high if <3 entries grounded the answer, medium if <6, otherwise low). If entries don't support an answer, the answer literally is "no patterns found in journal".

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesA self-question (e.g. "Have I been more cautious lately?").
scopeNorecent (last 14 days) | all (default).

TDQS

A4.4/5.0
Behavior5/5

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

No annotations are provided, but the description fully discloses behavioral traits: it pulls semantically-relevant entries, uses an LLM in first-person voice, restricts to only those entries, returns the answer plus entries_referenced and hallucination_risk score, and explains the risk thresholds and the fallback message when no support is found.

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 three sentences and well-structured, with the most important information first. It could be slightly more concise by merging some details, but it is not verbose and every sentence adds value.

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 of the tool and no output schema, the description covers purpose, behavior, expected output format, error or edge case handling (when no patterns found), and risk scoring. It is complete enough for an agent to understand when and how to use the 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 description coverage is 100%, meaning both params (question, scope) are described in the input schema. The description adds context about the question being a 'self-question' and scope as 'recent (last 14 days) | all', but does not significantly augment the schema. 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?

The description clearly states the tool's purpose: 'Ask YOUR journal a self-question' and explains the process of retrieving entries and generating a grounded answer. It distinguishes from sibling tools like journal_recall (which likely retrieves raw entries) and journal_dialogue (which might involve conversation).

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 implies the tool is for self-reflection grounded in journal entries, but it does not explicitly state when to use it vs. alternatives like journal_recall or journal_dialogue. The context is clear, but explicit exclusion guidance is missing.

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

journal_recallA

Search YOUR journal. Filters by entry_type, tags, and/or a semantic query (embedded via the configured embedding model, ranked by cosine similarity). By default scopes to YOUR agent_id; pass inherit_from= to read a predecessor model's journal — those entries return with inherited_from set in the response, marking them as "read but not lived" (Option C of the succession-of-models design). DEFAULT excludes entries that have been superseded or recanted; pass include_superseded=true to see them.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoNatural-language semantic query.
entry_typeNoFilter to a single entry_type.
tagsNoMatch if any tag overlaps.
limitNoDefault 10, max 100.
include_supersededNoDefault false. If true, return entries that were later superseded/recanted.
semantic_thresholdNoCosine similarity floor when query is provided. Default 0.6.
inherit_fromNoRead another agent_id's journal. Returned entries are marked inherited_from.
conversation_idNoFilter to a specific conversation_id (uuid). If omitted, no conversation-level filter is applied.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description fully carries the transparency burden. It discloses embedding-based semantic search, default agent scoping, the inherit_from marking with 'inherited_from' response field, and superseded entry handling. No contradictions with missing annotations.

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 concise and front-loaded with the main purpose. It packs several details without verbosity. While dense, it could benefit from slight structuring (e.g., bullet points for defaults), but remains efficient.

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 8 parameters and no output schema, the description covers most critical aspects: parameter defaults, filtering options, and response markings. It omits details about the response structure beyond the 'inherited_from' field, which is a minor gap for a tool of this complexity.

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 beyond schema: explains 'query' as embedded and cosine-similarity ranked, clarifies include_superseded default, and details inherit_from response behavior. This additional context raises the score.

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 starts with 'Search YOUR journal' and details specific filtering by entry_type, tags, and semantic query, clearly distinguishing it from sibling tools like 'recall' or 'remember' which likely handle broader memory retrieval. The inherit_from clause further specifies predecessor journal access.

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 default behavior (own agent_id) and the inherit_from alternative for predecessor journals. It also clarifies the default exclusion of superseded entries. However, it does not explicitly compare to sibling tools or state when NOT to use this tool, though the context is sufficient for an informed agent.

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

journal_writeA

Append a first-person entry to YOUR (the model's) persistent journal. Each agent_id (e.g. claude-opus-4-7, claude-sonnet-4-6, gpt-5, ...) has its OWN journal — they do NOT mix. importance is auto-computed: decisions/lessons/arcs are weighted higher; emotions are weighted lower. The content is embedded via the configured embedding model (CELIUMS_EMBED_MODEL) so journal_recall can find it semantically later. visibility=self (default) keeps the entry private; user-shared makes it eligible for journal_dialogue. preceded_by builds a causal chain — pass the ids of prior entries that led to this one.

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_typeYesreflection | decision | lesson | belief | emotion | arc | doubt
contentYesThe first-person entry. Write in YOUR voice as the agent.
preceded_byNouuid[] of prior entries that led to this one (causal chain).
valenceNoEmotional valence in [-1, 1]. Optional.
valence_reasonNoOptional short justification (max 500 chars) for the valence value. Non-prescriptive — write the reason in your own first-person voice. Future journal_arc uses this to detect WHY valence drifted, not just THAT it drifted.
tagsNo
visibilityNo"self" (default, private) | "user-shared" (the user can reply via journal_dialogue).
referenced_user_memoryNoids of memories from your celiums-memory store that triggered this entry.
conversation_idNoOptional uuid that groups entries from the same logical conversation. If not provided, entry is unaffiliated. Use this so journal_arc can distinguish thought development within one conversation from criterion change across conversations.

TDQS

A4.7/5.0
Behavior5/5

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

Discloses critical behaviors: per-agent isolation, auto-computed importance, semantic embedding, visibility scoping, and causal chaining. No annotations exist, so the description fully carries the transparency burden without gaps.

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?

Front-loaded with purpose and well-structured, but contains minor redundancy (e.g., reiterating visibility). Still, each sentence adds value, and the length is justified by the tool's complexity.

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?

Covers all 9 parameters with semantic context, including optional fields like valence_reason and conversation_id. No output schema exists, but the description provides sufficient behavioral insight for a write operation.

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?

Adds significant meaning beyond the high-coverage schema (89%): explains auto-computation of importance, embedding purpose, causal chain semantics, and conversation_id grouping. This compensates for any missing 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?

Explicitly states the action ('Append a first-person entry') and the resource ('YOUR persistent journal'), distinguishing it from siblings like journal_recall and journal_dialogue.

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

Usage Guidelines4/5

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

Provides clear context for when to use (persistent journaling) and covers key behaviors like auto-computed importance and causal chaining. Could have explicitly contrasted with sibling tools (e.g., absorb) but still offers solid guidance.

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

map_networkA

Browse the entire Celiums knowledge network organized by category. Returns all categories with module counts, top modules per category, and total statistics. Use to explore what knowledge is available, discover categories, or get an overview of the knowledge base. Behavior: queries the module index, groups by category, returns a structured map with counts. No parameters needed — returns the full network overview.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/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 full burden. It explains the internal behavior: 'queries the module index, groups by category, returns a structured map with counts.' It also notes that no parameters are needed and that it returns the full overview, fully disclosing the tool's 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 concise with four sentences: purpose, content, usage, and behavior/parameter note. Information is front-loaded and every sentence adds value 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?

Given zero parameters and no output schema, the description fully explains what the tool returns (categories, counts, top modules, total stats) and how it works (queries index, groups by category). This is complete for its complexity level.

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

Parameters4/5

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

The input schema has zero parameters, and the description explicitly confirms 'No parameters needed.' With 100% schema coverage, the description adds no extra meaning but is consistent. Baseline for 0 params is 4.

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: 'Browse the entire Celiums knowledge network organized by category.' It specifies the output content (categories, module counts, top modules, total statistics) and distinguishes from sibling tools by focusing on network overview rather than individual records or actions.

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?

Explicit usage guidance is provided: 'Use to explore what knowledge is available, discover categories, or get an overview of the knowledge base.' While no explicit when-not or alternatives are given, the sibling tools have clearly different purposes, making this sufficient.

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

recallA

Search persistent memory using semantic + emotional relevance ranking. Returns memories sorted by relevance, recency, and emotional resonance. Searches current project + global memories by default. Use to retrieve previously stored facts, decisions, preferences, or context. Behavior: performs hybrid retrieval (vector similarity + full-text + emotional resonance), applies spaced activation recall (SAR) filtering, returns ranked results with content, type, importance, and relevance score.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat you want to recall, in natural language. Example: "what database did we choose for the auth service", "user preferences for code style", "last architecture decision"
limitNoMaximum number of memories to return. Default: 10, max: 50. Use lower values (3-5) for focused recall, higher for comprehensive search.
projectIdNoSearch specific project scope. Default: current project + global. projectId="all" requires admin:cross_project scope. Use a specific project ID to search only that project.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully covers behavioral traits: hybrid retrieval (vector, full-text, emotional), SAR filtering, and returned fields (content, type, importance, relevance score). 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?

The description is a single focused paragraph with front-loaded purpose, followed by usage and behavior details. Every sentence contributes value 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?

The description covers all essential aspects for a search tool: what it does, what it returns, parameter semantics, and behavioral details. No gaps given the absence of output schema.

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?

Despite 100% schema coverage, the description adds significant value: query example, limit usage guidance (3-5 for focus, higher for comprehensive), and projectId scope details (default current+global, admin requirement for 'all').

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 searches persistent memory with semantic+emotional ranking, but does not explicitly differentiate from similar sibling tools like 'remember' or 'forage'.

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 specific usage examples ('retrieve previously stored facts, decisions, preferences') and query examples, but does not state when not to use the tool or mention alternatives.

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

rememberA

Store information in persistent memory that survives across all sessions and machines. Memories are automatically classified by type (semantic, procedural, episodic) and importance. Use to save facts, preferences, decisions, context, or any information that should be recalled later. Behavior: stores the content with emotional analysis (PAD model), assigns importance score, updates circadian interaction tracking. Scoped to current project by default — use projectId="global" for cross-project memories like user preferences or business decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe information to remember. Can be any text: facts, decisions, preferences, code patterns, meeting notes, etc. Be descriptive — richer content enables better semantic recall later.
tagsNoOptional tags for categorization and filtering. Examples: ["architecture", "decision"], ["user-preference"], ["bug-fix", "auth"]
projectIdNoProject scope. Auto-detected from working directory if not set. Use "global" for memories that should be accessible from any project (e.g., user info, business decisions).

TDQS

A4/5.0
Behavior5/5

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

With no annotations, the description fully compensates by detailing internal behavior: emotional analysis (PAD model), importance scoring, and circadian tracking. This transparency about what happens during storage is exemplary.

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 (4-5 sentences), front-loaded with purpose, and efficiently covers types, behavior, and scoping without waste. Every sentence serves a purpose.

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 no output schema, the description adequately explains the storage process and persistence. It omits details on return values or confirmation, but overall it provides sufficient context for correct invocation.

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 good parameter descriptions. The description adds marginal value (e.g., 'richer content enables better semantic recall') but does not significantly enhance understanding beyond the schema. Baseline 3 is appropriate.

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 it stores information in persistent memory and lists use cases (facts, preferences, decisions, context). It differentiates from siblings by emphasizing storage versus retrieval (e.g., recall), but does not explicitly contrast with other writing or memory tools like absorb, which could cause confusion.

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 provides clear usage guidance ('Use to save facts, preferences...') and explains scoping via projectId. However, it lacks explicit when-not-to-use instructions or comparisons with sibling tools, leaving the agent to infer when to prefer this over alternatives.

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

research_exportA

Export the project as a markdown memo: question, findings (with sources + confidence), and open gaps. Use to send a brief to a teammate, paste into Notion, or feed into a downstream LLM as a project summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
formatNo"memo" only for now.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It clearly indicates a non-destructive export operation generating a markdown memo, but does not mention permissions, side effects, or whether the project must be in a certain state.

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

Conciseness5/5

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

Two concise, front-loaded sentences with no redundant information. Every word serves a purpose.

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

Completeness4/5

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

For a simple tool with no output schema and few parameters, the description covers output content and use cases. It could be more complete by detailing the exact markdown structure or format constraints, but overall it is adequate.

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 50% (format has a description). The description adds no further meaning to the parameters beyond what the schema provides; 'projectId' remains undefined and format is already explained.

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 'Export the project as a markdown memo' with specific content (question, findings, sources, confidence, gaps), clearly distinguishing it from sibling tools that add or manage individual research components.

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 concrete use cases: sending a brief to a teammate, pasting into Notion, or feeding into an LLM. It implies a summary export role but lacks explicit when-not-to-use guidance or alternatives like using research_finding_add for detailed data.

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

research_finding_addA

Record an atomic claim with its evidence into the project. Each finding has a source kind (arxiv|wiki|curated|web), an optional ref/url, a confidence 0-1, and free-text notes. Findings are the building blocks; export consolidates them into a memo.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
claimYes
sourceKindYes"arxiv" | "wiki" | "curated" | "web"
sourceRefNo
evidenceUrlNo
confidenceNo0-1, default 0.7.
notesNo

TDQS

A4.1/5.0
Behavior4/5

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

No annotations exist, so description must cover behavioral traits. It lists fields (sourceKind, optional ref/url, confidence, notes) and explains the role of findings in the workflow, but does not mention side effects, idempotency, or permissions. Adequate for a simple create 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?

Two sentences, front-loaded with purpose, each sentence 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 7 parameters (3 required) and no output schema, the description provides sufficient context: what fields to specify, the workflow (findings as building blocks, export for memo). Complete for a create tool of moderate complexity.

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 29% (only sourceKind and confidence described). Description adds context for sourceKind (enum values), sourceRef/evidenceUrl as optional, and notes as free-text, but does not describe projectId or claim in detail. Partially compensates for low coverage.

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 the tool records an atomic claim with evidence into a project. The verb 'record' and resource 'atomic claim with evidence' are specific. It distinguishes from sibling tools like research_export or research_gap_add by focusing on adding individual findings.

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?

Implies usage by describing findings as building blocks and mentioning export consolidates them into a memo, but lacks explicit guidance on when to use this vs alternatives (e.g., research_synthesize). No exclusions or when-not-to-use provided.

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

research_gap_addA

Flag an unresolved question — something you searched for but couldn't back up with evidence. Gaps are first-class: they keep your investigation honest and re-entry tools (next iteration) re-attempt them automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
questionYes
whyUnresolvedNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must bear the burden of behavioral disclosure. It reveals that gaps are first-class and automatically re-attempted, but omits details on side effects, permissions, error handling, or output behavior.

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 concise at two sentences, front-loading the core purpose. However, it could be more structured by listing parameters or using bullet points for clarity.

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 no output schema and moderate complexity (3 params, 2 required), the description is incomplete: it does not explain what the tool returns (e.g., success confirmation, ID) or handle error cases, leaving gaps in agent understanding.

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 schema has 3 parameters with 0% description coverage. The description provides context for 'question' and 'whyUnresolved' implicitly, but does not explicitly describe each parameter's meaning or constraints, leaving ambiguity for 'projectId' and 'whyUnresolved'.

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: to flag an unresolved question that couldn't be backed with evidence. It distinguishes itself from sibling tools by emphasizing that gaps are first-class and automatically re-attempted, making the purpose specific and unique.

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 implies when to use the tool (after searching without finding evidence) and mentions automatic re-attempts, but it lacks explicit when-not-to-use guidance or comparisons to alternatives like research_finding_add.

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

research_project_continueA

Resume context from a paused research project. Returns the central question, recent 50 findings (with their claims, sources, confidence), and all currently-open gaps. Use this BEFORE asking new questions in an existing project so you don't duplicate work.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the return data comprehensively, implying a read operation. However, it does not explicitly confirm non-destructiveness or mention authorization needs, leaving slight ambiguity about side effects.

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 action and key return details. Every phrase adds value with 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?

For a tool with one parameter and no output schema, the description covers the purpose, return structure, and usage timing sufficiently. It lacks error handling guidance but is otherwise complete for an agent's 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?

The single parameter 'projectId' is self-explanatory, but schema coverage is 0% and the description adds no additional meaning (e.g., format, source). It is adequate but does not compensate for the lack of 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 resumes context from a paused research project and specifies the exact return data (central question, 50 findings with details, open gaps). This distinguishes it from sibling tools like research_project_create or research_finding_add.

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 explicitly says to use this BEFORE asking new questions in an existing project to avoid duplication, providing clear usage context. It does not explicitly name alternatives but implies when not to use (e.g., for new projects).

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

research_project_createA

Create a persistent research project. Returns a project_id that you can pass to all subsequent research_* calls. Projects survive across sessions — open it days later with research_project_continue and you get every prior finding, hypothesis, and open gap. Depth controls how aggressively the synthesizer explores: overview (5 docs), standard (10 docs), deep (20+ docs with adversarial verification).

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoOwner user_id (matches memory userId).
nameYesShort project label.
questionYesThe central question to investigate.
depthNo"overview" | "standard" | "deep". Default "standard".

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses persistence across sessions, depth control with document counts, and that it returns a project_id. It could mention any limitations or authentication needs but is otherwise transparent.

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?

Three sentences with no wasted words. The key action and return value are front-loaded, and each sentence conveys essential 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?

Despite having no output schema, the description explicitly states the return value (project_id) and its role in subsequent calls. It covers all relevant aspects for a creation tool with four parameters.

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 significant value by explaining the depth parameter's effect (overview=5 docs, standard=10, deep=20+ with adversarial verification), which goes beyond the schema enum.

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 begins with a clear verb+resource ('Create a persistent research project') and distinguishes itself from siblings like research_project_continue and research_project_list by emphasizing persistence and the project_id return value.

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 that the returned project_id can be passed to subsequent research_* calls and details depth options. However, it does not explicitly state when not to use this tool or contrast it with alternatives like research_project_list.

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

research_project_listA

List all research projects for a user, with counts of findings and open gaps. Use to discover what investigations are already in progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNo

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions 'list all research projects for a user' but does not disclose whether it requires authentication, is read-only, supports pagination, or what happens when the optional 'userId' is omitted. This is insufficient for safe invocation.

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 with no fluff. The first sentence states the core action and output, and the second provides usage guidance. It is appropriately front-loaded and efficient.

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 no output schema, the description provides a reasonable outline of the return data (list of projects with counts). It covers the essential context for a list operation, though it could mention whether results are paginated or ordered. Overall, it is largely complete for the tool's simplicity.

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 schema has one optional parameter 'userId' with 0% description coverage. The description adds meaning by stating it retrieves projects 'for a user,' implying a filter. However, it does not specify that omitting userId likely defaults to the current user, nor does it clarify if this is a required filter for explicit user queries.

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 lists all research projects for a user, including counts of findings and open gaps. It distinguishes from sibling tools like 'research_project_create' (create) and 'research_finding_add' (add finding) by specifying the output and purpose.

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 'Use to discover what investigations are already in progress,' which provides clear context for when to use the tool. While it does not explicitly list when not to use or mention alternatives, the guidance is sufficient for an AI agent to infer appropriate usage.

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

research_synthesizeA

Run a hybrid search and synthesize the top-K results into a careful, citation-bearing analysis using a frontier LLM (Opus 4.7 by default). Output explicitly distinguishes well-supported claims from claims it cannot back up with the retrieved evidence. Logs the query into the project session log.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
queryYesThe research question for this synthesis pass.
topKNoHow many docs to feed to the LLM. Default 10, max 30.
modelNoOverride LLM model for this call. Defaults to CELIUMS_LLM_MODEL.

TDQS

A4/5.0
Behavior4/5

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

Given no annotations, the description provides good behavioral detail: uses Opus 4.7 by default, logs query, distinguishes supported claims. Missing potential side effects like cost or rate limits, but otherwise transparent.

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?

Three focused sentences with front-loaded main action. No unnecessary words. Efficiently communicates core behavior and key features.

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?

Covers main behavior, logging, and output distinction. Without output schema, the description adequately implies the return type is an analysis text. Could add error handling or time limits, but sufficient for most agents.

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 schema already covers 75% of parameters with descriptions. The description adds little beyond schema; for 'query' it says 'research question', which is similar to schema. 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?

The description clearly states the tool performs hybrid search and synthesis with citations, distinguishing it from siblings like research_search. The verb 'synthesize' and specific output details make the purpose unambiguous.

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 when to use (for a synthesis analysis), but does not explicitly contrast with alternatives like research_search or other tools. No guidance on when not to use or prerequisites.

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

senseA

Get personalized module recommendations based on a goal or task description. Uses keyword matching and category ranking (no AI inference). Faster than forage for broad exploration. Use when the user describes what they want to achieve and needs guidance on which modules to study. Behavior: analyzes the goal text, matches against module metadata, returns ranked suggestions grouped by relevance. Example: sense("I want to deploy a microservices app on Kubernetes with monitoring").

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesDescribe what you want to accomplish in natural language. Be descriptive for better recommendations. Example: "build a real-time chat app with WebSocket and React"

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description must be fully transparent. It describes the behavior: analyzes goal, matches metadata, returns ranked suggestions. It adds context beyond the schema, such as no AI inference. Minor missing details like no mention of authentication or rate limits, but overall 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?

The description is concise at four sentences, well-structured with purpose, usage context, behavioral explanation, and an example. No extraneous 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 the tool has one parameter, no output schema, and no annotations, the description is complete. It explains what it does, how it works, when to use it, and provides an example. All necessary 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 sole parameter 'goal' is fully described in the schema (100% coverage). The description adds an example but doesn't provide additional constraints or semantics beyond the schema. Baseline 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 purpose as getting module recommendations based on a goal, with specific verbs ('Get') and resource ('module recommendations'). It distinguishes from sibling 'forage' by noting it's faster for broad exploration, and clarifies it uses keyword matching not AI inference.

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 explicitly says when to use: 'when the user describes what they want to achieve and needs guidance on which modules to study.' It also contrasts with the sibling 'forage' for broad exploration, providing clear guidance on selection.

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

write_character_createA

Create or upsert a character. Voice sample is critical for continuity_check — it lets the editor detect when a character's dialogue drifts from their established voice. Pass voiceSample as a 100-300 word excerpt of how they speak.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
nameYes
roleNoprotagonist | antagonist | mentor | foil | minor
archetypeNo
voiceSampleNo100-300 word excerpt of how this character speaks.
arcSummaryNo
physicalDescriptionNo

TDQS

A3.6/5.0
Behavior2/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 that the tool is mutating ('create or upsert') and adds context about voice sample, but does not mention error conditions, required permissions, or side effects. More detail needed for a mutation tool.

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

Conciseness5/5

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

Two sentences: first clearly states the action, second provides critical context about the voiceSample parameter. No fluff, front-loaded with purpose.

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?

With 7 parameters and no output schema, the description is incomplete. It does not explain the upsert behavior (e.g., what determines an update vs. create), return value, or how to handle errors. Leaves significant gaps for the agent.

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 only 29% (2 out of 7 parameters have descriptions in schema). The description adds value for voiceSample by specifying its purpose and length requirement, but does not explain projectId, name, role, archetype, arcSummary, or physicalDescription 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 'Create or upsert a character' and provides a specific use case for the voiceSample parameter. It is distinct from sibling tools like write_scene_create or write_project_create.

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 implies when to use the tool (for creating/upserting characters) and emphasizes the importance of the voiceSample parameter for continuity_check. However, it does not explicitly state when not to use it or name alternatives.

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

write_continuity_checkA

Signature feature: structural continuity check using Opus 4.7. Loads the target scene, prior 20 scenes, all characters (with their secrets_known_at_chapter and voice samples), and worldbuilding rules. Outputs a JSON list of issues: secret-leak, description-drift, timeline conflict, worldbuilding violation, voice drift. Each issue includes severity, scene_position, description, and a suggested_fix. NO other writing tool does this — Sudowrite/Grammarly/ProWritingAid are line-by-line, this is structural.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdYesThe scene under review (must exist in the project).
projectIdYes
scopeChaptersNoHow many prior scenes to include as canonical context. Default 20.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It explains the loading process (target scene, prior 20 scenes, characters, worldbuilding) and output format (JSON list of issues with fields). It does not disclose side effects or performance, but for a read-only analysis tool, this is adequate. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise with three sentences. It front-loads the signature feature, lists inputs and outputs, and includes a comparative statement. Every sentence earns its place without 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 tool's complexity (3 parameters, no output schema, no annotations), the description covers inputs, outputs, and purpose. It could mention error handling or more detail on return format, but it is largely complete for an AI agent to understand and invoke 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 description coverage is 67% (sceneId and scopeChapters described). The description adds context by explaining that scopeChapters defaults to 20 and that the tool loads 'prior 20 scenes,' which aligns with the parameter. It does not explicitly explain projectId, but overall the description adds semantic 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 the tool performs a 'structural continuity check' and lists specific issue types it outputs. It distinguishes itself from sibling tools by emphasizing 'NO other writing tool does this — Sudowrite/Grammarly/ProWritingAid are line-by-line, this is structural.' The verb 'check' and resource 'continuity' are precise.

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 clear when-to-use guidance by contrasting with line-by-line tools. However, it does not explicitly state when not to use it or provide alternatives among sibling tools. The differentiation from external tools is strong but internal sibling context is absent.

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

write_exportA

Export the project as a markdown manuscript. Scenes are emitted in position order, grouped by chapter_id, with POV character and time markers as italic interstitials. Use as a clean preview or to ship into Notion / docx tooling later.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
formatNo"markdown" only for v0.1.

TDQS

A3.6/5.0
Behavior4/5

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

Describes output structure in detail (scenes ordered, grouped by chapter, with markers). No annotations, so description carries full burden, which it handles well.

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

Conciseness5/5

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

Two sentences, front-loaded with action and format, then details. No unnecessary words.

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?

Adequately covers output and usage for a simple export tool. Minor missing details on errors or return format, but sufficient for likely use cases.

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

Parameters2/5

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

Schema coverage 50% (format described). Description does not mention parameters, leaving projectId undefined. Does not add meaning beyond schema.

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?

Clearly states it exports a project as a markdown manuscript, with specific structural details. Differentiates from research_export by context, though not explicitly.

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?

Provides usage context: clean preview or for later import into other tools. Does not contrast with siblings or state 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.

write_project_createA

Create a writing project (novel, screenplay, long-form). Returns a project_id used by all other write_* tools. structureTemplate enables beat tracking against a known structure: three-act | save-the-cat | hero-journey | snowflake | free.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNo
titleYes
genreNo
premiseNo
structureTemplateNothree-act | save-the-cat | hero-journey | snowflake | free
wordTargetNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided. Description mentions return of project_id and structureTemplate usage, but lacks detail on side effects, idempotency, or error cases.

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

Conciseness4/5

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

Two sentences, front-loaded with purpose. No redundancy, but second sentence could be more concise as parameter info.

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?

Tool has 6 parameters and no output schema. Description doesn't explain return format, parameter constraints, or usage context (e.g., required title).

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

Parameters2/5

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

Schema coverage is low (17%). Description only adds meaning for structureTemplate; other parameters (userId, title, genre, premise, wordTarget) are not described beyond their names.

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 action (create), resource (writing project), and role as prerequisite for other write_* tools. Distinguishes from siblings like write_character_create.

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?

Explains when to use (create project) and implies necessity for other tools. No explicit when-not-to-use or alternatives, but clear context.

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

write_project_getA

Get full project state: metadata, all characters, scene count, total word count, and the 5 most recent scenes. Use to orient yourself when resuming work.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Discloses the tool returns metadata, all characters, scene count, word count, and 5 recent scenes. No side effects or destructive behavior implied. For a read-only retrieval tool without annotations, this is transparent and adequate.

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

Conciseness5/5

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

Two concise sentences with no filler. The first sentence lists contents, the second provides usage guidance. All information is front-loaded and earns its place.

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 simple single-parameter retrieval tool with no output schema, the description fully covers purpose, returned data, and usage context. No additional details are needed for an agent to select and invoke it correctly.

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

Parameters2/5

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

The description does not explain the projectId parameter beyond implying it identifies the project. With 0% schema coverage, the description should add details like format or constraints, which it omits.

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 the tool retrieves the full project state, listing specific components (metadata, characters, counts, recent scenes). Distinct from siblings like write_project_create or recall which focus on creation or memory.

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?

Explicitly advises 'Use to orient yourself when resuming work,' providing clear context for when to invoke. Does not mention when not to use or alternatives, but the guidance is helpful.

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

write_scene_createA

Insert a scene at a specific position. POV character + location + time_marker enable continuity_check. scene_goal/conflict/outcome are optional but recommended — they make the scene's purpose explicit and improve revision suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
chapterIdNo
positionYesOrder within the project (0-indexed).
povCharacterIdNo
locationIdNo
timeMarkerNoe.g. "Tuesday morning, day 12 of the journey".
sceneGoalNo
conflictNo
outcomeNo
beatIdTargetNoOutline beat this scene is meant to deliver.
contentNoThe scene prose itself.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions that certain fields enable continuity check but does not disclose side effects (e.g., does it shift other scenes?), expected output, authentication requirements, or error conditions. The behavioral disclosure is minimal.

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 with no wasted words. The first sentence front-loads the primary action, and the second adds contextual guidance. Every sentence serves a purpose.

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 complexity (11 parameters, no output schema, no annotations), the description is adequate but not thorough. It covers the tool's core purpose and key optional fields but lacks details on required parameters, expected return value, or behavior when position is invalid. It is sufficient for basic use but might leave gaps for complex scenarios.

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 only 36% (4 of 11 parameters have descriptions). The description adds semantic value by explaining that povCharacterId, locationId, and timeMarker together enable continuity check, and that sceneGoal, conflict, and outcome are optional but recommended. However, it does not explain projectId, chapterId, beatIdTarget, or content beyond what the schema provides.

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: 'Insert a scene at a specific position.' It identifies the resource (scene) and the context (position), and distinguishes it from sibling tools like `write_scene_update` by focusing on creation with a position parameter.

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 when to use optional fields (for continuity check and revision suggestions) but does not explicitly state when to use this tool versus alternatives like `write_scene_update`. No exclusion criteria or prerequisites are provided.

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

write_scene_updateB

Replace a scene's content. Automatically snapshots the previous version into write_revision_log so the writer can diff between revisions later. Bumps the version counter.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIdYes
contentYes

TDQS

B3.2/5.0
Behavior3/5

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

Discloses automatic snapshotting and version counter bumping, which are key side effects. However, with no annotations, it lacks details on permissions, failure modes, or reversibility.

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?

Three sentences, each adding value: purpose, snapshotting behavior, version bumping. No wasted words.

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?

Tool is simple with 2 params, but description omits return value and error conditions. Adequate but not comprehensive.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no additional meaning for sceneId or content beyond their names and types.

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 starts with 'Replace a scene's content.' which is a clear verb+resource. It distinguishes from write_scene_create and adds context about automatic snapshotting and version bumping.

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 explicit guidance on when to use vs sibling tools. Implies it is for updating existing scenes, but does not state prerequisites or compare to alternatives like write_scene_create.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updatesv1.2.5
    • Addedjournal_arc
    • Addedjournal_dialogue
    • Addedjournal_introspect
    • Addedjournal_recall
    • Addedjournal_write
    • Addedresearch_export
    • Addedresearch_finding_add
    • Addedresearch_gap_add
    • Addedresearch_project_continue
    • Addedresearch_project_create
    • Addedresearch_project_list
    • Addedresearch_search
    • Addedresearch_synthesize
    • Addedwrite_character_create
    • Addedwrite_continuity_check
    • Addedwrite_export
    • Addedwrite_project_create
    • Addedwrite_project_get
    • Addedwrite_scene_create
    • Addedwrite_scene_update
  2. 1 tool updatev1.2.1
    • Changedrecall1 field changed
      • changedInput schema / properties / projectId / description
        Previous value: -"Search specific project scope. Default: current project + global. Use \"all\" to search across every project. Use a specific project ID to search only that project."New value: +"Search specific project scope. Default: current project + global. projectId=\"all\" requires admin:cross_project scope. Use a specific project ID to search only that project."
  3. 5 tool updatesv1.0.1
    • Changedabsorb1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Module slug, e.g. \"react-mastery\""New value: +"Exact module slug (kebab-case). Get slugs from forage results. Examples: \"react-mastery\", \"kubernetes-hpa-guide\", \"owasp-top-10-checklist\""
    • Changedforage2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 10, max 50)"New value: +"Maximum number of modules to return. Default: 10, max: 50. Use lower values (3-5) for focused results, higher (20-50) for broad exploration."
      • changedInput schema / properties / query / description
        Previous value: -"Natural-language search query"New value: +"Natural-language search query describing the knowledge needed. Be specific for better results. Example: \"how to set up PostgreSQL replication\""
    • Changedrecall3 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 10, max 50)"New value: +"Maximum number of memories to return. Default: 10, max: 50. Use lower values (3-5) for focused recall, higher for comprehensive search."
      • changedInput schema / properties / projectId / description
        Previous value: -"Search specific project. Default: current + global. Use \"all\" to search everywhere."New value: +"Search specific project scope. Default: current project + global. Use \"all\" to search across every project. Use a specific project ID to search only that project."
      • changedInput schema / properties / query / description
        Previous value: -"What you want to recall (free text)"New value: +"What you want to recall, in natural language. Example: \"what database did we choose for the auth service\", \"user preferences for code style\", \"last architecture decision\""
    • Changedremember4 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"What to remember (any text)"New value: +"The information to remember. Can be any text: facts, decisions, preferences, code patterns, meeting notes, etc. Be descriptive — richer content enables better semantic recall later."
      • changedInput schema / properties / projectId / description
        Previous value: -"Project scope (auto-detected from cwd if not set). Use \"global\" for cross-project memories."New value: +"Project scope. Auto-detected from working directory if not set. Use \"global\" for memories that should be accessible from any project (e.g., user info, business decisions)."
      • changedInput schema / properties / tags / description
        Previous value: -"Optional tags for filtering"New value: +"Optional tags for categorization and filtering. Examples: [\"architecture\", \"decision\"], [\"user-preference\"], [\"bug-fix\", \"auth\"]"
      • addedInput schema / properties / tags / items
        Added value: +{
        +  "type": "string"
        +}
    • Changedsense1 field changed
      • changedInput schema / properties / goal / description
        Previous value: -"What you are trying to accomplish"New value: +"Describe what you want to accomplish in natural language. Be descriptive for better recommendations. Example: \"build a real-time chat app with WebSocket and React\""
  4. 6 tool updatesv1.0.0
    • First observedabsorb
    • First observedforage
    • First observedmap_network
    • First observedrecall
    • First observedremember
    • First observedsense

TDQS

A3.6/5.0

Scored across 26 tools

Disambiguation3/5

The tools are mostly distinct by domain (memory, journal, writing, research), but there is notable overlap between forage, sense, and research_search — all perform knowledge-base search with slightly different framing. Similarly, absorb and research_synthesize both retrieve and synthesize knowledge, and journal_recall vs recall could confuse an agent about which memory store to query.

Naming Consistency3/5

Naming is mixed: some tools follow verb_noun (journal_write, research_search, write_scene_create), but others use bare verbs (forage, absorb, sense, remember, recall) and one uses a noun_verb pattern (map_network). The write_* and research_* prefixes are consistent within their groups, but the overall set lacks a unified convention.

Tool Count3/5

26 tools is on the heavy side, but the server covers four distinct subdomains (memory, journal, writing, research), so each tool has a plausible role. The count feels borderline — a few tools could be consolidated (e.g., forage/sense/research_search) without losing capability.

Completeness4/5

The writing and research subdomains have solid lifecycle coverage: create/get/update/export for writing, and create/search/synthesize/export/continue for research. The memory and journal subdomains cover write/read well. Minor gaps: no tool to delete or update memories, no journal entry deletion, and no research project update/delete, but agents can work around these.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    F
    maintenance
    This project is based on the Knowledge Graph Memory Server from the MCP servers repository and retains its core functionality.
    44
    354
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to store, retrieve, and manage contextual knowledge across sessions using semantic search with PostgreSQL and vector embeddings. Supports memory relationships, clustering, multi-agent isolation, and intelligent caching for persistent conversational context.
    17 npm
    49
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with persistent, searchable memory that survives across conversations using semantic search, temporal versioning, and smart organization. Enables long-term context retention and cross-session continuity for AI assistants.
    14
    -