Skip to main content
Glama

ライセンス: AGPL v3PyPIバージョン Python 3.12以上 テスト ラフ 鍛冶屋のバッジ

基本的なメモリ

Basic Memory を使用すると、Claude のような大規模言語モデル (LLM) との自然な会話を通じて永続的な知識を構築できます。その際、すべての情報はシンプルな Markdown ファイルとしてコンピュータ上に保存されます。Model Context Protocol (MCP) を使用することで、互換性のある LLM からローカル知識ベースの読み書きが可能になります。

中断したところから会話を再開しましょう

  • AIアシスタントは新しい会話でローカルファイルからコンテキストを読み込むことができる

  • メモはリアルタイムでMarkdownファイルとしてローカルに保存されます

  • プロジェクトの知識や特別な指示は必要ありません

https://github.com/user-attachments/assets/a55d8238-8dd0-454a-be4c-8860dbbd0ddc

Related MCP server: MCP Memory Server

クイックスタート

# Install with uv (recommended)
uv tool install basic-memory

# Configure Claude Desktop (edit ~/Library/Application Support/Claude/claude_desktop_config.json)
# Add this to your config:
{
  "mcpServers": {
    "basic-memory": {
      "command": "uvx",
      "args": [
        "basic-memory",
        "mcp"
      ]
    }
  }
}
# Now in Claude Desktop, you can:
# - Write notes with "Create a note about coffee brewing methods"
# - Read notes with "What do I know about pour over coffee?"
# - Search with "Find information about Ethiopian beans"

~/basic-memory (デフォルトのディレクトリの場所) 内のファイルを介して共有コンテキストを表示できます。

Smithery経由の代替インストール

Smitheryを使用すると、Claude Desktop の基本メモリを自動的に構成できます。

npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude

これにより、Claude Desktop の設定ファイルを手動で編集することなく、Basic Memory をインストールおよび設定できます。Smithery サーバーは MCP サーバーコンポーネントをホストし、データは Markdown ファイルとしてローカルに保存されたままになります。

グラマ.ai

なぜ基本メモリなのか?

LLMでのやり取りのほとんどは一時的なものです。質問をして答えを得ると、すべて忘れ去られてしまいます。それぞれの会話は、以前の文脈や知識を持たずに、全く新しいものから始まります。現在の回避策には限界があります。

  • チャット履歴は会話を記録しますが、構造化された知識ではありません

  • RAGシステムはドキュメントを照会できるが、LLMに書き戻すことはできない。

  • ベクターデータベースは複雑な設定が必要で、クラウド上に保存されることが多い

  • ナレッジグラフを維持するには、通常、特別なツールが必要です。

Basic Memoryは、人間とLLMの両方が読み書きできる構造化されたMarkdownファイルというシンプルなアプローチでこれらの問題に対処します。主な利点は以下のとおりです。

  • **ローカルファースト:**すべての知識はあなたが管理するファイルに保存されます

  • **双方向:**ユーザーと LLM の両方が同じファイルを読み書きします

  • **構造化されながらもシンプル:**使い慣れたMarkdownとセマンティックパターンを使用

  • トラバース可能な知識グラフ: LLMはトピック間のリンクをたどることができる

  • 標準フォーマット: Obsidianなどの既存のエディタで動作します

  • **軽量インフラストラクチャ:**ローカル SQLite データベースにインデックスされたローカルファイルのみ

基本メモリを使用すると、次のことが可能になります。

  • 過去の知識に基づいた会話をする

  • 自然な会話の中で構造化されたメモを作成する

  • 以前話し合った内容を覚えている法学修士と会話をする

  • 知識グラフを意味的にナビゲートする

  • すべてをローカルで管理

  • Obsidianなどの使い慣れたツールを使用してメモを表示および編集します

  • 時間の経過とともに成長する個人の知識ベースを構築する

実際の仕組み

コーヒーの淹れ方を研究していて、その知識を記録したいとしましょう。その仕組みは以下のとおりです。

  1. 通常通りチャットを始めましょう:

I've been experimenting with different coffee brewing methods. Key things I've learned:

- Pour over gives more clarity in flavor than French press
- Water temperature is critical - around 205°F seems best
- Freshly ground beans make a huge difference

...会話を続けます。

  1. この知識を体系化するために LLM に協力を求めてください。

"Let's write a note about coffee brewing methods."

LLM はシステム上に新しい Markdown ファイルを作成します (Obsidian またはエディターですぐに確認できます)。

---
title: Coffee Brewing Methods
permalink: coffee-brewing-methods
tags:
- coffee
- brewing
---

# Coffee Brewing Methods

## Observations

- [method] Pour over provides more clarity and highlights subtle flavors
- [technique] Water temperature at 205°F (96°C) extracts optimal compounds
- [principle] Freshly ground beans preserve aromatics and flavor

## Relations

- relates_to [[Coffee Bean Origins]]
- requires [[Proper Grinding Technique]]
- affects [[Flavor Extraction]]

メモには、シンプルな Markdown 形式を使用して、セマンティック コンテンツと他のトピックへのリンクが埋め込まれます。

  1. このファイルは、コンピューターの現在のプロジェクト ディレクトリ (デフォルトでは~/$HOME/basic-memory ) にリアルタイムで表示されます。

  • リアルタイム同期はv0.12.0バージョンでデフォルトで有効になっています

  1. LLM とのチャットでは、次のトピックを参照できます。

Look at `coffee-brewing-methods` for context about pour over coffee

LLMはナレッジグラフから豊富なコンテキストを構築できるようになりました。例えば:

Following relation 'relates_to [[Coffee Bean Origins]]':
- Found information about Ethiopian Yirgacheffe
- Notes on Colombian beans' nutty profile
- Altitude effects on bean characteristics

Following relation 'requires [[Proper Grinding Technique]]':
- Burr vs. blade grinder comparisons
- Grind size recommendations for different methods
- Impact of consistent particle size on extraction

関連する各ドキュメントにより、より多くのコンテキストが得られ、知識ベースの豊富な意味的理解が構築されます。

これにより、次の双方向フローが作成されます。

  • 人間がMarkdownファイルを作成し編集する

  • LLMはMCPプロトコルを介して読み書きします

  • 同期により一貫性が保たれます

  • すべての知識はローカル ファイルに保存されます。

技術的実装

内部の基本メモリ:

  1. すべてをMarkdownファイルに保存する

  2. 検索とインデックス作成にSQLiteデータベースを使用する

  3. シンプルなマークダウンパターンから意味を抽出します

    • ファイルはEntityオブジェクトになる

    • EntityObservations 、つまりそれに関連付けられた事実を持つことができます。

    • Relationsエンティティを結び付けて知識グラフを形成する

  4. ファイルから得られたローカル知識グラフを維持する

  5. ファイルとナレッジグラフ間の双方向同期を提供します

  6. AI統合のためのモデルコンテキストプロトコル(MCP)を実装

  7. AIアシスタントが知識グラフを横断して操作できるようにするツールを公開する

  8. ツールや会話全体でエンティティを参照するために、memory:// URL を使用します。

