Skip to main content
Glama

Keepygaga

English | 简体中文

A small, deliberate core memory shared by every coding agent.

AI agents do not get better by remembering everything. If every conversation, temporary state, and project detail is pushed into long-term memory, useful facts are buried under stale and irrelevant context. Memory without selection is noise.

Keepygaga keeps only a small set of durable facts that remain useful across tasks: who the user is, how they want an Agent to work, and a few ongoing topics, projects, responsibilities, or relationships. Temporary state stays in the current conversation or its direct source, such as a calendar, task manager, project documentation, issue tracker, or Git history. A fact enters core memory only when it has been deliberately judged useful across tasks.

That carefully selected core memory belongs to the user and follows them across Codex, Claude Code, WorkBuddy, Grok, Hermes, and Antigravity CLI instead of being trapped in separate host silos. Its source of truth is readable Markdown in one private Memory Root, preferably inside an Obsidian vault; any Markdown editor remains compatible.

The product has three deliberately separate surfaces:

  • Obsidian or another Markdown editor is where people inspect, correct, and organize memory.

  • MCP, Hooks, and the Agent Contract let agents read and update that memory under explicit constraints.

  • The keepygaga CLI is a thin installation and operations control plane for host wiring, status, diagnostics, repair, upgrades, and uninstall. It is not a daily memory browser or editor.

Keepygaga ships the complete runtime: an eight-tool MCP server, a concise global Agent Contract, built-in cross-host Hooks, and the CLI control plane. It does not require a database, embeddings, a source checkout, or an external Hook runtime. Obsidian is the recommended human interface, not a runtime dependency.

Core memory contains profile.md, preferences.md, and direct pages below topics/, areas/, and people/. Ongoing projects share the optional canonical index areas/projects.md, created with its first project Fact: one Fact per project holds a brief, its canonical Authority, and its latest verified integrated outcome and release status when available, with later changes replacing that Fact and no major-milestone threshold. For Git projects, verify the canonical remote primary branch; record a published version only when a published Release points to a tag commit containing that outcome. Complete history, terminology, architecture, operating guides, decisions, and current state remain in the repository or another direct project source.

Host-native memories can continue to own host-specific conversation recall and project learning. Keepygaga owns the small set of stable user facts that should follow the user across hosts. A durable instruction admitted to source selection has exactly two possible owners: preferences.md when every connected Agent should follow it, or one host's effective global-rules entry when only that Agent should. Prose style and code style do not determine ownership by themselves. When the user has not specified the intended scope, the Agent must ask first, and one meaning may have only one source. Project rules stay in the project Authority and do not enter this choice.

The public MCP surface is exactly list, read, create, add, update, move, rename, and delete.

Session bootstrap injects only profile.md, preferences.md, a shared routing rule, and descriptions of the three dynamic scopes. Agents treat those descriptions as first-stage semantic routes: when a task depends on covered information that the current request or a live direct source does not already provide, they call list for that scope and select pages from the returned path, description, and aliases before reading them. New or semantically updated Facts receive a Store-owned local date suffix; existing undated Facts remain readable and upgrades do not rewrite the Memory Root.

Contract 3 users with existing project pages should follow the project-index migration before their next project-memory write under the current Agent Contract.

Install

Requirements: Python 3.12+ and uv.

Give the Agent host you are currently using this one sentence:

Quickly install or update Keepygaga for the Agent you are running in now from the latest official Release at https://github.com/TimWongUp/keepygaga: automatically choose install, update, current-host repair, or no action; preserve existing configuration and memory; ask me only for first-time initialization, a conflict, or a possible overwrite; then report the result and any restart requirement.

The Agent Fast Install To-do is the authoritative procedure for this path. It checks the installed version before downloading, limits work to the selected lifecycle branch and current Agent, and reuses existing data. The heavier Home Page source migration is loaded only for first initialization or a concrete duplicate. Host-native memory remains unchanged; when requested, the Agent supplies current official host documentation for user-managed configuration.

Manual installation

Download the keepygaga-X.Y.Z-py3-none-any.whl asset and SHA256SUMS from the same latest GitHub Release to private, non-symlinked paths. Immediately before installation, verify the exact wheel's SHA-256 entry and execute that same absolute path, replacing X.Y.Z below with the release version:

uv tool install /absolute/private/path/keepygaga-X.Y.Z-py3-none-any.whl
uv tool update-shell

Restart the terminal so the tool directory is on PATH, then run keepygaga install.

The checksum detects corruption or an asset mismatch. It is not a signature, provenance proof, independent publisher authentication, or verification of dependencies resolved from the package index.

