Skip to main content
Glama

okf-mcp

An MCP server that gives LLMs full read/write access to an Open Knowledge Format (OKF) v0.1 knowledge bundle — usable as structured, persistent long-term memory.

Built with FastMCP and UV.


What is OKF?

OKF represents knowledge as a directory of plain markdown files with YAML frontmatter. Every file is a concept:

---
type: Memory          # REQUIRED — what kind of thing this is
title: Project kickoff notes
description: Key decisions from the 2026-07-12 kickoff meeting
tags: [project-alpha, decisions]
timestamp: 2026-07-12T09:00:00Z
---

# Decisions

- Use OKF as the canonical knowledge format.
- Bundle stored in git alongside the codebase.

Concepts are organised in a directory hierarchy and can cross-link to each other with standard markdown links. Two reserved filenames have special meaning: index.md (directory listing) and log.md (change history).


Related MCP server: dragon-brain

MCP Tools

Tool

Description

list_concepts

List all concepts (or a subdirectory)

get_concept

Read a full concept by ID

search_concepts

Full-text + tag + type search

get_index

Read an index.md file

get_log

Read a log.md file

create_concept

Create a new concept (fails if exists)

update_concept

Update body and/or frontmatter fields

delete_concept

Delete a concept

update_index

Write a custom index.md

generate_index

Auto-generate index.md from frontmatter

append_log_entry

Append a dated entry to log.md


Quick Start

Requirements

  • Python 3.11+

  • UV

Install

git clone <this-repo>
cd okf-mcp
uv sync

Run (stdio — for MCP clients)

uv run okf-mcp

Run (HTTP — for testing)

uv run fastmcp run src/okf_mcp/server.py:mcp --transport http --port 8000

Run with Docker

The Docker image serves MCP over HTTP on port 8000. Mount the bundle so memories persist when the container is recreated:

docker build -t okf-mcp .
docker run --rm -p 8000:8000 \
  -v okf-bundle:/app/bundle \
  okf-mcp

The MCP endpoint is http://localhost:8000/mcp. To use this repository's local bundle instead of a named Docker volume, run:

docker run --rm \
  --name okf-mcp \
  --user "$(id -u):$(id -g)" \
  -p 8000:8000 \
  --mount type=bind,src=/home/matteo/Documents/Dev/Personal/okf-mcp/bundle,dst=/app/bundle,rw \
  okf-mcp

The --user option prevents Docker from creating root-owned files in the mounted bundle. To run the container in the background:

docker run -d \
  --name okf-mcp \
  --restart unless-stopped \
  --user "$(id -u):$(id -g)" \
  -p 8000:8000 \
  --mount type=bind,src=/home/matteo/Documents/Dev/Personal/okf-mcp/bundle,dst=/app/bundle,rw \
  okf-mcp

Use docker logs -f okf-mcp to view logs and docker stop okf-mcp to stop it.

Configure the bundle path

By default the bundle lives at ./bundle (relative to the working directory). Override it with the OKF_BUNDLE_PATH environment variable:

OKF_BUNDLE_PATH=/path/to/my/bundle uv run okf-mcp

VS Code Integration

Local UV server with GitHub Copilot

  1. Install VS Code and the Python extension.

  2. Install UV.

  3. Install and sign in to the GitHub Copilot extensions.

  4. Open this repository as a folder in VS Code.

  5. Run uv sync once in the integrated terminal.

  6. Open the Command Palette with Ctrl+Shift+P, run MCP: List Servers, select okf-knowledge-server, and choose Start if necessary.

  7. Open Copilot Chat, switch to Agent mode, and allow the server tools when prompted.

The repository includes .vscode/mcp.json. It starts the local server with UV and uses ${workspaceFolder}/bundle as the memory store, so no manual MCP configuration is required in VS Code.

Docker server with GitHub Copilot

If the Docker container is running on port 8000, change .vscode/mcp.json to use the HTTP endpoint instead of the local stdio server:

{
  "servers": {
    "okf-knowledge-server": {
      "type": "http",
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

Restart the MCP server from the Command Palette after saving the file. Use either the UV configuration or the Docker configuration, not both at the same time.

Cline

Cline uses its own MCP settings file. For the local UV server, configure okf-knowledge-server with the project path and bundle path:

"okf-knowledge-server": {
  "type": "stdio",
  "command": "uv",
  "args": [
    "run",
    "--project",
    "/home/matteo/Documents/Dev/Personal/okf-mcp",
    "okf-mcp"
  ],
  "env": {
    "OKF_BUNDLE_PATH": "/home/matteo/Documents/Dev/Personal/okf-mcp/bundle"
  },
  "disabled": false,
  "autoApprove": []
}

For the Docker server, use an HTTP entry instead:

"okf-knowledge-server": {
  "type": "streamableHttp",
  "url": "http://127.0.0.1:8000/mcp",
  "disabled": false,
  "autoApprove": []
}

After changing Cline's settings, restart or reconnect the MCP server in the Cline MCP panel. Ask Cline to list the available tools; it should show get_concept, create_concept, search_concepts, and the other OKF tools.


Security

  • All file paths are validated against BUNDLE_ROOT to prevent path traversal.

  • Reserved filenames (index.md, log.md) are protected from concept create/update/delete operations.


Project Layout

src/okf_mcp/
├── __init__.py   — exports `mcp`
└── server.py     — FastMCP server with all tools

bundle/           — Default OKF knowledge bundle (git-tracked)
└── index.md      — Bundle root index

Available Tools

11 tools
append_log_entryA

Append a dated entry to the log.md file for a directory.

Entries are grouped under today's ISO 8601 date heading, newest first. Creates log.md if it does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory where log.md lives. Empty = bundle root.
actionYesBold action word: "Creation", "Update", "Deletion", "Deprecation", etc.
descriptionYesWhat was done. May use markdown links to concept IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses key behaviors: entries are grouped under today's ISO 8601 date heading, newest first, and log.md is created if absent. It stops short of describing failure conditions (e.g., invalid directory), but the disclosed behaviors are relevant and non-obvious.

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

Conciseness5/5

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

The description is three compact sentences, front-loading the primary action and adding only essential behavioral details. No filler or repetition.

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?

The tool is a simple append operation with a full input schema and an output schema (per context signals). The description covers core behaviors (date grouping, file creation) and doesn't need to explain return values due to the output schema. It could mention what happens on invalid paths, but that's not essential for the common case.

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

Parameters3/5

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

The input schema already provides full descriptions for all three parameters (path, action, description), and the tool description adds little beyond restating 'directory' for path. Since schema coverage is 100%, the baseline of 3 applies; the description does not enrich parameter understanding further.

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

Purpose5/5

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

The description opens with 'Append a dated entry to the log.md file for a directory,' which clearly identifies the verb (append), resource (log.md), and scope (directory). This distinguishes it from sibling read tools like get_log and other file operations like update_index.

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 clearly states the tool is for appending to a log file, making its usage context obvious. However, it doesn't explicitly mention when not to use it or name alternative tools, though the context is clear enough for an agent to select it for write operations.

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

create_conceptA

Create a new OKF concept document.

Fails if the concept already exists — use update_concept to modify existing ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoMarkdown body content.
tagsNoShort tag strings for cross-cutting categorisation.
typeYesConcept type (required by OKF spec). Examples: "Memory", "Note", "Insight", "Table", "Metric", "Playbook", "API", "Reference", "Dataset".
titleNoHuman-readable display name.
resourceNoOptional URI for the underlying asset or source.
concept_idYesPath relative to bundle root, without .md extension. Use subdirectories to organise knowledge: "memory/session_2024_01", "tables/orders", "metrics/wau"
descriptionNoOne-sentence summary (used in index files and search).
extra_frontmatterNoAdditional frontmatter key-value pairs.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses a critical behavioral trait: the tool fails if the concept already exists, preventing accidental overwrites. It also provides a fallback (update_concept). While it doesn't cover every possible side effect, the most important failure mode is clearly stated, which is above baseline for a create operation.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, and every clause earns its place. The failure condition and alternative are conveyed with zero waste.

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?

The description is highly complete for an 8-parameter tool with 100% schema coverage, output schema present, and sibling context. It covers the core purpose, usage distinction, and failure mode. Minor gaps like OKF-specific conventions are addressed by the schema, so the description is sufficient to guide invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no information about parameters beyond the schema's existing thorough explanations (e.g., concept_id path, type examples). It doesn't compensate with extra semantics but doesn't need to given the schema quality.

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 uses a specific verb+resource ('Create a new OKF concept document') and clearly distinguishes itself from the sibling update_concept by stating 'use update_concept to modify existing ones.' This leaves no ambiguity about what the tool does and how it differs from related tools.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (for new concepts) and when to use the alternative ('Fails if the concept already exists — use update_concept to modify existing ones'). This covers both when and when-not, satisfying the highest bar for usage guidance.

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

delete_conceptA

Delete a concept document from the bundle.

Also removes any parent directories that become empty after deletion (stopping at the bundle root).

ParametersJSON Schema
NameRequiredDescriptionDefault
concept_idYesThe concept to delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 goes beyond the obvious 'delete' by explicitly stating that empty parent directories are also removed (stopping at the bundle root), which is a non-obvious side effect that could affect the agent's decisions. However, it does not mention irreversibility or permission requirements, though the word 'delete' implicitly conveys destructiveness.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the primary action, and the second sentence adds a crucial side-effect. Every word earns its place, with no redundant or filler content.

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

Completeness5/5

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

For a simple single-parameter tool with an output schema, the description fully covers the main action and the important side effect. It does not need to explain return values because the output schema exists, and there are no complex prerequisites or other parameters to document. The description is sufficiently complete for an agent to select and invoke this tool correctly.

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

Parameters3/5

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

The schema has 100% coverage for the single parameter concept_id, and the description does not add further semantics beyond what the schema provides. It mentions 'concept document' but does not clarify the format or constraints of concept_id, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Delete') and resource ('concept document from the bundle'). It also distinguishes itself from sibling CRUD tools by naming the delete operation and adds a meaningful side-effect detail about directory cleanup.

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 (deletion of a concept) but does not explicitly discuss when to use it versus alternatives like update_concept, nor does it mention any exclusions or prerequisites. The verb 'delete' and resource indication provide enough context for basic usage, but no explicit guidance is given.

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

generate_indexA

Auto-generate an index.md for a directory from existing concept frontmatter.

Scans only the immediate children of the directory (one level deep). Writes and returns the generated index content.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path relative to bundle root. Empty = bundle root.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 tool 'Writes and returns' the generated content and limits scanning to immediate children. However, it does not specify whether it overwrites an existing index.md, what happens if no frontmatter exists, or any permission requirements—key behaviors for a write operation.

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

Conciseness5/5

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

The description is two sentences, front-loads the core action ('Auto-generate an index.md'), and avoids any redundant or extraneous information. Every sentence earns its place.

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

Completeness4/5

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

Given a simple tool with one parameter and an output schema, the description covers the main purpose, the input scope, and the fact that it writes and returns content. The output schema presumably explains return values, so not detailing them is acceptable. The only minor gap is the overwrite behavior, but overall it is adequately complete.

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

Parameters3/5

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

The sole parameter `path` is fully described in the schema ('Directory path relative to bundle root. Empty = bundle root.'), and the tool description adds no additional semantic detail beyond restating that it is a directory. With 100% schema coverage, the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'Auto-generate an index.md for a directory.' It distinguishes itself from sibling tools like update_index and get_index by focusing on generation rather than modification or retrieval. The additional context about scanning one level deep further clarifies its scope.

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 by stating it auto-generates from existing concept frontmatter, but it does not explicitly say when to use this tool versus alternatives like update_index. It also lacks exclusions or prerequisite conditions, though the one-level-deep scan hint is a contextual constraint.

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

get_conceptA

Retrieve a full concept document by its ID.

Returns the concept's frontmatter metadata and its markdown body.

ParametersJSON Schema
NameRequiredDescriptionDefault
concept_idYesPath relative to bundle root, without the .md extension. Examples: "tables/orders", "memory/my_note", "metrics/wau"

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It does disclose the return behavior: 'Returns the concept's frontmatter metadata and its markdown body,' giving the agent a clear expectation of the response format. However, it does not address what happens if the ID is invalid or not found, which is a minor gap.

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

Conciseness5/5

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

The description is two succinct sentences. The first sentence states the core action, and the second provides valuable detail about the return payload. No filler or redundant information is present.

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

Completeness5/5

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

For a simple get-by-ID tool with a single fully documented parameter and an output schema present, the description is complete. It covers the purpose and the nature of the returned content, while the schema handles parameter details and the output schema covers return structure. No additional context is needed.

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

Parameters3/5

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

Schema description coverage is 100%, with the concept_id parameter already documented as a path relative to bundle root with examples. The tool description adds no additional parameter semantics, so per the baseline for high coverage, a score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action: 'Retrieve a full concept document by its ID.' It identifies the specific resource (concept document) and method (by ID), which differentiates it from siblings like search_concepts and list_concepts. This is a specific verb+resource pair with no ambiguity.

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 when you have a concept ID ('by its ID'), but it does not explicitly say when to use this tool versus alternatives like search_concepts or list_concepts. There are no explicit exclusions or mentions of alternative tools for different scenarios, leaving usage guidance to be inferred.

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

get_indexA

Get the index.md content for a directory in the bundle.

Index files list the directory's concepts for progressive disclosure. Returns empty string if no index exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path relative to bundle root. Leave empty for the root index.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses an important edge case: 'Returns empty string if no index exists.' It also clarifies the input scope ('directory in the bundle'). While it doesn't mention permissions or error handling, these are less critical for a straightforward read operation.

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

Conciseness5/5

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

The description is two sentences: first states the action, second explains purpose and return behavior. It is front-loaded, concise, and every sentence adds value.

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

Completeness5/5

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

The tool is simple (one optional parameter, output schema exists). The description covers the main behavior, the empty-string edge case, and the purpose of index files, making it complete for an agent to correctly invoke the tool.

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

Parameters3/5

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

The schema description coverage is 100%, fully describing the path parameter. The tool description adds no additional parameter semantics, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get the index.md content for a directory in the bundle.' It uses a specific verb (Get) and resource (index.md content) and distinguishes itself from siblings like get_concept or get_log by focusing on directory-level index files.

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

Usage Guidelines4/5

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

The description gives clear context by explaining that index files list directory concepts for progressive disclosure, implying when this tool is appropriate. However, it does not explicitly name alternatives or provide when-not-to-use guidance, so it falls short of a 5.

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

get_logA

Get the log.md content for a directory in the bundle.

Log files contain the chronological history of changes. Returns empty string if no log exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path relative to bundle root. Leave empty for the root log.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the empty-string return behavior and the path scope relative to bundle root. The verb 'get' implies a read-only operation, and the edge case handling is useful. It does not mention permissions or other side effects, but for a simple read tool this is sufficient.

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

Conciseness5/5

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

The description is three concise sentences, front-loaded with the main action. Each sentence provides value: the purpose, the context of log files, and the edge-case behavior. There is no unnecessary wording.

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

Completeness5/5

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

For a simple tool with one optional parameter and an output schema, the description is complete. It covers the core functionality, the nature of the content, and the empty-string return behavior, which is sufficient for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents the path parameter. The description adds no additional semantics beyond what the schema states, aligning with the baseline score for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool retrieves log.md content for a directory, with a specific verb and resource. It distinguishes itself from siblings like get_concept and get_index by focusing on log files, and adds context that log files contain chronological history.

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

Usage Guidelines4/5

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

The description implies usage for retrieving chronological change history via 'Log files contain the chronological history of changes.' It does not explicitly mention alternatives or exclusions, but no direct sibling tool serves the same purpose (e.g., append_log_entry is for writing), so the guidance is adequate.

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

list_conceptsA

List all concepts in the bundle (or a subdirectory).

Returns concept_id, type, title, description, tags, and timestamp for each concept. Reserved files (index.md, log.md) are excluded.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoSubdirectory to list, relative to the bundle root. Leave empty to list the entire bundle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosure. It explicitly states the return fields (concept_id, type, title, description, tags, timestamp) and the exclusion of reserved files (index.md, log.md). However, it does not clarify recursion behavior, pagination, or sorting, which are relevant for a listing 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 two sentences, front-loaded with the primary purpose, followed by return fields and exclusion behavior. Every sentence adds value, and there is no verbosity or repetition of schema information.

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 output schema exists and annotations are absent, the description covers purpose, return fields, and an important exclusion. It is slightly incomplete regarding recursion/pagination behavior, but for a simple list tool with a single parameter, it is largely adequate.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already fully explains the 'path' parameter ('Subdirectory to list, relative to the bundle root. Leave empty to list the entire bundle.'). The description adds no further parameter-level semantics beyond restating the subdirectory concept, so the baseline 3 applies.

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 uses a specific verb and resource ('List all concepts in the bundle') and clearly scopes behavior to subdirectories. It distinguishes this from siblings like get_concept (single) and search_concepts (filtered), making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when you need to enumerate concepts) but does not explicitly mention alternatives or exclusions. Sibling names like search_concepts are not referenced, so the agent must infer the distinction. No guidance is given for when NOT to use this tool.

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

search_conceptsA

Search concepts by full-text query, tags, and/or type.

Case-insensitive substring search across concept IDs, titles, descriptions, and body content. All provided filters are ANDed together.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRestrict the search to a subdirectory.
tagsNoReturn only concepts that carry ALL of these tags.
queryNoText to search for. Matched against concept ID, title, description, and body.
type_filterNoReturn only concepts of exactly this type (case-insensitive).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral transparency burden. It discloses key behaviors: case-insensitive substring search across specific fields, and AND-combination of all provided filters. This adds meaningful context beyond basic search semantics, though it doesn't cover pagination or edge cases.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action and followed by precise behavioral details. No filler or redundancy; every sentence earns its place.

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

Completeness4/5

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

Given 4 optional parameters and an existing output schema, the description covers the essential search scope and filter combination logic. It doesn't mention pagination or ordering, but these are likely covered by the output schema or default behavior, not required for basic understanding.

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

Parameters4/5

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

Schema coverage is 100%, providing baseline 3. The description adds semantic value by explaining how parameters interact: all filters are ANDed together, and search is case-insensitive substring across multiple fields. This enriches understanding beyond individual parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool's function: search concepts by full-text query, tags, and/or type. It uses a specific verb and resource, and distinguishes from siblings like get_concept (single concept retrieval) and list_concepts (listing without search filters) by indicating the search-based scope.

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?

Usage context is clear: use this tool when you need to find concepts matching a query, tags, or type. It doesn't explicitly name alternatives or exclusion cases, but the search-focused description implies a distinct role among siblings.

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

update_conceptA

Update an existing OKF concept document.

Merges frontmatter_updates into existing metadata and refreshes the timestamp. Pass body=null to keep the existing body unchanged. Set a frontmatter key to null to remove it.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoNew full markdown body. null keeps the existing body.
concept_idYesThe concept to update.
frontmatter_updatesNoPartial frontmatter dict merged into the existing one. Setting a key's value to null removes it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility. It discloses key behaviors: merging frontmatter_updates into existing metadata, refreshing the timestamp, and null semantics for body and frontmatter keys. This is substantial, though it does not mention permissions or error conditions.

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 three sentences, front-loaded with the primary action and followed by two critical behavioral clarifications. Every sentence earns its place with no redundancy or filler.

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

Completeness4/5

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

For a moderate-complexity update tool, the description covers essential behaviors: merge semantics, timestamp refresh, and null handling for body/frontmatter. The output schema covers return values, so no need to describe them. It could benefit from explicit prerequisite or permission notes, but overall it is sufficiently complete for agent invocation.

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

Parameters4/5

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

The input schema already describes all parameters at 100% coverage. The description adds meaning by clarifying that frontmatter_updates are merged (partial update) and that null frontmatter keys remove them, which goes beyond the schema's minimal descriptions. Body null behavior is also reinforced.

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 'Update an existing OKF concept document,' using a specific verb ('Update') and a specific resource ('OKF concept document'). This effectively distinguishes it from sibling tools like create_concept, delete_concept, and get_concept.

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

Usage Guidelines4/5

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

The phrase 'Update an existing' provides clear context that this tool is for modifying existing concepts, not creating new ones or deleting. However, it does not explicitly mention alternatives or when not to use it, so it lacks explicit exclusions.

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

update_indexB

Create or overwrite an index.md file for a directory.

Index files have no frontmatter (except the bundle root which may include okf_version) and list the directory's concepts for progressive disclosure. See OKF spec §6 for the recommended format.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path relative to bundle root. Empty = bundle root.
contentNoFull markdown content for the index file.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It explicitly states 'Create or overwrite,' which clearly warns of mutation and potential destruction of existing content. It also adds useful detail about frontmatter exceptions. However, it doesn't disclose other potential side effects like directory creation, permissions, or idempotency, leaving some behavioral 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 concise and well-structured. The first sentence delivers the core purpose. The second paragraph provides necessary context about index file format and a spec reference. Every sentence earns its place, and there is no redundant or filler content.

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

Completeness3/5

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

The tool has an output schema, so return values need not be explained. The description gives some context about index file formatting and references a spec. However, it does not address the relationship to the 'generate_index' sibling, which is a notable gap given the tool's role as a manual alternative. The description is functional but not fully complete in guiding correct usage.

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

Parameters3/5

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

Schema description coverage is 100%, and both 'path' and 'content' have clear descriptions in the schema. The description adds no additional semantic meaning for parameters beyond what the schema already provides. Per the rubric, baseline is 3, and the description doesn't go beyond that.

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 a specific verb ('Create or overwrite') and resource ('an index.md file for a directory'). It explains what index files are for ('list the directory's concepts for progressive disclosure'). However, it doesn't explicitly distinguish this from the sibling 'generate_index' tool, so it misses the top score for 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 Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It doesn't mention that 'generate_index' might be a better choice for automatic generation, nor does it state any exclusions or prerequisites. The implied usage is 'when you need to create or overwrite an index manually,' but no explicit guidance is provided.

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

Tool Schema Changelog

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

  1. 11 tool updatesv0.1.0
    • First observedappend_log_entry
    • First observedcreate_concept
    • First observeddelete_concept
    • First observedgenerate_index
    • First observedget_concept
    • First observedget_index
    • First observedget_log
    • First observedlist_concepts
    • First observedsearch_concepts
    • First observedupdate_concept
    • First observedupdate_index

TDQS

A4.1/5.0

Scored across 11 tools

Disambiguation4/5

Each tool targets a distinct resource or action, but update_index and generate_index both write index.md and could be confused. Otherwise, get_concept, get_index, get_log, search, CRUD, and list are clearly separated.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case, e.g., get_concept, create_concept, update_index, append_log_entry. The only minor deviation is list_concepts using plural, but the pattern remains highly predictable.

Tool Count5/5

With 11 tools, the set is well-scoped for managing an OKF bundle. It covers concept CRUD, search, index handling, and log entries without excessive specialization or redundancy.

Completeness5/5

The server provides thorough coverage for concept lifecycle (create, read, update, delete, list, search) plus index and log management. Missing delete_index/log is not a gap since those files are overwritten or managed through other tools.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A local MCP memory server giving LLMs a persistent, auditable memory fabric with temporal awareness, relationship tracking, and contradiction detection.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Open-source MCP server that gives any LLM long-term memory using a knowledge graph and vector search hybrid. It stores entities, observations, and relationships, enabling semantic recall across sessions with automatic clustering and fail-loud infrastructure.
    50
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides persistent memory and contextual awareness to language models, enabling project onboarding, recall of architectural rules, and code consistency across sessions.
    32
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A lightweight MCP server that provides long-term memory for LLMs by storing and retrieving important facts, decisions, and preferences through smart semantic search and automatic organization.
    12
    MIT