ファイル形式は、単純なマークアップがいくつか付いた Markdown です。

各 Markdown ファイルには次の内容が含まれます。

前書き

title: <Entity title>
type: <The type of Entity> (e.g. note)
permalink: <a uri slug>

- <optional metadata> (such as tags) 

観察

観察とは、あるトピックに関する事実です。観察は、 category 、"#" 文字を使ったtags 、そしてオプションのcontextを参照できる特別な形式の Markdown リストを作成することで追加できます。

観察マークダウン形式:

- [category] content #tag (optional context)

観察例:

- [method] Pour over extracts more floral notes than French press
- [tip] Grind size should be medium-fine for pour over #brewing
- [preference] Ethiopian beans have bright, fruity flavors (especially from Yirgacheffe)
- [fact] Lighter roasts generally contain more caffeine than dark roasts
- [experiment] Tried 1:15 coffee-to-water ratio with good results
- [resource] James Hoffman's V60 technique on YouTube is excellent
- [question] Does water temperature affect extraction of different compounds differently?
- [note] My favorite local shop uses a 30-second bloom time

関係

リレーションは他のトピックへのリンクです。ナレッジグラフ内でエンティティがどのように接続されるかを定義します。

マークダウン形式:

- relation_type [[WikiLink]] (optional context)

関係の例:

- pairs_well_with [[Chocolate Desserts]]
- grown_in [[Ethiopia]]
- contrasts_with [[Tea Brewing Methods]]
- requires [[Burr Grinder]]
- improves_with [[Fresh Beans]]
- relates_to [[Morning Routine]]
- inspired_by [[Japanese Coffee Culture]]
- documented_in [[Coffee Journal]]

VS Codeでの使用

ワンクリックでインストールするには、以下のいずれかのインストールボタンをクリックしてください...

VS CodeでUVを使ってインストールする VS Code Insiders で UV を使用してインストールする

VS CodeでBasic Memoryを使用すると、コーディング中に情報を簡単に取得・保存できます。上記のインストールボタンをクリックしてワンクリックでセットアップするか、以下の手動インストール手順に従ってください。

手動インストール

VS Codeのユーザー設定(JSON)ファイルに、以下のJSONブロックを追加します。Ctrl Ctrl + Shift + Pを押してPreferences: Open User Settings (JSON)と入力することで実行できます。

{
  "mcp": {
    "servers": {
      "basic-memory": {
        "command": "uvx",
        "args": ["basic-memory", "mcp"]
      }
    }
  }
}

オプションとして、ワークスペース内の.vscode/mcp.jsonというファイルに追加することもできます。これにより、他のユーザーと設定を共有できるようになります。

{
  "servers": {
    "basic-memory": {
      "command": "uvx",
      "args": ["basic-memory", "mcp"]
    }
  }
}

Claude Desktopでの使用