Interactive installation first offers a Memory Root path, then detects available hosts without selecting them on the user's behalf. Point it at an existing agents-memory tree to connect another Agent to the same memory. Once configured, later installs reuse that root automatically. Automation must name every target explicitly:

keepygaga install --yes --host codex --host claude-code

Supported adapters are Codex, Claude Code, WorkBuddy, Grok, Hermes, and Antigravity CLI. Each adapter manages only its keepygaga MCP registration, the Keepygaga-owned Agent Contract block, and Keepygaga-owned Hook entries. Unrelated host configuration is preserved.

The default configuration and memory paths are platform-native. To reuse an existing private memory tree non-interactively, pass --memory-root during the first install. Do not place the memory tree in a public or automatically published directory.

New installations include five optional memory-capacity settings with the current defaults and adjustment notes. Existing configuration files are never rewritten. Edit the live config.toml; the next MCP call reloads these Store-only limits without requiring a schema refresh:

[memory.limits]
# Raise for richer profile/preferences; lower to reduce baseline context.
fixed_page_chars = 2000
# Raise for fewer, larger routed pages; lower to encourage earlier splitting.
dynamic_page_chars = 5000
# Raise to allow more topic pages; lowering never deletes existing pages.
topics_pages = 50
# Raise to allow more area pages; lowering never deletes existing pages.
areas_pages = 50
# Raise to allow more people pages; lowering never deletes existing pages.
people_pages = 100

Every value must be a positive integer. Lower limits report existing excess through Doctor and constrain later growth; they do not delete or rewrite memory. The bounded repair input is derived as twice dynamic_page_chars.

Related MCP server: aurum-recall

Operate

keepygaga status
keepygaga status --latest-version vX.Y.Z --host codex
keepygaga repair --yes
keepygaga doctor --json
keepygaga uninstall --yes

status treats the install-state file as discovery data only and reports when live host verification is still required. With the latest official release tag and current host, it returns a read-only lifecycle action: update, initialize, activate, repair, no_op, or manual_review. A missing launcher is the separate clean-install case. repair reconciles recorded hosts from their current configuration. uninstall removes only Keepygaga host wiring; it preserves the configuration and memory tree.

For a current-host-only update, download the newer wheel and matching SHA256SUMS, rehash the exact absolute wheel path, set UV_TOOL_DIR to the lifecycle.tool_root returned by planned status for that command, run uv tool install --force /absolute/private/path/keepygaga-X.Y.Z-py3-none-any.whl, then run keepygaga install --yes --host HOST. Run keepygaga repair --yes instead only when you intentionally want to reconcile every recorded host.

Advanced deterministic host commands remain available as keepygaga host setup|uninstall HOST.

How integration works

  • keepygaga-mcp is the stable MCP launcher used by host registrations.

  • The short managed Agent Contract contains only durable safety and routing rules.

  • The full read, convergence, mutation, conflict, and receipt protocol is delivered through negotiated MCP server instructions (modern discovery or the legacy initialize handshake).

  • Built-in Context Bootstrap and stateless Memory Route reminders are projected through each host's supported native events. Routing reminders include completion checks; there is no PostToolUse closeout Hook. Unsupported surfaces use documented fallbacks; Grok uses the managed Agent Contract for memory guidance.

  • Application, Agent Contract, Hook protocol, installer state, and memory schema versions evolve independently.

Configuration-level tests prove projection, preservation, idempotency, and failure boundaries. A host is live-verified only after its real client or official diagnostic confirms the keepygaga registration and all eight tools.

Development