Basic Memory は MCP (Model Context Protocol) を使用して構築され、Claude デスクトップ アプリ ( https://claude.ai/ ) で動作します。

  1. 基本メモリを使用するようにClaude Desktopを構成します。

MCP 構成ファイルを編集します (通常、OS X の場合は~/Library/Application Support/Claude/claude_desktop_config.jsonにあります)。

{
  "mcpServers": {
    "basic-memory": {
      "command": "uvx",
      "args": [
        "basic-memory",
        "mcp"
      ]
    }
  }
}

特定のプロジェクトを使用する場合は (複数のプロジェクトを参照)、Claude Desktop の設定を更新します。

{
  "mcpServers": {
    "basic-memory": {
      "command": "uvx",
      "args": [
        "basic-memory",
        "--project",
        "your-project-name",
        "mcp"
      ]
    }
  }
}
  1. 知識を同期する:

手動で編集すると、Basic Memory はプロジェクト内のファイルをリアルタイムで同期します。

  1. Claude Desktop では、LLM は次のツールを使用できるようになりました。

write_note(title, content, folder, tags) - Create or update notes
read_note(identifier, page, page_size) - Read notes by title or permalink
build_context(url, depth, timeframe) - Navigate knowledge graph via memory:// URLs
search_notes(query, page, page_size) - Search across your knowledge base
recent_activity(type, depth, timeframe) - Find recently updated information
canvas(nodes, edges, title, folder) - Generate knowledge visualizations
  1. 試すプロンプトの例:

"Create a note about our project architecture decisions"
"Find information about JWT authentication in my notes"
"Create a canvas visualization of my project components"
"Read my notes on the authentication system"
"What have I been working on in the past week?"

詳細情報

詳細については、以下のドキュメントを参照してください。

ライセンス

AGPL-3.0

貢献を歓迎します。ローカル環境でプロジェクトを立ち上げ、プルリクエストを送信する方法については、貢献ガイドをご覧ください。

スターの歴史

Basic Machines によって ♥️ で構築されました

Available Tools

17 tools
build_contextB

Build context from a memory:// URI to continue conversations naturally.

Use this to follow up on previous discussions or explore related topics.

Memory URL Format:
- Use paths like "folder/note" or "memory://folder/note"
- Pattern matching: "folder/*" matches all notes in folder
- Valid characters: letters, numbers, hyphens, underscores, forward slashes
- Avoid: double slashes (//), angle brackets (<>), quotes, pipes (|)
- Examples: "specs/search", "projects/basic-memory", "notes/*"

Timeframes support natural language like:
- "2 days ago", "last week", "today", "3 months ago"
- Or standard formats like "7d", "24h"
ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
projectNo
depthNo
timeframeNo7d
pageNo
page_sizeNo
max_relatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
resultsNoHierarchical results with related items nested
metadataYes
page_sizeNo

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While it explains the tool builds context for conversations and provides format details, it doesn't disclose critical behavioral traits like whether this is a read-only operation, what permissions are needed, whether it modifies data, rate limits, or what the output contains. For a tool with 7 parameters and no annotations, this is a significant gap.

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 well-structured and appropriately sized. It starts with the core purpose, provides usage guidance, then details parameter formats with clear sections. While comprehensive, every sentence serves a purpose - explaining the tool's function, when to use it, and parameter specifics. It could be slightly more concise by integrating some format details more tightly.

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

Completeness3/5

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

Given the tool's complexity (7 parameters, memory system interaction) and the presence of an output schema, the description provides good context about the tool's purpose and key parameters. However, with no annotations and incomplete parameter semantics coverage, it doesn't fully prepare an agent for all aspects of tool invocation. The output schema existence helps, but behavioral aspects remain under-specified.

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 description provides extensive information about the 'url' parameter format (memory:// URIs, pattern matching, valid characters, examples) and 'timeframe' parameter (natural language and standard formats). With 0% schema description coverage, this adds substantial value beyond the bare schema. However, it doesn't explain the semantics of 'depth', 'project', 'page', 'page_size', or 'max_related' parameters, leaving half the parameters without semantic explanation.

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's purpose: 'Build context from a memory:// URI to continue conversations naturally.' This specifies the verb ('build context') and resource ('memory:// URI'), though it doesn't explicitly differentiate from sibling tools like 'read_note' or 'search_notes' that might also access memory content. The purpose is clear but lacks sibling differentiation.

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 usage context: 'Use this to follow up on previous discussions or explore related topics.' This gives guidance on when to use the tool (for conversation continuity or topic exploration). However, it doesn't specify when NOT to use it or mention alternatives among the many sibling tools, which would be needed for a perfect score.

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

canvasC

Create an Obsidian canvas file to visualize concepts and connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes
edgesYes
titleYes
folderYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Create' which implies a write operation, but doesn't cover critical aspects like permissions needed, whether it overwrites existing files, error handling, or the format of the created canvas. This leaves significant gaps for an agent to understand the tool's behavior beyond basic creation.

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

Conciseness5/5

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

The description is a single, well-structured sentence that efficiently conveys the core purpose without unnecessary words. It's front-loaded with the key action and resource, making it easy to parse quickly, which is ideal for conciseness.

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

Completeness3/5

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

Given the tool has 5 parameters with 0% schema coverage and no annotations, but an output schema exists, the description is minimally adequate. It covers the basic purpose but lacks details on parameters, behavioral traits, and usage context, making it incomplete for a creation tool with multiple inputs. The output schema mitigates some gaps, but overall completeness is limited.

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 description coverage is 0%, meaning all 5 parameters lack descriptions in the schema. The description adds no information about parameters like 'nodes', 'edges', 'title', 'folder', or 'project', failing to compensate for the schema gap. For example, it doesn't explain what 'nodes' and 'edges' should contain or how 'folder' paths are structured.

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 action ('Create') and resource ('Obsidian canvas file') with a purpose ('to visualize concepts and connections'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'create_memory_project' or 'write_note' that might also create files, leaving room for ambiguity in tool selection.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'create_memory_project' or 'write_note', nor does it mention prerequisites or exclusions. It implies usage for visualization tasks but lacks explicit context for distinguishing from other creation tools in the server.

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

create_memory_projectA

Create a new Basic Memory project.

Creates a new project with the specified name and path. The project directory will be created if it doesn't exist. Optionally sets the new project as default.

Args: project_name: Name for the new project (must be unique) project_path: File system path where the project will be stored set_default: Whether to set this project as the default (optional, defaults to False)

Returns: Confirmation message with project details

Example: create_memory_project("my-research", "~/Documents/research") create_memory_project("work-notes", "/home/user/work", set_default=True)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameYes
project_pathYes
set_defaultNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/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 that the project directory will be created if missing and mentions the optional default-setting behavior, which adds useful context beyond just the creation action. However, it doesn't cover potential errors, permissions needed, or what happens with existing projects.

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

Conciseness4/5

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

Well-structured with clear sections (description, args, returns, example) and front-loaded purpose. The example section is helpful but slightly lengthens the description. Most sentences earn their place, though some formatting could be tighter.

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 3 parameters with 0% schema coverage and no annotations, the description does an excellent job explaining parameters and includes an output schema (returns confirmation message). It covers the core creation behavior well, though additional context about error conditions or relationships to other tools would make it more complete.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides clear semantic explanations for all three parameters: project_name (must be unique), project_path (file system path where stored), and set_default (optional default behavior). This adds significant value beyond the bare 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 specific action ('Create a new Basic Memory project') and resource ('project'), distinguishing it from sibling tools like 'list_memory_projects' or 'delete_project'. It specifies the exact operation rather than being vague or tautological.

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 this tool versus alternatives is provided. While it's clear this creates projects, there's no mention of prerequisites, when creation might fail, or how it relates to other project management tools in the sibling list.

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

delete_noteC

Delete a note by title or permalink

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 states the action is 'Delete', implying a destructive mutation, but fails to disclose behavioral traits such as whether deletion is permanent, reversible, requires specific permissions, or has side effects. This is a significant gap 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?

The description is a single, efficient sentence with zero waste. It is appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary details.

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

Completeness3/5

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

Given the tool has an output schema (which handles return values) but no annotations and low schema coverage, the description is incomplete. It adequately states the basic action but lacks crucial details for a destructive operation, such as behavioral context and parameter explanations, leaving gaps in understanding.

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 description coverage is 0%, so the description must compensate. It mentions 'by title or permalink', which clarifies the 'identifier' parameter, but does not explain the 'project' parameter or its optionality. The description adds some meaning but does not fully address the undocumented parameters.

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 verb ('Delete') and resource ('a note'), specifying it can be done 'by title or permalink'. However, it does not explicitly differentiate from sibling tools like 'delete_project' or 'move_note', which also involve deletion or modification operations.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 'edit_note' or 'move_note', nor does it mention prerequisites like required permissions or project context. It lacks explicit usage context or exclusions.

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

delete_projectA

Delete a Basic Memory project.

Removes a project from the configuration and database. This does NOT delete the actual files on disk - only removes the project from Basic Memory's configuration and database records.

Args: project_name: Name of the project to delete

Returns: Confirmation message about project deletion

Example: delete_project("old-project")

Warning: This action cannot be undone. The project will need to be re-added to access its content through Basic Memory again.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and does an excellent job. It discloses critical behavioral traits: that this is a destructive operation ('cannot be undone'), clarifies what gets affected (configuration and database records but NOT files on disk), and explains the consequence (project would need re-adding to access content).

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

Conciseness5/5

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

The description is well-structured with clear sections (Args, Returns, Example, Warning) and front-loaded with the core purpose. Every sentence adds value: the first states what it does, the second clarifies scope, and subsequent sections provide practical guidance 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?

For a destructive tool with no annotations, 0% schema coverage, but with output schema present, the description is remarkably complete. It covers purpose, behavioral implications, parameter meaning, example usage, and warnings - providing everything needed for safe invocation despite minimal structured data support.

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?

With 0% schema description coverage and only one parameter, the description fully compensates by explaining the 'project_name' parameter meaning ('Name of the project to delete') in the Args section. It provides essential semantic context that the schema lacks entirely.

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 specific action ('Delete a Basic Memory project') and distinguishes it from sibling tools like 'create_memory_project' and 'list_memory_projects'. It explicitly mentions what resource is affected ('project') and what system it operates on ('Basic 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?

The description provides clear context about when to use this tool (to remove a project from configuration/database) and includes a warning about irreversibility. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among siblings like 'delete_note' for different operations.

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

edit_noteC

Edit an existing markdown note using various operations like append, prepend, find_replace, or replace_section.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes
operationYes
contentYes
projectNo
sectionNo
find_textNo
expected_replacementsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.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 carries the full burden. It states the tool edits notes with various operations, implying mutation, but doesn't disclose behavioral traits like whether edits are reversible, permission requirements, rate limits, or error handling. This is a significant gap for a mutation tool with zero annotation coverage.

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 a single, efficient sentence that front-loads the core purpose ('Edit an existing markdown note') and lists operation types. It avoids redundancy and wastes no words, though it could be slightly more structured (e.g., bullet points for operations).

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 7 parameters with 0% schema coverage, no annotations, and an output schema (which reduces need to explain returns), the description is incomplete. It covers the basic purpose and operation types but misses parameter details, behavioral context, and usage guidelines. It's minimally adequate for a simple edit tool but has clear gaps.

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 description coverage is 0%, so the description must compensate. It mentions operations (append, prepend, find_replace, replace_section) which partially explains the 'operation' parameter, but doesn't clarify other parameters like 'identifier', 'content', 'project', 'section', 'find_text', or 'expected_replacements'. The description adds minimal value beyond the schema's property names.

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 action ('Edit an existing markdown note') and resource ('note'), specifying the type of operations available (append, prepend, find_replace, replace_section). It distinguishes from siblings like 'write_note' (create) and 'delete_note' (remove), but doesn't explicitly differentiate from 'view_note' or 'read_note' in terms of when to edit versus read.

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 this tool versus alternatives is provided. It doesn't mention prerequisites (e.g., note must exist), when to choose specific operations, or when to use 'write_note' for new notes instead. The context is implied (editing existing notes), but lacks actionable usage rules.

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

fetchC

Fetch the full contents of a search result document

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read operation ('fetch'), but doesn't address permissions, rate limits, error handling, or what 'full contents' entails (e.g., format, size limits). This leaves significant gaps for a tool that likely interacts with documents.

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 a single, efficient sentence that is front-loaded with the core action. There's no wasted verbiage, making it appropriately concise for a simple tool, though it could benefit from more detail given the lack of annotations.

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

Completeness3/5

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

Given the tool's complexity (simple fetch operation), 1 parameter, and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and low schema coverage, it should provide more context about behavior and parameters to be fully complete.

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 input schema has 1 parameter ('id') with 0% description coverage, and the tool description adds no meaning beyond the schema. It doesn't explain what the 'id' represents (e.g., a document identifier from search results) or its format, failing to compensate for the low schema coverage.

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

Purpose3/5

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

The description states the tool 'fetches the full contents of a search result document,' which provides a clear verb ('fetch') and resource ('search result document'), but it's somewhat vague about what constitutes a 'search result document' and doesn't differentiate from siblings like 'read_content' or 'read_note.' It avoids tautology by not just restating the name 'fetch.'

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives such as 'read_content' or 'read_note,' nor does it specify any prerequisites or context for usage. It merely states what the tool does without indicating when it's appropriate.

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

list_directoryC

List directory contents with filtering and depth control.

ParametersJSON Schema
NameRequiredDescriptionDefault
dir_nameNo/
depthNo
file_name_globNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions 'filtering and depth control' but doesn't disclose critical details like whether this is a read-only operation, what permissions are needed, how results are structured, or any rate limits. For a tool with 4 parameters and no annotation coverage, this is inadequate.

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

Conciseness5/5

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

The description is extremely concise (one sentence) and front-loaded with the core purpose. Every word earns its place, with no redundant or vague language, making it efficient for quick understanding.

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

Completeness3/5

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

Given the tool's moderate complexity (4 parameters, no annotations, but with an output schema), the description is incomplete. The output schema reduces the need to explain return values, but the description lacks guidance on usage, parameter details, and behavioral context, leaving significant gaps for effective tool selection.

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 description coverage is 0%, so the description must compensate but fails to do so. It mentions 'filtering' (hinting at 'file_name_glob') and 'depth control' (hinting at 'depth'), but doesn't explain the purpose of 'dir_name' or 'project', nor provide any syntax or format details. With 4 undocumented parameters, this adds minimal value beyond the 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?

The description clearly states the tool's purpose with specific verbs ('list directory contents') and resources ('directory'), and mentions capabilities ('filtering and depth control'). However, it doesn't explicitly differentiate from sibling tools like 'search' or 'fetch' that might also retrieve file information.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'search', 'fetch', or 'read_content'. The description mentions filtering capabilities but doesn't specify scenarios where this tool is preferred over others or any prerequisites for use.

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

list_memory_projectsA

List all available projects with their status.

Shows all Basic Memory projects that are available for MCP operations. Use this tool to discover projects when you need to know which project to use.

Use this tool:

  • At conversation start when project is unknown

  • When user asks about available projects

  • Before any operation requiring a project

After calling:

  • Ask user which project to use

  • Remember their choice for the session

Returns: Formatted list of projects with session management guidance

Example: list_memory_projects()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 of behavioral disclosure. It effectively describes the tool's behavior: it lists projects with status, is used for discovery, and includes session management guidance. However, it doesn't mention potential limitations like rate limits, error conditions, or whether the list is paginated.

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 well-structured with clear sections (purpose, usage guidelines, post-call instructions, returns, example). It's front-loaded with the core purpose. Some sentences could be more concise (e.g., 'Shows all Basic Memory projects...' slightly repeats the first sentence), but overall it's efficient and informative.

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 low complexity (0 parameters, no annotations), the description is quite complete. It explains purpose, usage, and behavioral aspects. Since an output schema exists, it doesn't need to detail return values, though it mentions 'Formatted list of projects with session management guidance,' which adds helpful context. Minor gaps include lack of error handling or performance details.

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 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on usage and output. A baseline of 4 is applied since there are no parameters to document.

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's purpose: 'List all available projects with their status' and 'Shows all Basic Memory projects that are available for MCP operations.' It specifies the verb (list/show) and resource (projects), but doesn't explicitly differentiate from sibling tools like 'list_directory' or 'search_notes' that might also list resources.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'At conversation start when project is unknown,' 'When user asks about available projects,' and 'Before any operation requiring a project.' It also includes post-call instructions ('Ask user which project to use,' 'Remember their choice for the session'), which effectively guides usage context.

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

move_noteC

Move a note to a new location, updating database and maintaining links.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes
destination_pathYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers limited behavioral insight. It mentions 'updating database' (implying mutation) and 'maintaining links' (hinting at referential integrity), but lacks details on permissions, error conditions, side effects, or what 'maintaining links' entails operationally. This is inadequate for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste—it directly states the action, outcome, and key behavioral aspect ('maintaining links'). It's appropriately sized and front-loaded, making every word count without unnecessary elaboration.

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 a mutation tool with 3 parameters (0% schema coverage), no annotations, but an output schema exists, the description is minimally complete. It covers the core action and hints at behavior, but lacks details on parameters, error handling, and operational context that would be needed for full agent understanding, though the output schema mitigates some gaps.

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 description coverage is 0%, so the description must compensate but adds minimal param semantics. It implies 'identifier' selects the note and 'destination_path' specifies the new location, but doesn't explain formats (e.g., path syntax, identifier types) or the optional 'project' parameter's role. This fails to bridge the coverage gap effectively.

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 action ('Move a note') and the resource ('note'), specifying the outcome ('updating database and maintaining links'). It distinguishes from siblings like 'edit_note' or 'delete_note' by focusing on relocation, but doesn't explicitly contrast with tools like 'write_note' or 'view_note' in terms of purpose.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., note existence, permissions), exclusions (e.g., when not to move), or comparisons to siblings like 'edit_note' for content changes or 'delete_note' for removal, leaving usage context unclear.

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

read_contentC

Read a file's raw content by path or permalink

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool reads raw content but doesn't mention permissions, rate limits, error handling, or output format. This is a significant gap for a read operation that could involve file access constraints.

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, efficient sentence with zero waste. It is front-loaded with the core purpose and includes a useful detail ('by path or permalink'), making it appropriately sized and easy to parse.

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

Completeness3/5

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

Given the tool's moderate complexity (2 parameters, no annotations, but has an output schema), the description is incomplete. It covers the basic purpose but lacks usage guidelines, parameter details, and behavioral context. The output schema mitigates some gaps, but overall it's minimally viable with clear deficiencies.

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 description coverage is 0%, so the description must compensate but only mentions 'path or permalink' without explaining the 'project' parameter. It adds minimal meaning beyond the schema, failing to clarify parameter roles or usage, which is inadequate given the coverage gap.

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 action ('Read') and resource ('a file's raw content'), specifying it can be done 'by path or permalink'. It distinguishes from siblings like 'read_note' or 'view_note' by focusing on raw file content rather than notes, though it doesn't explicitly compare them.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'read_note', 'view_note', or 'fetch'. The description implies usage for reading files but doesn't specify contexts, prerequisites, or exclusions, leaving the agent to infer based on tool names alone.

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

read_noteC

Read a markdown note by title or permalink.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes
projectNo
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Read') but lacks details on permissions, rate limits, error handling, or output format. While it hints at retrieval by identifier, it doesn't clarify if this is a safe read operation or has side effects, leaving significant gaps.

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, efficient sentence with zero waste, front-loading the core action and key parameter. It's appropriately sized for the tool's complexity, making it easy to parse without unnecessary elaboration.

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

Completeness3/5

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

Given the tool has an output schema (which handles return values), the description's gaps in parameter semantics and behavioral transparency are partially mitigated. However, with 4 parameters and no annotations, it should provide more context on usage and parameters to be fully complete, resulting in an average score.

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 description coverage is 0%, so the description must compensate for undocumented parameters. It only mentions 'identifier' (title or permalink), ignoring 'project,' 'page,' and 'page_size.' This partial coverage fails to explain the purpose or usage of most parameters, adding minimal value beyond the 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?

The description clearly states the verb ('Read') and resource ('a markdown note'), specifying it can be accessed 'by title or permalink.' This distinguishes it from generic read operations but doesn't explicitly differentiate from sibling tools like 'view_note' or 'read_content,' keeping it from a perfect score.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'view_note,' 'search_notes,' or 'read_content.' The description implies usage for retrieving notes but offers no context on prerequisites, exclusions, or comparative scenarios with siblings.

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

recent_activityB

Get recent activity for a project or across all projects.

Timeframe supports natural language formats like:
- "2 days ago"
- "last week"
- "yesterday"
- "today"
- "3 weeks ago"
Or standard formats like "7d"
ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
depthNo
timeframeNo7d
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool retrieves ('Get') data, implying it's read-only, but doesn't mention behavioral traits like pagination, rate limits, authentication needs, error handling, or what 'recent activity' includes (e.g., events, changes). The timeframe format details are helpful but insufficient for a mutation-free tool with zero annotation coverage.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by specific timeframe examples. Every sentence earns its place by adding value—no redundancy or waste. The bullet-point list for timeframe formats is structured for clarity without verbosity.

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 4 parameters with 0% schema coverage and no annotations, the description is incomplete. It partially covers 'timeframe' but omits details for 'type,' 'depth,' and 'project.' An output schema exists, so return values needn't be explained, but for a read operation with multiple inputs, more parameter guidance is needed to be fully helpful.

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 0%, so the description must compensate. It adds meaning for 'timeframe' by providing natural language and standard format examples, which clarifies semantics beyond the schema's title. However, it doesn't explain 'type,' 'depth,' or 'project' parameters, leaving three of four parameters with minimal guidance. The baseline is lowered due to incomplete compensation.

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's purpose: 'Get recent activity for a project or across all projects.' It uses a specific verb ('Get') and resource ('recent activity'), and distinguishes between project-specific and all-projects scope. However, it doesn't explicitly differentiate from sibling tools like 'search' or 'fetch' that might also retrieve activity data.

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 context by mentioning 'for a project or across all projects,' suggesting this tool is for retrieving activity logs. However, it provides no explicit guidance on when to use this versus alternatives like 'search' or 'fetch,' nor does it mention prerequisites or exclusions. The timeframe examples offer some operational context but not comparative guidance.

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

search_notesC

Search across all content in the knowledge base with advanced syntax support.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
projectNo
pageNo
page_sizeNo
search_typeNotext
typesNo
entity_typesNo
after_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/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 of behavioral disclosure. It mentions 'advanced syntax support' which adds some context about query capabilities, but it doesn't describe what the search returns (e.g., results format, pagination behavior), whether it's read-only (implied but not stated), or any rate limits or authentication needs. For a search tool with 8 parameters and no annotations, this is inadequate.

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, efficient sentence that gets straight to the point without unnecessary words. It's appropriately sized for a search tool and front-loaded with the core functionality, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity (8 parameters, 0% schema coverage, no annotations) and the presence of an output schema (which might help with return values), the description is incomplete. It doesn't explain parameter usage, behavioral details like pagination or result limits, or how it differs from sibling tools. For a tool with this many undocumented parameters, more context is needed to be minimally viable.

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%, meaning none of the 8 parameters have descriptions in the schema. The tool description doesn't mention any parameters or their semantics (e.g., what 'search_type' or 'entity_types' mean), failing to compensate for the lack of schema documentation. This leaves the agent with no guidance on how to use the parameters effectively.

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

Purpose3/5

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

The description states the tool searches across all content in the knowledge base, which provides a clear verb ('search') and resource ('knowledge base content'). However, it doesn't distinguish this from sibling tools like 'search' (which appears to be a simpler search) or 'fetch'/'read_note' (which retrieve specific content), leaving the purpose somewhat vague in relation to alternatives.

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

Usage Guidelines2/5

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

The description mentions 'advanced syntax support' which implies this tool should be used for complex queries, but it doesn't explicitly state when to use this vs. other search or retrieval tools like 'search' or 'read_note'. No guidance is provided on exclusions or prerequisites, leaving the agent to infer usage from context alone.

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

view_noteC

View a note as a formatted artifact for better readability.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes
projectNo
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/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 of behavioral disclosure. It mentions viewing as a 'formatted artifact', which implies a read-only operation with enhanced presentation, but doesn't cover critical aspects like authentication needs, rate limits, error handling, or what 'formatted' entails. This leaves significant gaps in understanding the tool's behavior.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized, making it easy to parse quickly, though it could benefit from more detail given the complexity of the tool.

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

Completeness3/5

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

Given the tool has 4 parameters with 0% schema coverage and no annotations, but an output schema exists, the description is incomplete. It doesn't explain parameter meanings or behavioral traits, though the output schema might cover return values. For a tool with multiple parameters and no annotation support, more context is needed to be fully helpful.

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 description coverage is 0%, so the schema provides no parameter details. The description adds no information about parameters like 'identifier', 'project', 'page', or 'page_size', failing to compensate for the lack of schema documentation. This leaves all four parameters semantically undefined, hindering proper tool invocation.

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

Purpose3/5

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

The description states the tool 'View a note as a formatted artifact for better readability', which specifies the verb 'view' and resource 'note'. However, it doesn't clearly distinguish this from sibling tools like 'read_note' or 'read_content', leaving the exact differentiation vague. The mention of 'formatted artifact' adds some specificity but isn't fully clarifying.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 'read_note' or 'search_notes'. There's no mention of prerequisites, exclusions, or specific contexts where this tool is preferred, leaving the agent with no usage direction beyond the basic purpose.

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

write_noteC

Create or update a markdown note. Returns a markdown formatted summary of the semantic content.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contentYes
folderYes
projectNo
tagsNo
note_typeNonote

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool creates/updates notes and returns a markdown summary, but doesn't cover critical aspects like whether updates overwrite existing notes, authentication requirements, error conditions, or rate limits. This leaves significant gaps 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.

Conciseness4/5

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

The description is efficiently structured in a single sentence that states the core function and return value. There's no unnecessary verbiage, though it could be slightly more comprehensive given the tool's complexity.

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

Completeness3/5

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

For a mutation tool with 6 parameters, 0% schema coverage, no annotations, but with an output schema, the description is moderately complete. It covers the basic action and return format, but lacks parameter explanations and behavioral context that would be needed for optimal agent understanding.

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?

With 0% schema description coverage for 6 parameters, the description provides no information about what the parameters mean or how they should be used. It doesn't mention any of the parameters (title, content, folder, project, tags, note_type) or their purposes, failing to compensate for the schema's lack of descriptions.

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 action ('Create or update') and resource ('a markdown note'), distinguishing it from sibling tools like 'delete_note' or 'edit_note'. However, it doesn't explicitly differentiate from 'edit_note' which might also update notes, making it slightly less specific than a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'edit_note' or 'create_memory_project'. It mentions the tool's function but lacks context about prerequisites, when-not scenarios, or comparisons with sibling tools.

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. 11 tool updatesv1.0.0
    • Changedbuild_context12 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "StringOrInt": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "integer"
        -      }
        -    ]
        -  }
        -}
      • changedInput schema / properties / depth / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/StringOrInt"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / $defs / EntitySummary / properties / entity_id
        Added value: +{
        +  "title": "Entity Id",
        +  "type": "integer"
        +}
      • changedOutput schema / $defs / EntitySummary / required
        Previous value: -[
        -  "permalink",
        -  "title",
        -  "file_path",
        -  "created_at"
        -]New value: +[
        +  "entity_id",
        +  "permalink",
        +  "title",
        +  "file_path",
        +  "created_at"
        +]
      • addedOutput schema / $defs / ObservationSummary / properties / entity_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Entity Id"
        +}
      • addedOutput schema / $defs / ObservationSummary / properties / observation_id
        Added value: +{
        +  "title": "Observation Id",
        +  "type": "integer"
        +}
      • changedOutput schema / $defs / ObservationSummary / required
        Previous value: -[
        -  "title",
        -  "file_path",
        -  "permalink",
        -  "category",
        -  "content",
        -  "created_at"
        -]New value: +[
        +  "observation_id",
        +  "title",
        +  "file_path",
        +  "permalink",
        +  "category",
        +  "content",
        +  "created_at"
        +]
      • addedOutput schema / $defs / RelationSummary / properties / entity_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Entity Id"
        +}
      • addedOutput schema / $defs / RelationSummary / properties / from_entity_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "From Entity Id"
        +}
      • addedOutput schema / $defs / RelationSummary / properties / relation_id
        Added value: +{
        +  "title": "Relation Id",
        +  "type": "integer"
        +}
      • addedOutput schema / $defs / RelationSummary / properties / to_entity_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "To Entity Id"
        +}
      • changedOutput schema / $defs / RelationSummary / required
        Previous value: -[
        -  "title",
        -  "file_path",
        -  "permalink",
        -  "relation_type",
        -  "created_at"
        -]New value: +[
        +  "relation_id",
        +  "title",
        +  "file_path",
        +  "permalink",
        +  "relation_type",
        +  "created_at"
        +]
    • Addedfetch
    • Removedget_current_project
    • Changedlist_memory_projects1 field changed
      • removedInput schema / properties / _compatibility
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Compatibility"
        -}
    • Changedrecent_activity13 fields changed
      • removedInput schema / properties / max_related
        Removed value: -{
        -  "default": 10,
        -  "title": "Max Related",
        -  "type": "integer"
        -}
      • removedInput schema / properties / page
        Removed value: -{
        -  "default": 1,
        -  "title": "Page",
        -  "type": "integer"
        -}
      • removedInput schema / properties / page_size
        Removed value: -{
        -  "default": 10,
        -  "title": "Page Size",
        -  "type": "integer"
        -}
      • removedOutput schema / $defs
        Removed value: -{
        -  "ContextResult": {
        -    "description": "Context result containing a primary item with its observations and related items.",
        -    "properties": {
        -      "observations": {
        -        "description": "Observations belonging to this entity",
        -        "items": {
        -          "$ref": "#/$defs/ObservationSummary"
        -        },
        -        "title": "Observations",
        -        "type": "array"
        -      },
        -      "primary_result": {
        -        "description": "Primary item",
        -        "discriminator": {
        -          "mapping": {
        -            "entity": "#/$defs/EntitySummary",
        -            "observation": "#/$defs/ObservationSummary",
        -            "relation": "#/$defs/RelationSummary"
        -          },
        -          "propertyName": "type"
        -        },
        -        "oneOf": [
        -          {
        -            "$ref": "#/$defs/EntitySummary"
        -          },
        -          {
        -            "$ref": "#/$defs/RelationSummary"
        -          },
        -          {
        -            "$ref": "#/$defs/ObservationSummary"
        -          }
        -        ],
        -        "title": "Primary Result"
        -      },
        -      "related_results": {
        -        "description": "Related items",
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "entity": "#/$defs/EntitySummary",
        -              "observation": "#/$defs/ObservationSummary",
        -              "relation": "#/$defs/RelationSummary"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "$ref": "#/$defs/EntitySummary"
        -            },
        -            {
        -              "$ref": "#/$defs/RelationSummary"
        -            },
        -            {
        -              "$ref": "#/$defs/ObservationSummary"
        -            }
        -          ]
        -        },
        -        "title": "Related Results",
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "primary_result"
        -    ],
        -    "title": "ContextResult",
        -    "type": "object"
        -  },
        -  "EntitySummary": {
        -    "description": "Simplified entity representation.",
        -    "properties": {
        -      "content": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Content"
        -      },
        -      "created_at": {
        -        "format": "date-time",
        -        "title": "Created At",
        -        "type": "string"
        -      },
        -      "file_path": {
        -        "title": "File Path",
        -        "type": "string"
        -      },
        -      "permalink": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "title": "Permalink"
        -      },
        -      "title": {
        -        "title": "Title",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "entity",
        -        "default": "entity",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "permalink",
        -      "title",
        -      "file_path",
        -      "created_at"
        -    ],
        -    "title": "EntitySummary",
        -    "type": "object"
        -  },
        -  "MemoryMetadata": {
        -    "description": "Simplified response metadata.",
        -    "properties": {
        -      "depth": {
        -        "title": "Depth",
        -        "type": "integer"
        -      },
        -      "generated_at": {
        -        "format": "date-time",
        -        "title": "Generated At",
        -        "type": "string"
        -      },
        -      "primary_count": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Primary Count"
        -      },
        -      "related_count": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Related Count"
        -      },
        -      "timeframe": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Timeframe"
        -      },
        -      "total_observations": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Total Observations"
        -      },
        -      "total_relations": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Total Relations"
        -      },
        -      "total_results": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Total Results"
        -      },
        -      "types": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "$ref": "#/$defs/SearchItemType"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Types"
        -      },
        -      "uri": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Uri"
        -      }
        -    },
        -    "required": [
        -      "depth",
        -      "generated_at"
        -    ],
        -    "title": "MemoryMetadata",
        -    "type": "object"
        -  },
        -  "ObservationSummary": {
        -    "description": "Simplified observation representation.",
        -    "properties": {
        -      "category": {
        -        "title": "Category",
        -        "type": "string"
        -      },
        -      "content": {
        -        "title": "Content",
        -        "type": "string"
        -      },
        -      "created_at": {
        -        "format": "date-time",
        -        "title": "Created At",
        -        "type": "string"
        -      },
        -      "file_path": {
        -        "title": "File Path",
        -        "type": "string"
        -      },
        -      "permalink": {
        -        "title": "Permalink",
        -        "type": "string"
        -      },
        -      "title": {
        -        "title": "Title",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "observation",
        -        "default": "observation",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "file_path",
        -      "permalink",
        -      "category",
        -      "content",
        -      "created_at"
        -    ],
        -    "title": "ObservationSummary",
        -    "type": "object"
        -  },
        -  "RelationSummary": {
        -    "description": "Simplified relation representation.",
        -    "properties": {
        -      "created_at": {
        -        "format": "date-time",
        -        "title": "Created At",
        -        "type": "string"
        -      },
        -      "file_path": {
        -        "title": "File Path",
        -        "type": "string"
        -      },
        -      "from_entity": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "From Entity"
        -      },
        -      "permalink": {
        -        "title": "Permalink",
        -        "type": "string"
        -      },
        -      "relation_type": {
        -        "title": "Relation Type",
        -        "type": "string"
        -      },
        -      "title": {
        -        "title": "Title",
        -        "type": "string"
        -      },
        -      "to_entity": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "To Entity"
        -      },
        -      "type": {
        -        "const": "relation",
        -        "default": "relation",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "file_path",
        -      "permalink",
        -      "relation_type",
        -      "created_at"
        -    ],
        -    "title": "RelationSummary",
        -    "type": "object"
        -  },
        -  "SearchItemType": {
        -    "description": "Types of searchable items.",
        -    "enum": [
        -      "entity",
        -      "observation",
        -      "relation"
        -    ],
        -    "title": "SearchItemType",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / description
        Removed value: -"Complete context response."
      • removedOutput schema / properties / metadata
        Removed value: -{
        -  "$ref": "#/$defs/MemoryMetadata"
        -}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Page"
        -}
      • removedOutput schema / properties / page_size
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Page Size"
        -}
      • addedOutput schema / properties / result
        Added value: +{
        +  "title": "Result",
        +  "type": "string"
        +}
      • removedOutput schema / properties / results
        Removed value: -{
        -  "description": "Hierarchical results with related items nested",
        -  "items": {
        -    "$ref": "#/$defs/ContextResult"
        -  },
        -  "title": "Results",
        -  "type": "array"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "metadata"
        -]New value: +[
        +  "result"
        +]
      • changedOutput schema / title
        Previous value: -"GraphContext"New value: +"_WrappedResult"
      • addedOutput schema / x-fastmcp-wrap-result
        Added value: +true
    • Addedsearch
    • Changedsearch_notes3 fields changed
      • addedOutput schema / $defs / SearchResult / properties / entity_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Entity Id"
        +}
      • addedOutput schema / $defs / SearchResult / properties / observation_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Observation Id"
        +}
      • addedOutput schema / $defs / SearchResult / properties / relation_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Relation Id"
        +}
    • Removedset_default_project
    • Removedswitch_project
    • Removedsync_status
    • Changedwrite_note3 fields changed
      • removedInput schema / properties / entity_type
        Removed value: -{
        -  "default": "note",
        -  "title": "Entity Type",
        -  "type": "string"
        -}
      • addedInput schema / properties / note_type
        Added value: +{
        +  "default": "note",
        +  "title": "Note Type",
        +  "type": "string"
        +}
      • addedInput schema / properties / tags / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  2. 2 tool updates
    • Changedbuild_context11 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "StringOrInt": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "integer"
        +      }
        +    ]
        +  }
        +}
      • changedInput schema / properties / depth / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/StringOrInt"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ContextResult / properties / primary_result / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/EntitySummary"
        -  },
        -  {
        -    "$ref": "#/$defs/RelationSummary"
        -  },
        -  {
        -    "$ref": "#/$defs/ObservationSummary"
        -  }
        -]
      • addedOutput schema / $defs / ContextResult / properties / primary_result / discriminator
        Added value: +{
        +  "mapping": {
        +    "entity": "#/$defs/EntitySummary",
        +    "observation": "#/$defs/ObservationSummary",
        +    "relation": "#/$defs/RelationSummary"
        +  },
        +  "propertyName": "type"
        +}
      • addedOutput schema / $defs / ContextResult / properties / primary_result / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/$defs/EntitySummary"
        +  },
        +  {
        +    "$ref": "#/$defs/RelationSummary"
        +  },
        +  {
        +    "$ref": "#/$defs/ObservationSummary"
        +  }
        +]
      • removedOutput schema / $defs / ContextResult / properties / related_results / items / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/EntitySummary"
        -  },
        -  {
        -    "$ref": "#/$defs/RelationSummary"
        -  },
        -  {
        -    "$ref": "#/$defs/ObservationSummary"
        -  }
        -]
      • addedOutput schema / $defs / ContextResult / properties / related_results / items / discriminator
        Added value: +{
        +  "mapping": {
        +    "entity": "#/$defs/EntitySummary",
        +    "observation": "#/$defs/ObservationSummary",
        +    "relation": "#/$defs/RelationSummary"
        +  },
        +  "propertyName": "type"
        +}
      • addedOutput schema / $defs / ContextResult / properties / related_results / items / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/$defs/EntitySummary"
        +  },
        +  {
        +    "$ref": "#/$defs/RelationSummary"
        +  },
        +  {
        +    "$ref": "#/$defs/ObservationSummary"
        +  }
        +]
      • addedOutput schema / $defs / EntitySummary / properties / type / const
        Added value: +"entity"
      • addedOutput schema / $defs / ObservationSummary / properties / type / const
        Added value: +"observation"
      • addedOutput schema / $defs / RelationSummary / properties / type / const
        Added value: +"relation"
    • Changedrecent_activity9 fields changed
      • removedOutput schema / $defs / ContextResult / properties / primary_result / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/EntitySummary"
        -  },
        -  {
        -    "$ref": "#/$defs/RelationSummary"
        -  },
        -  {
        -    "$ref": "#/$defs/ObservationSummary"
        -  }
        -]
      • addedOutput schema / $defs / ContextResult / properties / primary_result / discriminator
        Added value: +{
        +  "mapping": {
        +    "entity": "#/$defs/EntitySummary",
        +    "observation": "#/$defs/ObservationSummary",
        +    "relation": "#/$defs/RelationSummary"
        +  },
        +  "propertyName": "type"
        +}
      • addedOutput schema / $defs / ContextResult / properties / primary_result / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/$defs/EntitySummary"
        +  },
        +  {
        +    "$ref": "#/$defs/RelationSummary"
        +  },
        +  {
        +    "$ref": "#/$defs/ObservationSummary"
        +  }
        +]
      • removedOutput schema / $defs / ContextResult / properties / related_results / items / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/EntitySummary"
        -  },
        -  {
        -    "$ref": "#/$defs/RelationSummary"
        -  },
        -  {
        -    "$ref": "#/$defs/ObservationSummary"
        -  }
        -]
      • addedOutput schema / $defs / ContextResult / properties / related_results / items / discriminator
        Added value: +{
        +  "mapping": {
        +    "entity": "#/$defs/EntitySummary",
        +    "observation": "#/$defs/ObservationSummary",
        +    "relation": "#/$defs/RelationSummary"
        +  },
        +  "propertyName": "type"
        +}
      • addedOutput schema / $defs / ContextResult / properties / related_results / items / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/$defs/EntitySummary"
        +  },
        +  {
        +    "$ref": "#/$defs/RelationSummary"
        +  },
        +  {
        +    "$ref": "#/$defs/ObservationSummary"
        +  }
        +]
      • addedOutput schema / $defs / EntitySummary / properties / type / const
        Added value: +"entity"
      • addedOutput schema / $defs / ObservationSummary / properties / type / const
        Added value: +"observation"
      • addedOutput schema / $defs / RelationSummary / properties / type / const
        Added value: +"relation"
  3. 19 tool updates
    • First observedbuild_context
    • First observedcanvas
    • First observedcreate_memory_project
    • First observeddelete_note
    • First observeddelete_project
    • First observededit_note
    • First observedget_current_project
    • First observedlist_directory
    • First observedlist_memory_projects
    • First observedmove_note
    • First observedread_content
    • First observedread_note
    • First observedrecent_activity
    • First observedsearch_notes
    • First observedset_default_project
    • First observedswitch_project
    • First observedsync_status
    • First observedview_note
    • First observedwrite_note

TDQS

B3/5.0
Disambiguation3/5

There is significant overlap between several tools, creating confusion. For example, 'search' and 'search_notes' appear to serve very similar purposes, and 'read_note' and 'view_note' both seem to retrieve notes with unclear distinctions. However, descriptions help differentiate some tools like 'edit_note' versus 'write_note', preventing complete ambiguity.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., 'create_memory_project', 'delete_note', 'list_directory'), which is clear and predictable. Minor deviations exist, such as 'build_context' and 'canvas' not following this pattern, but they are exceptions rather than the rule, maintaining overall readability.

Tool Count3/5

With 17 tools, the count is borderline high for a memory management server, feeling slightly heavy but not excessive. It covers various operations like CRUD for notes and projects, but the overlap suggests some tools could be consolidated, making the set feel a bit bloated for the domain.

Completeness4/5

The tool set provides good coverage for memory and note management, including create, read, update, delete, search, and project handling. Minor gaps exist, such as no explicit tool for updating project details or managing links beyond moving notes, but core workflows are well-supported, allowing agents to work around these limitations.

Maintenance

ActivityActive
ResponsivenessResponsive

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
    B
    quality
    D
    maintenance
    Stores AI memories as Markdown files for visualization in Obsidian's graph view, allowing users to create knowledge graphs with entities, relations, and observations.
    9
    30
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides persistent memory functionality for AI conversations by creating, managing and querying entities and relationships in a knowledge graph. Features SQLite storage, advanced search capabilities, and Windows auto-start integration for long-term AI memory retention.
    18
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/basicmachines-co/basic-memory'

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