uv sync
uv run pytest -q
uv run ruff check .
uv run pyright
uv run python scripts/smoke_mcp_server.py
uv build
uv run python scripts/check_distribution.py dist/*

The keepygaga-knowledge sibling project is separate and is neither packaged nor imported by Keepygaga. See Architecture, Operations, and Contributing.

Acknowledgements

Keepygaga's core memory design was inspired by Claude Code's memory system.

Thanks also to the Claude Code team for their pioneering work on AI memory.

Security and license

Memory files are trusted local input and may contain personal data. Keep the memory root private, review changes before committing them anywhere, and report vulnerabilities through GitHub private vulnerability reporting.

MIT licensed. See LICENSE.

Available Tools

8 tools
addA
Destructive

Add independent Facts and optionally replace the page description using its latest Page Snapshot. Group Facts for one page in one operation. On applied, reuse returned Page Snapshots and receipts; do not verify with read or list.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesFact additions validated as one batch; each path must be unique.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false; the description confirms this by saying the page description may be 'replace[d]'. It adds meaningful context beyond annotations: the operation is snapshot-versioned ('using its latest Page Snapshot'), batch-validated, and returns snapshots/receipts that should be reused rather than verified via read/list — a workflow contract the annotations cannot express.

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 earning its place: core purpose, batching rule, and post-apply workflow. The main function is front-loaded in sentence one, and there is zero filler or repetition of schema content.

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 moderately complex batch-write tool, the combination is complete: a rich 100%-coverage schema documents every parameter, annotations cover the safety profile, an output schema exists, and the description supplies the missing operational nuance (snapshot provenance, no-verify rule, grouping). The only small gap is that the description never explains where the initial Page Snapshot comes from, though the schema's if_version description partially covers this.

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 the schema fully documents operations, path, if_version, facts, basis, content, and description. The description adds only marginal value by linking 'latest Page Snapshot' to the if_version parameter and reinforcing the batching semantics of operations. At 100% coverage the baseline of 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 states a specific verb+resource: 'Add independent Facts' to a page, with a secondary behavior of optionally replacing the page description. This clearly separates it from read/list in intent. However, it does not explicitly distinguish itself from the closely related mutation siblings create and update — the differentiation is implied by the word 'Add' rather than stated.

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 gives operational guidance: 'Group Facts for one page in one operation' (batching instruction) and 'do not verify with read or list' (an explicit when-not for named alternatives). But it lacks selection criteria for the primary choice among mutation siblings — an agent is not told when to choose add over create or update for adding facts vs. modifying existing content.

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

createA

Create new dynamic pages after full-batch validation. On applied, reuse returned Page Snapshots and receipts; do not call read or list solely to verify success.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesPage creations validated as one batch; repeated paths are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations are mostly negative flags and provide little behavioral context. The description adds meaningful behavior: full-batch validation, applied-mode side effects, and a prohibition on verification reads. It does not describe failure or partial-failure behavior, but the added context is valuable.

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 with no filler. The first scopes the action, and the second provides the most important post-call behavior and an explicit exclusion of read/list verification.

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?

With a rich input schema and an output schema available, the description covers the key operational context: batch validation, snapshot/receipt reuse, and not re-reading to verify. Minor gaps are the undefined 'dynamic pages' term and lack of failure behavior, but they do not block 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?

The only parameter, operations, is fully documented in the schema including CreateOperation fields, constraints, and repeated-path rejection. The description adds no parameter-level detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Create new dynamic pages after full-batch validation.' The batch behavior is clear, but 'dynamic pages' is not defined and the sibling 'add' is not explicitly differentiated, so it does not earn a 5.

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 explicit post-call guidance: reuse returned Page Snapshots and receipts, and do not call read or list solely to verify success. This is strong when-not/alternative guidance, though it does not clarify when create should be chosen over the sibling add.

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

deleteA
Destructive

Delete exact Facts with an optional page description, or delete dynamic pages, only after explicit current-turn user authorization. On applied, reuse surviving Page Snapshots and receipts; do not verify with read or list.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesAuthorized exact deletions; each path must be unique.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as destructive, but the description adds substantial behavioral context: the authorization prerequisite, the two distinct delete targets, and the unusual post-apply instruction to reuse surviving Page Snapshots and receipts rather than re-verifying. This goes well beyond the structured annotation hints.

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 tight sentences with no filler. The core action and authorization gate are front-loaded, and the post-apply guidance about reuse and non-verification earns its place by conveying critical workflow details.

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 destructive write operation with a detailed schema, annotations, and output schema, the description supplies the necessary prerequisites, acceptable targets, and post-apply behavior. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with rich per-property explanations for path, if_version, target, authorization, and FactSelector. The description adds only high-level context such as optional page description and exact facts, which is useful but not necessary since the schema already documents all parameters thoroughly.

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

Purpose5/5

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

The description opens with a precise verb and resources: 'Delete exact Facts with an optional page description, or delete dynamic pages.' This clearly distinguishes the tool from siblings like read, list, move, and update, and leaves no doubt about what operation it performs.

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 states the required condition: 'only after explicit current-turn user authorization.' It also gives direct behavioral guidance by saying 'do not verify with read or list,' which steers the agent away from sibling tools and clarifies the expected workflow after deletion.

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

listA
Read-onlyIdempotent

Return one complete live topics, areas, or people Route Catalog. No search, matching, pagination, Facts, or write versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/destructive behavior. The description adds useful traits beyond annotations: it returns a 'complete' and 'live' snapshot, and explicitly rules out search, matching, pagination, Facts, and write variants. This is meaningful addition, though it could disclose response size or performance behavior in more detail.

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 one sentence with the primary action front-loaded and the exclusions packed into a short, scannable list. Every clause earns its place; there is no filler or redundant restating of the tool name.

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?

With an output schema present and a single enum parameter, the description covers the key operational constraints: complete return, live data, no pagination/search/write behavior. It is slightly incomplete in not explaining what a 'Route Catalog' is or what 'Facts' means, but that does not block a competent agent from invoking list 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 schema has no parameter descriptions (0% coverage), so the description must compensate. The description does repeat the three scope choices from the enum and relates them to the Route Catalog, but it adds little semantic detail beyond the enum values themselves. For a single required enum parameter this is adequate but not rich.

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 uses a specific verb (Return) and resource (topics, areas, or people Route Catalog), and the scope enum makes the target resource concrete. It does not, however, name the sibling 'read' tool or explain the difference between listing the full catalog and reading a single entry, so sibling differentiation is only partial.

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 phrase 'No search, matching, pagination, Facts, or write versions' gives clear when-not-to-use guidance and implies that other sibling tools handle those operations. It stops short of naming those alternatives explicitly, so an agent must infer which sibling to switch to for search or single-item reads.

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

moveA
Destructive

Move exact Facts and optionally replace source or existing-destination descriptions, or atomically create a bounded new destination. Preserve Fact dates and leave at least one source Fact. On applied, reuse returned Page Snapshots and receipts; do not verify with read or list.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesExact Fact moves validated as one batch. Use one operation per disjoint source/destination pair and include all Facts for that pair in facts; every page path may appear only once across the batch.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses atomic creation, preservation of Fact dates, the invariant that at least one source Fact must remain, and the side-effect protocol to reuse returned Page Snapshots and receipts instead of re-reading. These are substantive behavioral traits an agent could not infer from the annotations alone.

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 dense sentences front-load the core action and then pack the critical post-conditions and validation guidance. Every clause earns its place: the operation scope, invariants, and the explicit don't-verify instructions. No filler or redundant restating of schema fields.

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

Completeness5/5

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

For a tool with a complex oneOf operation schema and a nested facts array, the description covers the main behavioral caveats (atomicity, source preservation, date preservation, no post-verification) while the rich input schema covers structural details. Since an output schema exists, the description need not explain return values, and nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline applies and the schema already documents operations, facts, paths, versions, aliases, and descriptions. The description only adds high-level constraints like bounded new destination and preserving dates, without detailing individual parameters. This is sufficient, but it does not add much 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 opening clause 'Move exact Facts' names the verb and resource immediately, and the two follow-up options (replace source/existing-destination descriptions, or atomically create a bounded new destination) delineate the operation's scope against create/update/rename. It also explicitly distances itself from siblings read/list by instructing the agent not to verify with them after apply.

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 gives clear context for when move is appropriate: moving exact Facts, optionally replacing descriptions, or creating a bounded destination. It explicitly tells the agent what not to do afterwards ('do not verify with read or list'), which is a direct usage exclusion, though it does not compare against update/rename in general terms.

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

readA
Read-onlyIdempotent

Use before mutation unless current Page Snapshots are already available. Read unique canonical paths together; returned files contain Facts, opaque write versions, and capacity signals.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesUnique canonical page paths from the current Route Catalog.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: reads are batched ('together'), and results contain 'Facts, opaque write versions, and capacity signals.' The annotations already cover read-only and idempotent safety, so the description enhances rather than repeats them.

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 the most critical usage guidance, followed by return-content context. Every sentence earns its place and there is no redundant restating of the schema or annotations.

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?

With a rich output schema, detailed annotations, and a single well-documented parameter, the description covers the essential decisions: when to call, how to call, and what to expect. The only minor gap is that 'Page Snapshots' is not expanded, but it is likely domain-standard enough for the intended 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?

The input schema already describes the 'paths' parameter with 100% coverage, including uniqueness and canonical path requirements. The description adds only a mild batch-hint with 'together,' so it does not significantly expand parameter semantics beyond the schema baseline.

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

Purpose4/5

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

The description states a clear verb+resource action: 'Read unique canonical paths together.' It also clarifies what returned files contain. However, it does not explicitly differentiate itself from sibling 'list', so the agent must infer the distinction between reading specific paths and listing the catalog.

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

Usage Guidelines4/5

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

'Use before mutation unless current Page Snapshots are already available' gives explicit when-to-use guidance and names the condition under which it can be skipped. It does not explicitly state when alternatives like list should be preferred, but the usage context is clear.

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

renameA
Destructive

Rename dynamic pages using latest Page Snapshots, one operation per page. On applied, reuse returned Page Snapshots and receipts; do not verify with read or list.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesDynamic page renames; every old and new path must be unique.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as destructive and non-idempotent, and the description meaningfully adds behavioral guidance beyond them: reuse returned Page Snapshots and receipts, and avoid read/list verification. This is exactly the kind of operational nuance an agent needs and cannot infer from the schema alone.

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

Conciseness5/5

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

Two compact sentences with no filler. The purpose is front-loaded, and the second sentence delivers critical post-action guidance. Every clause earns its place.

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 annotations, rich input schema, and output schema, the description covers the essential contract: what the tool does, the snapshot requirement, per-page limits, and post-call behavior. It could slightly improve by contrasting with the 'move' sibling, but nothing critical is missing.

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 the baseline is 3. The description adds useful semantic context by saying 'one operation per page' and connecting the operation to 'latest Page Snapshots,' which clarifies how to construct operations and use if_version, though the individual parameter details are already well documented in 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 a specific action ('Rename dynamic pages') and the resource type, with a distinguishing mechanism ('using latest Page Snapshots'). It also imposes a clear scope ('one operation per page'), making the tool's 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 Guidelines4/5

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

The description gives clear operational context: use the latest Page Snapshots, and after a successful rename do not verify via read or list. It does not explicitly compare this tool to siblings like move or update, so it falls short of a full when-to-use-vs-alternatives explanation.

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

updateA
Destructive

Replace an exact Fact with an optional page description, update page metadata alone, or mechanically repair a repairable page using its latest version. On applied, reuse returned Page Snapshots and receipts; do not verify with read or list.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesExact updates validated as one batch; each path must be unique.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description adds behavior beyond the destructiveHint annotation: replacements are exact and version-based, repair is mechanical, and returned receipts/snapshots are authoritative so read/list verification is discouraged. It avoids contradicting the annotation set.

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 dense sentences with no filler. The first sentence front-loads the three operation modes and the second adds a concise workflow directive. Every clause 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?

The description orients the agent to all three operation types and the post-invocation behavior, while the rich schema and output schema cover parameter detail and return values. No critical calling information is missing for an agent to invoke update 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?

Schema description coverage is 100%, so the schema already documents parameters and operation discriminators in detail. The description reinforces 'exact Fact', 'latest version', and optional description, but adds no new parameter-level constraints; 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 names specific operations and resources: replacing an exact Fact, updating page metadata, and mechanically repairing a page. This clearly separates the tool's three target modes and distinguishes it from generic sibling names like create, rename, or delete.

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 gives clear operational context: updates target existing exact Facts/page metadata, and after success the agent should reuse returned Page Snapshots and receipts rather than verify with read or list. It does not explicitly contrast update with create/add/rename/delete, but the post-invocation guidance and mode list make the intended usage fairly clear.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.7.2
    • Changedadd1 field changed
      • addedInput schema / $defs / AddOperation / properties / description
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Replacement page description to apply with the Fact addition.",
        +  "title": "Description"
        +}
    • Changeddelete1 field changed
      • addedInput schema / $defs / DeleteFactOperation / properties / description
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Replacement page description to apply with the Fact deletion.",
        +  "title": "Description"
        +}
    • Changedmove4 fields changed
      • changedInput schema / $defs / MoveOperation / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "aliases": {
        -        "type": "null"
        -      },
        -      "description": {
        -        "type": "null"
        -      },
        -      "destination_path": {
        -        "type": "string"
        -      },
        -      "destination_version": {
        -        "type": "string"
        -      },
        -      "new_path": {
        -        "type": "null"
        -      }
        -    },
        -    "required": [
        -      "destination_path",
        -      "destination_version"
        -    ]
        -  },
        -  {
        -    "properties": {
        -      "aliases": {
        -        "type": "array"
        -      },
        -      "description": {
        -        "type": "string"
        -      },
        -      "destination_path": {
        -        "type": "null"
        -      },
        -      "destination_version": {
        -        "type": "null"
        -      },
        -      "new_path": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "new_path",
        -      "description",
        -      "aliases"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "aliases": {
        +        "type": "null"
        +      },
        +      "destination_path": {
        +        "type": "string"
        +      },
        +      "destination_version": {
        +        "type": "string"
        +      },
        +      "new_path": {
        +        "type": "null"
        +      }
        +    },
        +    "required": [
        +      "destination_path",
        +      "destination_version"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "aliases": {
        +        "type": "array"
        +      },
        +      "description": {
        +        "type": "string"
        +      },
        +      "destination_path": {
        +        "type": "null"
        +      },
        +      "destination_version": {
        +        "type": "null"
        +      },
        +      "new_path": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "new_path",
        +      "description",
        +      "aliases"
        +    ]
        +  }
        +]
      • addedInput schema / $defs / MoveOperation / properties / aliases / description
        Added value: +"Required initial aliases for a new destination; omit for an existing destination and update them separately with target=page."
      • addedInput schema / $defs / MoveOperation / properties / description / description
        Added value: +"Replacement description for an existing destination or required initial description for a new destination."
      • addedInput schema / $defs / MoveOperation / properties / source_description
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Replacement source page description to apply with the Fact move.",
        +  "title": "Source Description"
        +}
    • Changedupdate1 field changed
      • addedInput schema / $defs / UpdateFactOperation / properties / description
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Replacement page description to apply with the Fact update.",
        +  "title": "Description"
        +}
  2. 8 tool updatesv0.7.0
    • Changedadd4 fields changed
      • changedInput schema / $defs / AddOperation / properties / facts / maxItems
        Previous value: -50New value: +30
      • changedInput schema / $defs / Fact / properties / basis / description
        Previous value: -"Evidence basis: stated for the user's explicit statement; observed only where the Agent Contract permits a repeated behavioral observation."New value: +"Evidence basis: stated for the user's explicit statement; observed for Agent derivation or inference from current visible material."
      • changedInput schema / $defs / Fact / properties / content / maxLength
        Previous value: -4096New value: +800
      • changedInput schema / properties / operations / maxItems
        Previous value: -20New value: +15
    • Changedcreate6 fields changed
      • changedInput schema / $defs / CreateOperation / properties / aliases / maxItems
        Previous value: -8New value: +6
      • addedInput schema / $defs / CreateOperation / properties / description / maxLength
        Added value: +80
      • changedInput schema / $defs / CreateOperation / properties / facts / maxItems
        Previous value: -50New value: +30
      • changedInput schema / $defs / Fact / properties / basis / description
        Previous value: -"Evidence basis: stated for the user's explicit statement; observed only where the Agent Contract permits a repeated behavioral observation."New value: +"Evidence basis: stated for the user's explicit statement; observed for Agent derivation or inference from current visible material."
      • changedInput schema / $defs / Fact / properties / content / maxLength
        Previous value: -4096New value: +800
      • changedInput schema / properties / operations / maxItems
        Previous value: -20New value: +15
    • Changeddelete4 fields changed
      • changedInput schema / $defs / DeleteFactOperation / properties / fact / $ref
        Previous value: -"#/$defs/Fact"New value: +"#/$defs/FactSelector"
      • removedInput schema / $defs / Fact
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "basis": {
        -      "description": "Evidence basis: stated for the user's explicit statement; observed only where the Agent Contract permits a repeated behavioral observation.",
        -      "enum": [
        -        "stated",
        -        "observed"
        -      ],
        -      "title": "Basis",
        -      "type": "string"
        -    },
        -    "content": {
        -      "description": "One complete, independently maintainable, single-line assertion.",
        -      "maxLength": 4096,
        -      "title": "Content",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "basis",
        -    "content"
        -  ],
        -  "title": "Fact",
        -  "type": "object"
        -}
      • addedInput schema / $defs / FactSelector
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "basis": {
        +      "description": "Evidence basis: stated for the user's explicit statement; observed for Agent derivation or inference from current visible material.",
        +      "enum": [
        +        "stated",
        +        "observed"
        +      ],
        +      "title": "Basis",
        +      "type": "string"
        +    },
        +    "content": {
        +      "description": "Exact basis and content copied from an existing Page Snapshot.",
        +      "maxLength": 4096,
        +      "title": "Content",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "basis",
        +    "content"
        +  ],
        +  "title": "FactSelector",
        +  "type": "object"
        +}
      • changedInput schema / properties / operations / maxItems
        Previous value: -20New value: +15
    • Changedlist2 fields changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "enum": [
        +    "topics",
        +    "areas",
        +    "people"
        +  ],
        +  "title": "Scope",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "scope"
        +]
    • Changedmove18 fields changed
      • removedInput schema / $defs / Fact
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "basis": {
        -      "description": "Evidence basis: stated for the user's explicit statement; observed only where the Agent Contract permits a repeated behavioral observation.",
        -      "enum": [
        -        "stated",
        -        "observed"
        -      ],
        -      "title": "Basis",
        -      "type": "string"
        -    },
        -    "content": {
        -      "description": "One complete, independently maintainable, single-line assertion.",
        -      "maxLength": 4096,
        -      "title": "Content",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "basis",
        -    "content"
        -  ],
        -  "title": "Fact",
        -  "type": "object"
        -}
      • addedInput schema / $defs / FactSelector
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "basis": {
        +      "description": "Evidence basis: stated for the user's explicit statement; observed for Agent derivation or inference from current visible material.",
        +      "enum": [
        +        "stated",
        +        "observed"
        +      ],
        +      "title": "Basis",
        +      "type": "string"
        +    },
        +    "content": {
        +      "description": "Exact basis and content copied from an existing Page Snapshot.",
        +      "maxLength": 4096,
        +      "title": "Content",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "basis",
        +    "content"
        +  ],
        +  "title": "FactSelector",
        +  "type": "object"
        +}
      • addedInput schema / $defs / MoveOperation / oneOf
        Added value: +[
        +  {
        +    "properties": {
        +      "aliases": {
        +        "type": "null"
        +      },
        +      "description": {
        +        "type": "null"
        +      },
        +      "destination_path": {
        +        "type": "string"
        +      },
        +      "destination_version": {
        +        "type": "string"
        +      },
        +      "new_path": {
        +        "type": "null"
        +      }
        +    },
        +    "required": [
        +      "destination_path",
        +      "destination_version"
        +    ]
        +  },
        +  {
        +    "properties": {
        +      "aliases": {
        +        "type": "array"
        +      },
        +      "description": {
        +        "type": "string"
        +      },
        +      "destination_path": {
        +        "type": "null"
        +      },
        +      "destination_version": {
        +        "type": "null"
        +      },
        +      "new_path": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "new_path",
        +      "description",
        +      "aliases"
        +    ]
        +  }
        +]
      • addedInput schema / $defs / MoveOperation / properties / aliases
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "maxItems": 6,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Aliases"
        +}
      • addedInput schema / $defs / MoveOperation / properties / description
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Description"
        +}
      • addedInput schema / $defs / MoveOperation / properties / destination_path / anyOf
        Added value: +[
        +  {
        +    "description": "Canonical existing page path from the current Route Catalog.",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / MoveOperation / properties / destination_path / default
        Added value: +null
      • removedInput schema / $defs / MoveOperation / properties / destination_path / description
        Removed value: -"Canonical existing page path from the current Route Catalog."
      • removedInput schema / $defs / MoveOperation / properties / destination_path / type
        Removed value: -"string"
      • addedInput schema / $defs / MoveOperation / properties / destination_version / anyOf
        Added value: +[
        +  {
        +    "description": "Opaque version from the latest Page Snapshot of this page; pass unchanged.",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / MoveOperation / properties / destination_version / default
        Added value: +null
      • removedInput schema / $defs / MoveOperation / properties / destination_version / description
        Removed value: -"Opaque version from the latest Page Snapshot of this page; pass unchanged."
      • removedInput schema / $defs / MoveOperation / properties / destination_version / type
        Removed value: -"string"
      • changedInput schema / $defs / MoveOperation / properties / facts / items / $ref
        Previous value: -"#/$defs/Fact"New value: +"#/$defs/FactSelector"
      • changedInput schema / $defs / MoveOperation / properties / facts / maxItems
        Previous value: -50New value: +30
      • addedInput schema / $defs / MoveOperation / properties / new_path
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "New direct topics/, areas/, or people/ Markdown path using a canonical slug.",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "New Path"
        +}
      • changedInput schema / $defs / MoveOperation / required
        Previous value: -[
        -  "source_path",
        -  "source_version",
        -  "destination_path",
        -  "destination_version",
        -  "facts"
        -]New value: +[
        +  "source_path",
        +  "source_version",
        +  "facts"
        +]
      • changedInput schema / properties / operations / maxItems
        Previous value: -20New value: +15
    • Changedread1 field changed
      • changedInput schema / properties / paths / maxItems
        Previous value: -20New value: +15
    • Changedrename1 field changed
      • changedInput schema / properties / operations / maxItems
        Previous value: -20New value: +15
    • Changedupdate10 fields changed
      • changedInput schema / $defs / Fact / properties / basis / description
        Previous value: -"Evidence basis: stated for the user's explicit statement; observed only where the Agent Contract permits a repeated behavioral observation."New value: +"Evidence basis: stated for the user's explicit statement; observed for Agent derivation or inference from current visible material."
      • changedInput schema / $defs / Fact / properties / content / maxLength
        Previous value: -4096New value: +800
      • addedInput schema / $defs / FactSelector
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "basis": {
        +      "description": "Evidence basis: stated for the user's explicit statement; observed for Agent derivation or inference from current visible material.",
        +      "enum": [
        +        "stated",
        +        "observed"
        +      ],
        +      "title": "Basis",
        +      "type": "string"
        +    },
        +    "content": {
        +      "description": "Exact basis and content copied from an existing Page Snapshot.",
        +      "maxLength": 4096,
        +      "title": "Content",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "basis",
        +    "content"
        +  ],
        +  "title": "FactSelector",
        +  "type": "object"
        +}
      • addedInput schema / $defs / RepairPageOperation
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "if_version": {
        +      "description": "Opaque version from the latest Page Snapshot of this page; pass unchanged.",
        +      "title": "If Version",
        +      "type": "string"
        +    },
        +    "path": {
        +      "description": "Canonical existing page path from the current Route Catalog.",
        +      "title": "Path",
        +      "type": "string"
        +    },
        +    "target": {
        +      "const": "repair",
        +      "description": "Mechanically canonicalize one repairable page without semantic edits.",
        +      "title": "Target",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "if_version",
        +    "target"
        +  ],
        +  "title": "RepairPageOperation",
        +  "type": "object"
        +}
      • changedInput schema / $defs / UpdateFactOperation / properties / old_fact / $ref
        Previous value: -"#/$defs/Fact"New value: +"#/$defs/FactSelector"
      • changedInput schema / $defs / UpdatePageOperation / properties / aliases / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "maxItems": 8,
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 6,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / UpdatePageOperation / properties / description / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 80,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / operations / items / discriminator / mapping / repair
        Added value: +"#/$defs/RepairPageOperation"
      • changedInput schema / properties / operations / items / oneOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/UpdateFactOperation"
        -  },
        -  {
        -    "$ref": "#/$defs/UpdatePageOperation"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/UpdateFactOperation"
        +  },
        +  {
        +    "$ref": "#/$defs/UpdatePageOperation"
        +  },
        +  {
        +    "$ref": "#/$defs/RepairPageOperation"
        +  }
        +]
      • changedInput schema / properties / operations / maxItems
        Previous value: -20New value: +15
  3. 1 tool updatev0.6.0
    • Changedmove4 fields changed
      • removedInput schema / $defs / MoveOperation / properties / fact
        Removed value: -{
        -  "$ref": "#/$defs/Fact"
        -}
      • addedInput schema / $defs / MoveOperation / properties / facts
        Added value: +{
        +  "description": "All exact Facts to move between this source/destination pair in one operation; copy them unchanged from the latest source Page Snapshot.",
        +  "items": {
        +    "$ref": "#/$defs/Fact"
        +  },
        +  "maxItems": 50,
        +  "minItems": 1,
        +  "title": "Facts",
        +  "type": "array"
        +}
      • changedInput schema / $defs / MoveOperation / required
        Previous value: -[
        -  "source_path",
        -  "source_version",
        -  "destination_path",
        -  "destination_version",
        -  "fact"
        -]New value: +[
        +  "source_path",
        +  "source_version",
        +  "destination_path",
        +  "destination_version",
        +  "facts"
        +]
      • changedInput schema / properties / operations / description
        Previous value: -"Exact Fact moves; every source and destination path must be unique."New value: +"Exact Fact moves validated as one batch. Use one operation per disjoint source/destination pair and include all Facts for that pair in facts; every page path may appear only once across the batch."
  4. 8 tool updatesv0.1.0
    • First observedadd
    • First observedcreate
    • First observeddelete
    • First observedlist
    • First observedmove
    • First observedread
    • First observedrename
    • First observedupdate

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct operation: inspection (list/read), page lifecycle (create/rename/delete), and Fact lifecycle (add/update/move/delete). The descriptions clearly separate page-level from Fact-level mutations, leaving no realistic confusion between tools.

Naming Consistency5/5

All tool names are single-word lowercase verbs (list, read, create, add, update, move, rename, delete), forming a consistent and predictable pattern. While not verb_noun, the convention is uniform across the entire set.

Tool Count5/5

Eight tools is a well-scoped size for a content management server covering both pages and Facts. Each tool earns its place and none feel redundant or excessively granular.

Completeness5/5

The surface covers the full lifecycle: discovering (list), reading (read), creating pages (create), adding Facts (add), modifying Facts/metadata (update), moving Facts (move), renaming pages (rename), and deleting (delete). No obvious dead ends or missing core operations for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to have persistent, self-managing memory with bi-temporal supersession, timely forgetting, and recall under a limited context window, using MCP protocol.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A memory system for AI agents that maintains a human-readable, typed Markdown knowledge base with an always-in-context index, enabling recall, correction, and trust decay through MCP.
    7
    1
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TimWongUp/keepygaga'

If you have feedback or need assistance with the MCP directory API, please join our Discord server