Skip to main content
Glama

okf-mcp

okf-mcp is a local-first consumer, validator, graph index, CLI, and MCP server for Open Knowledge Format v0.2.

It consumes an OKF bundle directory of Markdown files with YAML frontmatter. An optional workspace mode can federate several bundles. Concepts are exposed through CLI commands and MCP resources and tools for validation, structured search, graph navigation, provenance inspection, and proposal-based authoring.

The core intentionally has no database, embeddings, build step, or hosted-service dependency. It uses js-yaml for safe YAML, CommonMark for Markdown structure, MiniSearch for in-memory BM25+ text retrieval, and the official Model Context Protocol TypeScript SDK v2 for stdio MCP. Local root mode makes no network calls. Optional remote loading fetches public Markdown concepts and only their explicitly referenced inert assets from GitHub. Nothing in the v0.2 computation support executes code or attests a receipt.

OKF v0.2 Support And Extensions

OKF v0.2 intentionally specifies a portable file format, not a serving or query runtime. okf-mcp keeps that boundary explicit:

Area

Official OKF v0.2

okf-mcp behavior

Bundle and identity

A directory tree of Markdown files; a Concept ID is its bundle-relative path without .md

--root maps directly to one bundle; okf:// is an optional workspace locator, not the portable Concept ID

Concept metadata

Required type; recommended title, description, resource, and tags; unknown keys are allowed

Preserves extension fields and unknown types while reporting normative conformance separately from workspace policy

Provenance and lifecycle

sources, usage_window, generated, verified, status, and stale_after

Normalizes these fields for search, provenance traversal, trust tiers, and deterministic freshness checks

References

Markdown links and path-valued resource, sources[].resource, computation, executor.resource, and attester.resource fields

Builds graph edges and bounded inert asset snapshots without executing or implicitly fetching referenced code

Attested Computation

Defines contract fields and an informative consumer flow while deferring runtime wire protocols and attester packaging

Statically inspects contracts and digests, checks declared parameter and receipt field names, and never executes or claims attestation

v0.1 compatibility

Allows timestamp fallback when the whole generated mapping is absent and # Citations fallback when the sources key is absent

Consumes both forms and adds review-only migration checks and proposals

The following are okf-mcp extensions rather than requirements of the format:

  • CLI, MCP, and HTTP interfaces; in-memory search and graph views

  • optional multi-bundle okf.project.yaml workspaces and typed relations

  • compatibility id, aliases, and okf:// locators

  • proposal-backed authoring with explicit acceptance

  • bounded GitHub remote loading and explicitly mapped pinned Git sources

  • generator plugins and stricter opt-in project policies such as strictLinks

Related MCP server: md-graph

Install And Run

Node 22 or newer is required.

Install from the GitHub release:

git clone --branch v0.8.0 https://github.com/mfdaves/okf-mcp.git
cd okf-mcp
npm ci
node bin/okf-mcp.js --root ./path/to/okf validate

Pin the published version for reproducible use:

npx -y @mfdaves/okf-mcp@0.8.0 --version
npx -y @mfdaves/okf-mcp@0.8.0 --root ./path/to/okf validate

For a persistent installation:

npm install --global @mfdaves/okf-mcp@0.8.0

okf --version
okf --root ./path/to/okf validate
okf-mcp --root ./path/to/okf mcp

To work from the current source branch:

git clone https://github.com/mfdaves/okf-mcp.git
cd okf-mcp
npm ci
npm test
node bin/okf-mcp.js --version

--root accepts one local OKF bundle directory and is the recommended okf-mcp interface for a single bundle. The portable identity of each concept is its extensionless path inside that root.

--bundle accepts either a path or id=path. Multiple flags remain supported for compatibility. --project and its bundles: list are an optional okf-mcp federation/authoring extension, not part of OKF v0.2.

--remote-bundle accepts id=https://github.com/<owner>/<repo>/tree/<ref>/<path>. It fetches public Markdown first, then only bundle-local files explicitly named by standard v0.2 resource fields. Remote content remains read-only and inert.

--inspect prints a compact graph summary and exits. Without --inspect and without an explicit command, the process starts a stdio MCP server.

The package exposes both okf and okf-mcp binaries when installed. Without an explicit source, the CLI first discovers the nearest root index.md declaring okf_version; nearest-project discovery remains a compatibility fallback.

CLI exit statuses are 0 for success, 1 for validation or operational failure, and 2 for invalid usage. Unknown options are rejected.

Included OKF Reference

This repository publishes a self-describing OKF bundle for the product, its runtime boundaries, interfaces, authoring workflows, and safety policy. Its portable entry Concept ID is overview/okf-mcp; okf://okf-mcp/overview/okf-mcp remains the workspace/MCP resource locator.

Validate and query the bundled reference from a checkout or installed package:

okf --root okf/bundles/okf-mcp validate
okf --root okf/bundles/okf-mcp search "proposal"
okf --root okf/bundles/okf-mcp concept overview/okf-mcp

Load the reference bundle directly from this release:

okf --remote-bundle okf-mcp=https://github.com/mfdaves/okf-mcp/tree/v0.8.0/okf/bundles/okf-mcp --inspect

The @mfdaves/okf-mcp npm package includes both okf.project.yaml and the complete reference bundle.

Optional Multi-Bundle Project Config

Use okf.project.yaml only when one process must federate multiple roots, configure generators, or enforce a project-wide relation vocabulary:

project: Example
strictLinks: false
bundles:
  - id: app
    root: okf/bundles/app
    include: ["**/*.md"]
    exclude: ["archive/**"]
  - id: data
    root: okf/bundles/data
relationTypes:
  - deployed_by
remoteBundles:
  - id: shared
    url: https://github.com/example/okf-atlas/tree/main/bundles/shared
    include: ["public/**"]
    exclude: ["drafts/**"]
plugins:
  - name: docs
    type: filesystem
    root: docs
    output: okf/bundles/app/generated/docs
    bundle: app

Run project commands:

okf --project okf.project.yaml validate
okf --project okf.project.yaml search "orders"
okf --project okf.project.yaml graph mermaid
okf --project okf.project.yaml generate
okf --project okf.project.yaml mcp
okf --project okf.project.yaml mcp --authoring
okf --project okf.project.yaml mcp --allow-remote-tool
OKF_WRITE_TOKEN=change-me okf --project okf.project.yaml serve
okf --remote-bundle shared=https://github.com/example/okf-atlas/tree/main/bundles/shared --inspect

Commands:

  • mcp

  • validate

  • graph [json|dot|mermaid]

  • search <query>

  • concept <concept-id-or-locator>

  • neighbors <concept-id-or-locator>

  • paths <from> <to>

  • provenance <uri>

  • edge-kinds

  • computation inspect|prepare|check-receipt

  • asset <okf-asset-uri>

  • source <concept-id-or-locator> <source-id>

  • migrate check|preview

  • generate

  • serve

serve options:

  • --host <host>: bind host, default 127.0.0.1

  • --port <port>: bind port, default 8765

  • --write-token <token>: bearer token for write endpoints; defaults to OKF_WRITE_TOKEN

  • --proposal-root <path>: proposal JSON directory; defaults to .okf-proposals under the selected local root or project

MCP Client Config

The npm-based examples below use the current published release. A source checkout can invoke its executable bin/okf-mcp.js with the same arguments.

Example client configuration:

{
  "mcpServers": {
    "okf": {
      "command": "npx",
      "args": [
        "-y",
        "@mfdaves/okf-mcp@0.8.0",
        "--root",
        "/absolute/path/to/okf",
        "mcp"
      ]
    }
  }
}

Project config mode, with read-only project helpers but without proposal mutations:

{
  "mcpServers": {
    "okf": {
      "command": "npx",
      "args": [
        "-y",
        "@mfdaves/okf-mcp@0.8.0",
        "--project",
        "/absolute/path/to/repo/okf.project.yaml",
        "mcp"
      ]
    }
  }
}

Add --authoring to enable proposal creation, acceptance, and rejection. For a smaller direct-write surface, add --write --actor <actor> to expose read-only okf_validate_changes and validated-batch okf_apply_changes; add --git-commit to commit each successful batch when the catalog is in a clean Git worktree. Add --allow-remote-tool to let MCP clients load arbitrary supported public remote bundles at runtime. Configured remote bundles remain readable without that runtime-loading flag.

The stdio server uses @modelcontextprotocol/server v2. It serves the modern 2026-07-28 MCP revision and the SDK's compatibility path for 2025-era clients, including 2025-11-25. The SDK owns protocol negotiation, framing, resource dispatch, tool dispatch, and advertised-schema validation.

Expected failures from a known tool, such as a missing concept, a read-only bundle, a failed remote fetch, invalid arguments, or a proposal conflict, are returned as MCP tool results with isError: true. Calls to tools that are not enabled are rejected by SDK dispatch. Unexpected implementation errors are masked instead of exposing internal details.

MCP Registry Metadata

server.json describes the npm package as the stdio server io.github.mfdaves/okf-mcp. Registry-aware clients should prompt for an absolute OKF root path, pass it through --root, and append the fixed mcp command.

Concept Identity And Extensions

Concept IDs are their bundle-relative Markdown paths with .md removed. This extensionless path is the portable OKF identity. okf-mcp also exposes a workspace-scoped compatibility locator:

okf://<bundle-id>/<extensionless-concept-id>

The former .md URI and a valid custom id remain compatibility lookup aliases. A bare Concept ID resolves only when unique across loaded bundles. For standalone aggregate catalogs, a URI-shaped portable path such as okf://services/queue.md also resolves when services/queue is globally unique and services is not a loaded bundle id. Exact canonical URIs always win; a known-bundle miss or ambiguous portable path stays unresolved. Reserved index.md and log.md resources retain their filenames because they are not concepts.

The id, aliases, and typed relations fields below are okf-mcp extensions. The standard v0.2 identity remains path-derived:

---
id: okf://app/routes/order-status
type: API Route
title: Order Status Route
description: Serves order status state.
aliases: [order-status]
tags: [api, orders]
relations:
  - type: consumes
    target: okf://data/tables/order_status
  - type: configured_by
    target: repo://src/routes/order-status.js
---

# Order Status Route

New content should use normal relative or bundle-root Markdown paths for internal links and extension relation targets. Existing okf:// targets remain supported; non-OKF schemes such as repo:// remain opaque compatibility references.

Pinned Git Sources

Code knowledge may live outside the code repository without recording a machine-specific path. Point a standard sources entry at a Git Repository concept and add the okf-mcp git extension below:

sources:
  - id: implementation
    resource: /repositories/application.md
    git:
      revision: 0123456789abcdef0123456789abcdef01234567
      path: src/application.js
      lines: { from: 10, to: 30 }

Map the repository concept only in the local process configuration:

okf --root /path/to/catalog \
  --repo repositories/application=/work/application \
  source architecture/application implementation

read_git_source and the source CLI command read the pinned blob from the mapped Git object database. They never read the dirty worktree or fetch. Missing mappings and unpinned revisions remain visible but unavailable. Repository mappings may point to normal checkouts, bare repositories, or mounted paths; credentials and local paths stay outside the OKF bundle.

Tools

  • list_bundles

  • list_concepts

  • get_concept

  • search_concepts

  • list_types

  • list_tags

  • list_relation_types

  • list_edge_kinds

  • get_provenance

  • inspect_attested_computation

  • read_bundle_asset

  • read_git_source

  • prepare_attested_computation

  • check_computation_receipt

  • check_v02_migration

  • load_remote_bundle

  • list_remote_bundles

  • okf_validate_concept

  • okf_suggest_concept_path

  • okf_propose_concept

  • okf_propose_update

  • okf_propose_attested_computation

  • okf_propose_v02_migration

  • okf_list_proposals

  • okf_get_proposal

  • okf_accept_proposal

  • okf_reject_proposal

  • okf_validate_changes

  • okf_apply_changes

  • get_graph

  • get_neighbors

  • get_subgraph

  • find_paths

  • graph_summary

  • validate_bundle

  • validate_project

  • export_graph

Most MCP tools are read-only over the current index. load_remote_bundle mutates only the server's in-memory index by fetching a public GitHub tree; it does not write files. Concept listing and search default to compact summaries; pass detail: "full" when navigation metadata, signals, ranking, or snippets are required. Relationship paths are deduplicated by node sequence even when parallel edge kinds connect the same concepts.

Every MCP tool includes a purpose-specific description, descriptions for its input parameters, and standard annotations covering read-only behavior, destructive behavior, idempotency, and external access.

Tool arguments are validated against the advertised input schemas before execution. Unsupported fields, missing required values, incorrect primitive types, and out-of-range integers are rejected without coercion. Unknown or disabled tool names remain protocol-level invalid-parameter errors.

Tool discovery and direct invocation use the same capability checks:

Mode

Normal proposals

Direct live write

Computation proposal

Runtime remote load

default

disabled

disabled

disabled

disabled

--authoring

enabled

disabled

disabled

disabled

--write --actor openai/gpt-5.6

disabled

enabled

disabled

disabled

--authoring --allow-computation-authoring

enabled

disabled

enabled

disabled

--allow-remote-tool

disabled

disabled

disabled

enabled

An explicit local root or project workspace exposes concept validation, path suggestion, and proposal inspection helpers. Proposal mutation tools require --authoring. The direct live tools instead require --write plus a truthful actor using human:<id>, process:<id>, or provider/model syntax. In normal single-root mode, callers omit bundle; it is required only to select among multiple project roots. Remote roots remain read only.

Generic concept tools cannot create or change an Attested Computation contract. okf_propose_attested_computation additionally requires --allow-computation-authoring and creates one coordinated review proposal for the concept plus an optional external computation file.

Live Concept Authoring

Start the server with the direct-write capability only when the MCP client/user approval boundary is sufficient review:

okf --root /path/to/catalog --write --actor openai/gpt-5.6 mcp

The agent sees one read-only batch validator and one destructive apply tool. It supplies structured concept fields rather than YAML; OKF serializes compatible Markdown frontmatter and stamps the configured generated.by plus one generated.at timestamp for the whole batch.

{
  "name": "okf_apply_changes",
  "arguments": {
    "message": "docs(okf): document order creation",
    "changes": [
      {
        "op": "create",
        "type": "MCP Tool",
        "title": "Create Order",
        "body": "# Create Order\n\nCreates a validated order.",
        "tags": ["orders", "mcp"],
        "sources": ["/repositories/orders-service.md"],
        "relations": [
          { "type": "related_to", "target": "/workflows/order-creation.md" }
        ]
      }
    ]
  }
}

Create paths are optional. The server first uses a strong dominant directory convention from existing same-type concepts within the requested prefix, then falls back to deterministic type/title slugs. okf_suggest_concept_path reports the strategy, evidence, path availability, and same-type/title matches so an available filename is not mistaken for a safe duplicate. Updates identify an existing uri; stale locators return bounded likely replacements, while scalar fields replace existing values and tags, sources, and relations use explicit add/remove patches. metadata carries extension frontmatter but cannot override identity, generation, collection, or computation fields. Paths and URIs are immutable during update: moving a concept changes its portable identity and remains a separate, intentionally unsupported operation.

Every 1–100 item batch is validated as one future graph, so concepts created together can reference one another and same-type/title conflicts are detected across creates and updates. Call okf_validate_changes with the complete intended batch to receive a time-of-check preview without writing files. Validation and apply share the same planner; apply repeats every check under the writer queue because revisions and Git state can change after a preview. Compact receipts are the v0.8 default; pass detail: "full" for the v0.7 planning layout. Effects expose structured relations and keep server-managed generation provenance separate from substantive changedFields.

The server writes nothing unless every candidate is valid, revision checks still match, and every target stays inside one writable bundle. Process-generated documents, generator output directories, hidden/control-plane paths such as .git/**, reserved files, and Attested Computation contracts are not live-write targets. Rollback checks revisions immediately before each restore and reports detected replacements as a partial rollback_conflict. That protection is best effort under the documented single-external-writer requirement; it is not a cross-process compare-and-swap guarantee.

Add --git-commit as server policy to create one commit per successful batch. A detected Git worktree must be completely clean and have a configured identity before publication. Active Git filter attributes and assume-unchanged/skip-worktree index flags block the operation so validation cannot execute configured filters or overlook hidden user changes; replace-object resolution is disabled so hidden replacement history cannot alter the parent tree. The server builds an isolated index from the validated Markdown bytes, creates that exact tree with commit-tree, publishes it with a compare-and-swap ref update, synchronizes only the affected ordinary-index paths afterward, and never pushes. Concurrent unrelated staged entries cannot enter the commit. A determinate commit failure leaves matching valid files as working-tree-only; an ambiguous ref-update timeout is reported as unknown unless the resulting commit tree can be proven. Non-Git catalogs are written normally. Every response makes the repository root, commit state, index state, target-byte state, and persistence boundary explicit.

Authoring Concepts

The reviewable proposal workflow remains available through MCP tools started with --authoring and through the HTTP API. Clients never need direct local file access.

MCP proposal flow:

{
  "name": "okf_propose_concept",
  "arguments": {
    "path": "tools/create-order.md",
    "frontmatter": {
      "type": "MCP Tool",
      "title": "Create Order",
      "relations": [
        {
          "type": "related_to",
          "target": "/workflows/order-creation.md"
        }
      ]
    },
    "body": "# Create Order\n\nCreates an order through the application MCP tool.",
    "message": "Document create_order for agents."
  }
}

Then call okf_accept_proposal with the returned proposal.id.

To correct an existing concept, read it with get_concept, then propose only the fields that need to change:

{
  "name": "okf_propose_update",
  "arguments": {
    "uri": "okf://app/tools/create-order",
    "frontmatter": {
      "title": "Create Order Tool",
      "description": "Creates a validated order."
    },
    "removeFrontmatterKeys": ["deprecatedField"],
    "message": "Correct outdated tool metadata."
  }
}

Omitted frontmatter fields and an omitted body are preserved. The concept URI cannot change through an update. Each update proposal records the source file revision, and acceptance checks it again immediately before replacing the file so detected concurrent changes are rejected.

Safety rules:

  • concept paths must be safe, non-hidden relative .md paths inside a writable bundle

  • concept writes cannot traverse symbolic links under a writable bundle

  • missing subdirectories are created only when a proposal is accepted

  • index.md and log.md cannot be authored as concepts

  • duplicate paths and duplicate okf:// IDs are rejected

  • updates cannot change concept identity and reject detected changes made after proposal creation

  • invalid IDs, invalid relation types, and broken internal OKF relations fail validation

  • external relation targets such as repo://... are allowed

  • direct batches are serialized within one process and validate the combined future graph before publication

  • independent processes still require external single-writer coordination

HTTP API

Start the HTTP server:

OKF_WRITE_TOKEN=change-me okf --root /path/to/catalog serve --host 127.0.0.1 --port 8765

Read/validation endpoints:

  • GET /health

  • GET /v1/bundles

  • POST /v1/concepts/validate

  • POST /v1/concepts/suggest-path

Proposal inspection and mutation endpoints require Authorization: Bearer <OKF_WRITE_TOKEN> because pending records can contain complete candidate Markdown and computation code:

  • GET /v1/proposals

  • GET /v1/proposals/:id

  • POST /v1/proposals

  • POST /v1/proposals/update

  • POST /v1/proposals/:id/accept

  • POST /v1/proposals/:id/reject

The default file-backed proposal store writes proposal JSON under .okf-proposals in the selected root or project. Accepted proposals write Markdown concepts into the selected local root.

POST /v1/concepts/validate and POST /v1/concepts/suggest-path do not persist anything. POST /v1/proposals persists only a proposal record. Only POST /v1/proposals/:id/accept writes a concept Markdown file.

Remote Bundles

Remote bundles let one workspace consume concepts published by another repository without vendoring them. For a host-agnostic setup, clone or mount an OKF repository from any Git host and pass its directory through --root; transport and synchronization remain outside the OKF specification.

Supported source:

  • Public GitHub repository tree URLs: https://github.com/<owner>/<repo>/tree/<ref>/<path>

Remote loading:

  • inventories the tree, fetches selected .md documents first, then fetches only explicitly referenced bundle-local assets

  • records resolved revision metadata, SHA256 digests, document/asset byte counts, and unresolved references

  • inventories remote paths but never downloads the contents of unreferenced .sql, .py, or binary files

  • keeps each remote bundle under its configured bundle id

  • supports include and exclude filters

  • resolves Markdown links inside the remote bundle path

  • enforces file count and byte limits

  • does not execute code from the remote repository

CLI examples:

okf --remote-bundle shared=https://github.com/example/okf-atlas/tree/main/bundles/shared --inspect
okf --project okf.project.yaml --remote-bundle vendor=https://github.com/example/vendor-okf/tree/main/bundles/catalog validate

MCP runtime loading:

Start the MCP server with --allow-remote-tool before calling load_remote_bundle.

{
  "name": "load_remote_bundle",
  "arguments": {
    "id": "shared",
    "url": "https://github.com/example/okf-atlas/tree/main/bundles/shared",
    "include": ["public/**"]
  }
}

Use list_remote_bundles to inspect what was loaded.

search_concepts accepts:

  • query

  • bundle

  • types

  • tagsAny

  • tagsAll

  • pathPrefix

  • frontmatter

  • linkedTo

  • linkedFrom

  • relationType

  • orphanOnly

  • statuses

  • trustTiers

  • freshness and deterministic asOf

  • hasSources

  • runtime and attestationReady

  • generatedBy and verifiedBy

  • detail (compact by default, or full)

  • limit

  • offset

list_concepts also accepts a text query and applies it together with its listing filters. Text search tokenizes case-insensitively and requires every query term, regardless of order. BM25+ ranks title, type, tags, aliases, description, path, and body matches; frontmatter remains available through exact structured filters but is not copied into the text index. Scores are relative within a result set and are not a stable cross-version scale. Compact results contain only uri, title, type, and description; title, type, and description are bounded, while full results remain lossless.

Queries are bounded to 512 characters and 16 terms. Prefix expansion, fuzzy matching, stemming, and stop-word removal are intentionally disabled so code identifiers and domain terminology remain literal. Punctuation-only queries return no matches. Tags and types are matched case-insensitively. Arbitrary frontmatter filters support exact scalar matching and array-contains matching. relationType selects concepts with an outgoing relation of that type.

The SDK regression suite also budgets a neutral four-step research path from actual serialized MCP text. It uses UTF-8 bytes divided by four as a deterministic estimate, not an exact model tokenizer or billing count, and guards both an absolute compact budget and a compact/full ratio.

Example:

{
  "query": "catalog",
  "types": ["API Route"],
  "tagsAll": ["api", "orders"],
  "limit": 10
}

For local relevance and performance checks, run the non-packaged development benchmark with a bundle root and an optional JSON array of { "query": "...", "expected": "path/or/concept-id" } judgments:

node --expose-gc scripts/search-benchmark.js \
  --root /path/to/okf \
  --qrels /path/to/qrels.json

It reports OKF and search-index build time, retained heap/RSS, p50/p95 query latency, Recall@10, MRR@10, and representative rankings. Search indexes are process-local and keyed to the parsed OKF index, so remote loads and accepted proposals receive a fresh index automatically.

Graph Behavior

As an okf-mcp graph projection, Markdown links become markdown_link edges, extension relations become typed relation edges, and standard v0.2 path-valued fields become resource, source, computation, executor, and attester edges. Internal concept references resolve to canonical nodes; explicitly referenced non-Markdown files resolve to okf-mcp okf-asset:// nodes; URLs and scope descriptors remain unfetched external or opaque leaves.

For navigation convenience, okf-mcp resolves links to a nested bundle directory to that directory's reserved index.md when there is no exact document target. This applies to local and remote bundles and to candidate validation during proposal authoring.

Graph tools return bounded JSON:

{
  "nodes": [
    {
      "id": "okf://app/routes/order-status",
      "bundle": "app",
      "path": "routes/order-status.md",
      "type": "API Route",
      "title": "Order Status Route",
      "tags": ["api", "orders"],
      "description": "Serves order status state."
    }
  ],
  "edges": [],
  "warnings": []
}

Use graph_summary first for counts by lifecycle, trust, freshness, runtime, readiness, and edge kind. Graph tools accept edgeKinds; pass includeExternal: true or includeAssets: true when those leaf nodes are needed.

Default relation types:

  • depends_on

  • produces

  • consumes

  • persists_to

  • materializes_to

  • configured_by

  • checked_by

  • owned_by

  • supersedes

  • related_to

Add project-specific relation types with relationTypes in okf.project.yaml.

Project paths in bundles and plugins must be relative paths that stay inside the directory containing okf.project.yaml. Absolute paths and ../ escapes are rejected.

Bundle include and exclude filters use simple path patterns:

  • exact file paths, such as services/order-status.md

  • directory prefixes, such as archive/

  • * for one path segment

  • ** for any nested path

Validation

validate, validate_bundle, and validate_project return separate conformant and validForProject fields plus structured diagnostics. valid remains a compatibility alias for validForProject.

OKF conformance covers, when the corresponding files are present:

  • parseable YAML mapping frontmatter on non-reserved concept documents

  • a non-empty type

  • the reserved structure of index.md and log.md

Unknown frontmatter keys and unknown concept type values do not fail conformance. The YAML parser supports nested mappings, arrays, block scalars, and other structures accepted by its safe YAML core schema; duplicate keys and unsupported custom tags are rejected.

Missing index.md files and broken cross-links do not fail OKF conformance. strictLinks affects only okf-mcp workspace validity (validForProject), not the normative conformant result.

Project validity additionally reports:

  • duplicate OKF URIs

  • broken internal Markdown links as advisories by default; set project strictLinks: true or pass --strict-links to make them project-invalid

  • invalid relation types

  • missing relation targets

  • broken okf:// relation targets

  • duplicate bundle IDs

  • invalid or escaping project paths

  • links that resolve outside the configured bundle root

  • missing bundle roots

The server keeps serving valid concepts from partial bundles.

Optional v0.2 families are normalized into signals. Malformed provenance, generation, verification, lifecycle, freshness, or computation metadata produces an advisory and never creates a fourth trust tier. Verification fails closed to unverified; absent status defaults to stable; freshness is evaluated at an explicit asOf date when supplied. Authoring is stricter than consumption and rejects malformed known v0.2 fields.

Attested Computation

inspect_attested_computation reports the runtime, declared parameters, sanctioned inline or file computation digest, executor receipt fields, attester reference, indexed assets, readiness, and diagnostics. prepare_attested_computation checks declared parameter names and returns digests without returning values. check_computation_receipt checks field presence without returning values, persisting the receipt, or claiming attestation.

okf-mcp has no execution or attestation adapter. It never runs the computation, executor resource, or attester resource, and it never fetches an external contract URI on demand.

CLI parity is available through computation inspect|prepare|check-receipt, provenance, edge-kinds, and asset. Supply sensitive values with --parameters-file <path|-> or --receipt-file <path|->; raw parameter and receipt JSON is intentionally rejected in process arguments. - reads one JSON object from stdin. Asset reads accept --max-content-bytes up to the indexed 1 MiB limit.

Migrating Existing Catalogs To v0.2

The v0.2 specification keeps v0.1 bundles consumable through two fallbacks: legacy timestamp when generated is absent, and a legacy body # Citations list when sources is absent. okf-mcp applies those fallbacks during reads and offers an optional review-only conversion workflow.

For one root, inspect migration readiness and preview the proposed native fields without writing anything:

okf --root /path/to/catalog migrate check
okf --root /path/to/catalog migrate preview \
  '{"metrics/revenue.md":{"by":"human:owner","confirmed":true}}'

In optional multi-root project mode, supply the root id before the actor-mapping JSON.

Migration is deliberately conservative:

  • native generated and sources fields always win

  • a valid timestamp is copied into a new generated: { by, at } mapping only after a truthful by actor is explicitly confirmed

  • # Citations becomes sources only from one top-level H1 section containing at least one safely parseable list entry and no unparsed prose, nested sections, ambiguous entries, or escaping paths

  • legacy fields and citation prose are retained for compatibility

  • concepts marked by --generated-path, a document flag, or generated_file/generatedFile frontmatter must be changed through their generator; remote roots are report-only

  • identity collisions, invalid documents, unsafe references, and unresolved assets block the version declaration

okf_propose_v02_migration requires local-root authoring. It creates a review manifest, one proposal per affected file, and a gated root okf_version: "0.2" proposal. Nothing is accepted automatically; the root proposal can be accepted only after every child is accepted and the complete catalog validates.

Generator Plugins

Generator plugins are configured in okf.project.yaml and run with generate.

Built-in plugins:

  • filesystem: creates one concept per matching source file. Defaults to Markdown files.

  • json-spec: creates one concept per JSON file and can emit persists_to relations when a destination table is present.

Generated output is regular Markdown/YAML OKF and is validated by the same indexer as hand-authored concepts.

Limitations

  • MCP transport is stdio only. The separate HTTP authoring API is not MCP over HTTP.

  • MCP protocol compatibility follows the pinned official SDK v2 dependency.

  • There is no file watcher. Restart the server after external file changes. Concepts accepted through MCP authoring refresh the MCP server index immediately.

  • The HTTP API is a lightweight built-in server, not a full hosted multi-tenant service.

  • OKF v0.2 computation support is static inspection and preflight only; no computation or attester is executed.

Available Tools

28 tools
check_computation_receiptA
Read-onlyIdempotent

Check receipt field presence only; never attest, echo values, or persist the receipt.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesCanonical or compatibility URI of the Attested Computation.
receiptYesEphemeral receipt object; only its field names are returned.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds value by explicitly stating it never attests, echoes values, or persists the receipt, clarifying the tool's side-effect-free nature and its limited output (field presence only). This supplements the annotation coverage without contradiction.

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, front-loaded sentence. It states the primary action first ('Check receipt field presence only') and follows with concise constraints. Every word serves a purpose, with no fluff or unnecessary detail.

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 simplicity and the rich parameter schema, the description is mostly complete. The receipt schema explicitly notes that only field names are returned, which covers return semantics. The description itself doesn't explicitly state the output format, but combined with the schema it is sufficient for an agent to know what to expect. A slight gap is not describing potential error conditions or edge cases, but these are minor for a read-only check.

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% (both parameters have descriptions). The description does not add any parameter-level detail beyond what the schema already provides. For example, the receipt parameter schema already states 'only its field names are returned', and the uri is described as the URI of the attested computation. The description adds no further semantics, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Check receipt field presence only' – a specific verb, resource, and scope. It also defines boundaries with 'never attest, echo values, or persist the receipt', which distinguishes it from sibling tools like prepare_attested_computation or inspect_attested_computation that likely perform those operations.

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 negative usage guidance: never attest, echo values, or persist. This implies that if an agent needs those operations, it should use a different tool. While it doesn't explicitly name alternatives or specify exact conditions such as 'use only when you need to verify presence', the constraints are informative enough to route an agent correctly.

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

check_v02_migrationA
Read-onlyIdempotent

Analyze a local or remote bundle for safe staged OKF v0.2 migration without creating proposals or writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleNoBundle id to analyze; optional when exactly one root is loaded.
actorMappingsNoMappings keyed by URI, path, or $default; each value requires by plus confirmed: true.
generatedPathsNoPaths generated elsewhere and therefore skipped from direct proposals.

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already disclose readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds that it is 'without creating proposals or writes', which reinforces the read-only nature but adds little beyond the annotations. The phrase 'safe staged' hints at the analysis nature but does not explain what the tool checks or returns. Given the strong annotations, the description provides only marginal additional behavioral context.

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

Conciseness5/5

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

The description is a single, tight sentence with no filler. It front-loads the primary purpose ('Analyze a local or remote bundle...') and immediately follows with the behavioral constraint ('without creating proposals or writes'). Every word contributes to the agent's understanding without redundancy.

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

Completeness4/5

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

For a read-only analysis tool with comprehensive annotations and fully described parameters, the description is sufficiently complete. It states the tool's purpose, scope, and a critical constraint. One could argue it lacks details on what constitutes 'safe migration' or what the output looks like, but given the absence of an output schema and the tool's specific niche, the description provides enough for an agent to invoke it correctly. The mention of 'staged' hints at workflow context.

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 schema covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds meaningful context by specifying that the bundle can be 'local or remote', which is not present in the schema's 'Bundle id to analyze'. This clarifies scope for the agent. For actorMappings and generatedPaths, the description adds nothing beyond the schema, but the bundle clarification justifies a slightly above-baseline score.

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

Purpose5/5

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

The description clearly states a specific verb ('Analyze') and resource ('local or remote bundle') with a specific goal ('safe staged OKF v0.2 migration'). It also includes a strong differentiator ('without creating proposals or writes') that distinguishes it from sibling tools like validate_bundle or okf_list_proposals. This leaves no ambiguity about the tool's function.

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 implicitly tells the agent when to use this tool: when checking migration safety for a bundle. It also clarifies that it performs no writes or proposals, which is a key usage constraint. However, it does not explicitly name alternatives or state when not to use it, leaving some room for inference. Still, the context is clear enough for correct selection.

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

export_graphA
Read-onlyIdempotent

Render the current OKF graph as JSON, Graphviz DOT, or Mermaid text.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format for the graph.json
maxEdgesNoMaximum number of graph edges to export.
maxNodesNoMaximum number of graph nodes to export.
edgeKindsNoLimit exported edges to these edge kinds.
includeAssetsNoInclude explicitly referenced bundle assets in the export.
includeExternalNoInclude opaque external relation targets in the export.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that it renders the 'current OKF graph', which is useful context but does not disclose additional behavioral traits such as default limits (available in schema) or output size implications. With annotations covering the safety profile, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that immediately states the tool's purpose and the accepted formats. There is zero filler; every word earns its place. It is concise and well-structured for an agent to quickly parse.

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 that the tool is a read-only export with well-documented parameters in the schema, the description is fairly complete for an agent to invoke it correctly. It could optionally mention that the output is plain text/string, but the absence of an output schema and the simplicity of the operation make this a minor gap. The 'current OKF graph' phrasing clarifies scope, and the format enum covers the output variants.

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 every parameter (format, maxEdges, maxNodes, edgeKinds, includeAssets, includeExternal) is already documented in the schema. The description does not add any additional meaning beyond what the schema provides, so the baseline of 3 applies. It does not compensate for any gaps because there are none.

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 'Render the current OKF graph' followed by the three output formats (JSON, Graphviz DOT, Mermaid text). This distinguishes it from sibling tools like get_graph (which likely returns a structured object) and graph_summary (which summarizes rather than renders). The verb+resource pattern is precise and 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 usage for exporting graph data in serialized text formats, but it does not explicitly say when to prefer this over alternatives such as get_graph or get_subgraph, nor does it mention any exclusions or conditions. An agent would need to infer from format options that this is the export tool, 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.

find_pathsA
Read-onlyIdempotent

Find bounded relationship paths between two OKF concepts.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesCanonical or path based okf URI where path search begins.
targetYesCanonical or path based okf URI where path search ends.
maxPathsNoMaximum number of distinct paths to return.
edgeKindsNoLimit path traversal to these edge kinds.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds minimal behavioral context beyond repeating the action ('find') and the bounded constraint, which is also reflected in the maxPaths parameter. It doesn't disclose return format, pagination, or any edge cases, but given the strong annotation coverage, the additional value is limited but not contradictory.

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, concise sentence that front-loads the core action and resource. It is efficient and avoids redundancy, though it could potentially include a brief mention of return behavior without much added length. Still, it is appropriately sized for a tool with a well-documented schema.

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 (4 parameters, no output schema), the description provides the essential purpose but omits what the return structure looks like (e.g., a list of paths with nodes/edges). The absence of an output schema places some burden on the description to describe the result format, which it does not do. However, the schema covers all input parameters, and the description is adequate for an agent to understand the primary use case without being fully 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?

Schema description coverage is 100%, so all four parameters have descriptive text in the schema. The tool description adds no extra parameter semantics beyond what the schema already provides. For example, 'source' and 'target' are clearly described in the schema, and 'bounded' in the description is only a high-level echo of the maxPaths and edgeKinds parameters. The baseline of 3 is appropriate since the schema handles the documentation burden.

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 ('find'), a clear resource ('relationship paths'), and defines the scope ('between two OKF concepts'). It clearly distinguishes itself from sibling tools like get_neighbors (which returns immediate connections) and get_subgraph (which returns a subgraph) by specifying the path-finding intent and bounded nature. The phrase 'bounded' signals limits, which is further detailed in the schema parameters.

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

Usage Guidelines3/5

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

The description implies usage for when you need a path between two specific concepts, but it does not explicitly state when to use this tool versus alternatives like get_neighbors or get_graph. No exclusions or conditions are given for when a different tool would be more appropriate. The context is clear enough for a basic recommendation, but lacks explicit routing guidance.

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

get_conceptA
Read-onlyIdempotent

Read one valid OKF concept, including its frontmatter, Markdown body, and links.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPortable extensionless Concept ID or bundle-relative Markdown path.
uriNoCanonical or path based okf URI for the concept.
pathNoBundle relative Markdown path used with bundle when uri is not supplied.
bundleNoBundle id used with path when uri is not supplied.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to restate safety. It adds value by specifying the exact content returned (frontmatter, Markdown body, links) beyond 'read'. This is useful context, and it does not contradict any annotation.

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?

A single sentence that conveys the action, scope, and content, front-loaded with the verb and resource. No filler or redundancy.

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

Completeness4/5

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

For a simple read operation with an output schema absent, the description adequately covers what is returned. It notes 'valid' which may imply validation behavior, but does not elaborate on error cases. Given the sibling set and the annotations covering safety, nothing critical is missing for an agent to call it 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 all four parameters (id, uri, path, bundle) are already documented with their roles. The description does not add parameter-specific details beyond what the schema provides, which is acceptable but not exceptional. Baseline 3 applies when the schema does the heavy lifting.

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 ('Read one valid OKF concept') and specifies the resource and its contents (frontmatter, Markdown body, links). It distinguishes itself from sibling tools like list_concepts (browsing multiple) and search_concepts (searching) by being explicitly for a single 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 description provides clear context for use: retrieving a single concept by its identifier. It does not explicitly mention alternatives or when not to use it, but the 'one' vs. 'list/search' semantics in sibling names imply the usage. No exclusions are stated, but the purpose is unambiguous.

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

get_graphB
Read-onlyIdempotent

Return a bounded set of OKF graph nodes and edges with optional concept filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoLimit graph nodes to concepts containing this tag.
typeNoLimit graph nodes to this exact concept type.
bundleNoLimit graph nodes to this bundle id.
maxEdgesNoMaximum number of graph edges to return.
maxNodesNoMaximum number of graph nodes to return.
edgeKindsNoLimit returned edges to these edge kinds.
pathPrefixNoLimit graph nodes to bundle relative paths beginning with this prefix.
includeAssetsNoInclude explicitly referenced bundle assets as graph nodes.
includeExternalNoInclude opaque external relation targets in the graph.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the behavioral trait of being 'bounded,' which is also supported by the maxNodes/maxEdges parameters, but it does not elaborate on default behavior or return format. Given the annotations, the description adds marginal but non-contradictory context; a score of 3 reflects this minimal incremental value.

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, tightly worded sentence with no filler. It front-loads the core purpose ('Return a bounded set of OKF graph nodes and edges') and appends the filtering capability succinctly. Every word earns its place, and the structure is ideal for quick agent comprehension.

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 (9 optional parameters) and the presence of many graph-related siblings (get_subgraph, graph_summary, find_paths), the description is minimal. It does not explain what an OKF graph is, how this tool differs from siblings, or what the output looks like (no output schema). While annotations cover safety, the description lacks guidance on when to invoke this tool, leaving agents to infer from parameter schemas alone. This is adequate but not complete for a tool of this scope.

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 each of the 9 parameters has a detailed description. The tool-level description adds no parameter-specific information beyond the generic 'optional concept filters,' which is already implied by the parameter descriptions. With high schema coverage, the baseline of 3 is appropriate; the description does not need to compensate and does not.

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

Purpose4/5

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

The description states a clear action ('Return') and resource ('OKF graph nodes and edges') with a scoping qualifier ('bounded set') and optional filters. It is specific enough to convey what the tool produces, but it does not explicitly differentiate from sibling tools like get_subgraph or graph_summary, which also deal with graph subsets. The phrase 'bounded set' and 'concept filters' hints at distinguishing use cases, but the differentiation is implicit.

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 its siblings. It does not mention alternatives, exclusions, or prerequisites. The only contextual hint is 'optional concept filters,' which suggests it is for filtered graph retrieval, but it does not compare against get_subgraph, find_paths, or graph_summary. An agent would have no basis to choose this over related tools without deeper inference.

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

get_neighborsB
Read-onlyIdempotent

Return the incoming and outgoing graph relationships for one OKF concept.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesCanonical or path based okf URI of the center concept.
edgeKindsNoLimit neighbors to these edge kinds.
includeAssetsNoInclude referenced asset neighbors.
includeExternalNoInclude opaque external neighbors without fetching them.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context (e.g., return format, pagination, or edge-case behavior). It does not contradict annotations, so a 3 reflects adequate coverage with annotations doing the heavy lifting.

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, concise sentence that immediately states the core purpose. It is front-loaded and contains no extraneous information, earning a perfect score for clarity and efficiency.

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

Completeness4/5

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

For a simple read-only tool with a clear schema and annotations, the description sufficiently explains what the tool returns. It does not specify output schema, but none is provided, and the nature of 'incoming and outgoing graph relationships' is likely understandable. Minor gaps (e.g., error conditions) are not critical given the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, meaning every parameter is documented in the input schema. The description gives high-level context (incoming/outgoing relationships) that aligns with the 'uri' parameter, but it adds no extra meaning beyond the schema. The baseline of 3 is appropriate since the schema carries full parameter documentation.

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

Purpose4/5

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

The description states a specific verb ('Return') and a specific resource ('graph relationships for one OKF concept'). It clearly defines the scope (incoming/outgoing relationships) and distinguishes it from siblings like get_graph (full graph) or get_subgraph (subgraph extraction), though it does not explicitly name 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 provides no guidance on when to use this tool versus other graph-related siblings such as find_paths, get_graph, or get_subgraph. It does not state when this tool is preferred or mention any exclusions or prerequisites.

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

get_provenanceA
Read-onlyIdempotent

Trace normalized source provenance through internal concepts without fetching external resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesCanonical or compatibility OKF URI of the root concept.
maxDepthNoMaximum internal source depth.
maxNodesNoMaximum provenance nodes.
includeExternalNoInclude URL and opaque provenance leaves without fetching them.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, covering safety and predictability. The description adds useful behavioral context—it traces only internal provenance and explicitly avoids fetching external resources—which is a meaningful constraint beyond the annotations. This extra disclosure justifies a score above the baseline.

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, front-loaded sentence with zero waste. It states the action, the subject, and a key constraint efficiently, making it easy for an agent to parse quickly.

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?

There is no output schema, so the description bears responsibility for indicating what the tool returns. The current text focuses on the process (tracing) but does not describe the shape or format of the provenance result. Given the tool's potential complexity (depth, nodes, external leaves), this is a notable gap, though the description is otherwise adequate for a read-only operation.

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 every parameter (uri, maxDepth, maxNodes, includeExternal) is already documented in the schema. The tool description does not add any parameter-specific meaning beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose4/5

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

The description uses a specific verb ('Trace') and identifies the resource ('normalized source provenance') with a clear scope ('through internal concepts'). It distinguishes itself by noting 'without fetching external resources', which separates it from tools like read_git_source, though it doesn't name a specific sibling.

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 stating 'internal concepts' and 'without fetching external resources', which hints at when this tool is appropriate (e.g., wanting provenance without external data). However, it does not explicitly name alternative tools or provide exclusion criteria, leaving the agent to infer routing from the sibling list.

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

get_subgraphB
Read-onlyIdempotent

Traverse a bounded OKF subgraph outward from one or more seed concepts.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoSingle canonical or path based okf URI to use as a seed.
depthNoMaximum relationship depth to traverse from the seeds.
seedsNoOne or more okf URIs to use as traversal seeds.
maxNodesNoMaximum number of graph nodes to return.
edgeKindsNoLimit traversal to these edge kinds.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the key 'bounded' constraint, which is useful context. However, it does not describe the return format (e.g., whether it returns nodes, edges, or a complete subgraph) or any pagination/limits beyond what the schema provides, which would be helpful for a traversal 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, front-loaded sentence that clearly communicates the core purpose and the key 'bounded' trait. There is no fluff or redundancy; it earns its place entirely.

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 tool with 5 parameters, full schema coverage, and safety annotations, the description is adequate but not complete. It does not clarify what the output looks like (no output schema) nor give any guidance on selecting it over siblings. The 'bounded' term hints at limits, but the schema already covers depth and maxNodes. Additional context about result structure or typical use cases would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all five parameters (uri, seeds, depth, maxNodes, edgeKinds). The description does not add meaning beyond the schema—it only implies traversal from seeds. With full coverage, the baseline of 3 is appropriate; the description adds minimal extra value.

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

Purpose4/5

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

The description states the specific action 'Traverse' and the resource 'bounded OKF subgraph' with a clear mechanism 'outward from seed concepts'. It is distinct enough from siblings like get_neighbors and find_paths, though it does not explicitly name alternatives. The verb and scope are clear.

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 get_neighbors, find_paths, or get_graph. It does not mention any exclusions or conditions that would select this tool. The existence of multiple graph-traversal siblings makes this a significant gap.

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

graph_summaryA
Read-onlyIdempotent

Summarize bundle, concept, edge, type, tag, and graph health counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal extra behavioral context—it does not mention performance, data freshness, or any side effects. Since annotations are present, the bar is lower, but the description still adds no additional insight beyond what annotations already convey.

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, concise sentence with no filler. The verb 'summarize' is front-loaded, and the list of covered entities is clear and complete.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no output schema, clear annotations), the description fully conveys what the tool does and what to expect (counts). No critical information is missing for an agent to invoke it correctly.

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

Parameters4/5

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

The tool has zero parameters, and the schema is empty with 100% coverage. The description doesn't need to explain parameter semantics, so the baseline of 4 applies. It correctly implies that no input is required.

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

Purpose5/5

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

The description clearly states a specific action (summarize) and the resources covered (bundle, concept, edge, type, tag, graph health counts). It distinguishes itself from sibling list/get tools by focusing on aggregated counts rather than individual data retrieval.

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 use when an overall summary of counts is needed, but it does not explicitly state when to prefer this over sibling tools like get_graph or list_*. No exclusions or alternatives are mentioned, leaving some ambiguity for the agent.

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

inspect_attested_computationA
Read-onlyIdempotent

Statically inspect an Attested Computation contract and indexed inert artifacts; never execute it.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesCanonical or compatibility URI of the Attested Computation.
asOfNoUTC ISO date or datetime for freshness evaluation.
maxContentBytesNoMaximum computation bytes to include.
includeComputationNoInclude bounded inline or text computation content.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description does not need to repeat that. It adds useful context about inspecting 'indexed inert artifacts' and reinforces the non-execution guarantee, which is consistent with annotations and adds value beyond them.

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

Conciseness5/5

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

A single, efficient sentence that front-loads the primary purpose and the key limitation ('never execute it'). No redundant phrases or 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?

The description clearly states the purpose and limitation, and the parameter schema is complete, but with no output schema it leaves the return format unspecified. For a read-only inspection tool, this is a minor gap, but the description could hint at what the agent will receive (e.g., static analysis details). It is adequate but not fully 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 input schema provides descriptions for all 4 parameters (100% coverage), so the description does not need to add parameter-level details. The description is tool-level and adds no extra meaning about individual parameters, matching the baseline for high 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 uses a specific verb ('statically inspect') and a specific resource ('Attested Computation contract and indexed inert artifacts'), and explicitly excludes execution ('never execute it'). This clearly differentiates it from sibling tools like prepare_attested_computation and check_computation_receipt without needing to open their schemas.

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 (static inspection, non-execution) and an explicit exclusion ('never execute it'), but it does not name alternative tools or specific conditions for when to choose this tool over others. The exclusion gives some when-not guidance, but there is no explicit reference to alternatives.

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

list_bundlesA
Read-onlyIdempotent

List the local and remote OKF bundles currently loaded by the server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context beyond the schema by specifying 'loaded by the server', which clarifies the data source. However, it doesn't disclose return format, ordering, or potential performance implications. Given the low bar set by annotations, a 3 is appropriate – it adds moderate value without describing full 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, tightly worded sentence that conveys the entire purpose without any filler. It front-loads the verb and resource, and every word earns its place. No redundancy or unnecessary detail.

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 no-parameter list tool with annotations covering safety and idempotency, the description is fully adequate. It clearly states what is listed (local and remote bundles) and the condition (loaded by the server). With no output schema required, nothing essential is missing for an agent to invoke it correctly.

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

Parameters4/5

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

With zero parameters and the schema being empty, there is nothing for the description to add about parameter semantics. Per the rubric, a baseline of 4 is given for tools with 0 parameters. The description correctly avoids inventing parameters and needs no further clarification.

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

Purpose5/5

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

The description states a specific verb ('List'), a clear resource ('OKF bundles'), and scopes it precisely to 'local and remote' and 'currently loaded by the server'. This differentiates it from the sibling 'list_remote_bundles', which suggests a narrower scope. The purpose is unambiguous and distinguishable from peers.

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 establishes context (local and remote bundles loaded by the server) without explicitly naming alternatives or when-not-to-use scenarios. It would benefit from a pointer to 'list_remote_bundles' for remote-only queries, but the absence of that doesn't mislead; the scope is self-evident. No exclusions are needed for a simple listing tool.

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

list_conceptsB
Read-onlyIdempotent

List compact OKF concept summaries with optional bundle, type, tag, and text filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoLimit results to concepts containing this tag.
typeNoLimit results to this exact concept type.
limitNoMaximum number of concepts to return.
queryNoOptional text matched against concept metadata and content.
bundleNoLimit results to this bundle id.
offsetNoNumber of matching concepts to skip before returning results.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating a safe read operation. The description adds that results are 'compact summaries', which implies a limited set of fields. This is a minor behavioral addition, but there is no mention of rate limits, pagination behavior beyond offset/limit, or other traits.

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 sentence that is front-loaded with the verb 'List' and resource 'OKF concept summaries'. Every word earns its place; there is no redundancy or unnecessary information.

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 description covers the tool's purpose and filter parameters, but does not describe the return format (e.g., what fields a 'compact summary' contains) or any edge cases. With no output schema, the description could be more complete to set expectations for the agent.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter already has a description. The tool description merely restates the filter types (bundle, type, tag, text) without adding new semantic meaning. This meets the baseline of 3 for high coverage.

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

Purpose4/5

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

The description clearly states it lists compact OKF concept summaries with optional filters, which is specific and distinguishes it from get_concept. However, it does not explicitly differentiate from sibling tools like search_concepts, which might provide similar functionality.

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 does not provide any guidance on when to use this tool versus alternatives. It lists filters but lacks explicit context for when each filter is appropriate or how this tool differs from other list/search tools in the sibling set.

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

list_edge_kindsB
Read-onlyIdempotent

Count standard semantic and extension edge kinds in the current graph.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint: true, idempotentHint: true, and destructiveHint: false, so the safety profile is covered. The description adds 'current graph' scoping and the distinction between standard and extension kinds, which provides some context. However, it does not disclose return format, error conditions, or performance implications—though these are less critical given the strong annotations. Overall, it adds limited behavioral insight beyond the annotations.

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

Conciseness5/5

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

The description is a single, directly actionable sentence with no filler. It front-loads the verb and resource, and every word contributes to meaning. It is optimally concise.

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?

Since there is no output schema, the description carries the burden of explaining the result. It only says 'Count' without specifying the return format (e.g., a list, map, or aggregate). Furthermore, terms like 'standard semantic' and 'extension' are left undefined, which could be ambiguous to an agent without domain context. For a parameterless read-only tool, this is a moderate gap in completeness.

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 tool has zero parameters, so the baseline is 4. With no parameters, the description has no need to clarify parameter semantics; the schema is trivially complete. Nothing is missing in this dimension.

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 ('Count') and the resource ('standard semantic and extension edge kinds') scoped to the current graph. It is specific enough to distinguish from sibling list tools like list_types or list_relation_types, though it does not explicitly name them. The purpose is unambiguous and not a tautology.

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?

There is no guidance on when to use this tool versus alternatives. It does not mention excluded cases, prerequisites, or favorable contexts. Since sibling tools have overlapping list functions, the absence of any usage direction leaves the agent to infer applicability.

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

list_relation_typesB
Read-onlyIdempotent

Count the typed relations present in the current OKF graph.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already carry the safety profile (readOnlyHint, idempotentHint, destructiveHint), lowering the bar. The description adds the 'current OKF graph' scoping context, which is useful. It does not disclose the return shape (an integer count vs a breakdown by type) or how the graph snapshot is established, so it adds only modest value beyond the annotations.

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

Conciseness5/5

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

A single, two-clause sentence with the operative verb front-loaded. No filler, no redundant restatement of the name, and every word earns its place.

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?

Adequate for a zero-parameter read tool, but the phrase 'typed relations' is left undefined and there is no output schema to clarify the return value. The possible conflation with list_edge_kinds and the unspecified result format leave an agent with minor ambiguity. Given the tool's simplicity and the strong annotation coverage, this is acceptable but not thorough.

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 tool takes zero parameters, and schema coverage is trivially 100%, so there is nothing for the description to document. Per the baseline for zero-parameter tools, a 4 is appropriate; no parametric detail is missing or expected.

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?

Clear verb ('count') and resource ('typed relations'), scoped to the 'current OKF graph'. The action is concrete and an agent can tell this counts rather than lists. It does not explicitly differentiate from the sibling list_edge_kinds, with which 'typed relations' could plausibly overlap, so it stops short of a 5.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus the siblings. With list_edge_kinds, list_types, and get_graph nearby, an agent has no hint about which to prefer for enumerating relations vs counting them, or whether list_edge_kinds is the richer alternative. This is a real gap.

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

list_remote_bundlesA
Read-onlyIdempotent

List metadata for remote bundles currently loaded into the server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds useful behavior: 'metadata' implies it returns metadata rather than content, and 'currently loaded' indicates a snapshot of the server's state. It doesn't discuss pagination or ordering, but given the annotation coverage, this is adequate; the description provides some value beyond the annotations.

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

Conciseness5/5

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

A single, front-loaded sentence that states exactly what the tool does with no redundant wording. Every word serves a purpose, making it highly efficient and easy to parse.

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 parameterless, read-only list tool with annotations covering safety, the description is complete. It specifies what is returned (metadata), the scope (remote bundles), and the state (currently loaded). No critical information is missing for this level of complexity.

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

Parameters4/5

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

The tool has zero parameters, so the schema is trivially 100% covered. There is nothing for the description to add about parameters, and it makes no misleading claims. The baseline for 0 parameters is 4, which is appropriate here.

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 verb 'List', the resource 'remote bundles', and adds the qualifier 'currently loaded into the server', which distinguishes it from the sibling 'list_bundles' (likely local bundles). The purpose is unambiguous and specific.

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 about when to use it: when you need metadata for remote bundles that are loaded. However, it does not explicitly mention when not to use it or name alternatives like 'list_bundles', though the word 'remote' implicitly differentiates. This is clear context without explicit exclusions, fitting the 'clear context, no exclusions' level.

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

list_tagsA
Read-onlyIdempotent

Count the tags present on concepts in the current OKF index.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the scope context ('current OKF index') but does not disclose other behavioral traits such as return format, performance expectations, or any side effects beyond what annotations already imply. This is a minimal but non-contradictory addition.

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, front-loaded sentence with no filler. It states the action and scope immediately, making it efficient and easy to parse.

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

Completeness4/5

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

For a simple tool with no parameters and no output schema, the description is mostly complete. It clearly states what is counted and the scope. The only minor gap is the lack of explicit description of the return value shape (e.g., list of tag counts), but this is likely inferable given the simplicity.

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 tool has zero parameters, so the description carries no parameter burden. The baseline for zero parameters is 4, and the description adds no unnecessary detail, leaving the schema fully sufficient.

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

Purpose5/5

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

The description uses a specific verb ('Count') and a precise resource ('tags present on concepts in the current OKF index'), which clearly distinguishes it from sibling tools like list_types or list_concepts. The scope is unambiguous and the action is well-defined.

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. There is no mention of exclusions, prerequisites, or conditions that would favor this tool over its siblings. The intended context is only implied by the description's focus on counting tags, but no explicit routing is given.

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

list_typesA
Read-onlyIdempotent

Count the concept types present in the current OKF index.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds minimal behavioral disclosure beyond stating it returns a count, which is consistent with the name's mismatch (list vs. count). No contradiction, but no extra context like performance or return shape beyond 'count'.

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?

A single, straightforward sentence that immediately conveys the operation. There is no fluff, and the key information is front-loaded.

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 parameterless read-only tool, the description provides enough context to understand what the tool does and what it returns (a count). It doesn't explicitly state that it returns a numeric count rather than a list, but the verb 'count' implies it. Given annotations cover safety and no input is needed, this is sufficiently complete.

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 tool has zero parameters, and schema coverage is 100% (effectively, since there is nothing to describe). Per the baseline for 0 params, a score of 4 is appropriate because no parameter documentation is needed.

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

Purpose5/5

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

The description uses a specific verb ('Count') and identifies the resource ('concept types present in the current OKF index'). It clearly distinguishes from siblings like list_concepts (which lists concepts themselves) and list_tags (which lists tags), establishing a unique purpose.

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 a read-only count operation, but no explicit guidance is given about when to use this vs. similar tools like list_concepts or list_relation_types. With many list_* siblings, a brief mention of alternatives or exclusions would improve this dimension.

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

okf_get_proposalA
Read-onlyIdempotent

Read one authoring proposal, including its candidate content and validation result.

ParametersJSON Schema
NameRequiredDescriptionDefault
proposalIdYesIdentifier returned when the proposal was created.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description is consistent with these. The description adds value by specifying that the response includes candidate content and a validation result, which is useful behavioral context beyond the safety profile. No contradictions found.

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, front-loaded sentence that states the action and key details without redundancy. Every word earns its place, and no filler exists.

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

Completeness4/5

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

With no output schema, the description appropriately outlines what the response includes (candidate content and validation result). The tool is simple (one parameter, read-only, idempotent), and nothing critical is missing for correct invocation. It could mention error cases, but that is not required for this simple read operation.

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 fully describes the single parameter (proposalId) with its origin ('Identifier returned when the proposal was created'), achieving 100% coverage. The tool description does not add further parameter details, but the schema alone is sufficient, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Read'), a resource ('one authoring proposal'), and key content ('candidate content and validation result'). This clearly distinguishes it from listing tools like okf_list_proposals and validation tools like okf_validate_concept, 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 single-item retrieval via 'one authoring proposal', but it does not explicitly name alternatives or state when to use this tool instead of others. The 'one' provides clear context, but exclusions or comparisons are absent, leaving guidance to inference rather than explicit direction.

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

okf_list_proposalsB
Read-onlyIdempotent

List compact metadata for stored authoring proposals.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleNoLimit results to proposals for this bundle id.
statusNoLimit results to this proposal status.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that it returns 'compact metadata', which gives some insight into output format, but doesn't elaborate on behavior or side effects. Given annotations carry most of the burden, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It states the action and resource immediately and includes a qualifier about the return type. Perfectly concise.

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 simple: list with optional filters. Annotations cover the read-only, idempotent nature, schema covers the parameters, and the description hints at the output being 'compact metadata'. It lacks explicit mention of pagination or ordering, but these are likely not critical for such a listing tool. Overall, it's reasonably 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?

Both parameters are fully described in the input schema (100% coverage), so the schema already documents them. The description adds no additional parameter-level details, so it meets the baseline for a schema-covered tool.

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

Purpose4/5

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

The description states 'List compact metadata for stored authoring proposals,' which clearly identifies the action (List) and resource (authoring proposals), and adds 'compact metadata' to hint at return format. It is distinct from sibling 'okf_get_proposal' by being plural, though it doesn't explicitly differentiate itself, so it's not a perfect 5.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like okf_get_proposal or other list tools. The description doesn't mention conditions, exclusions, or prerequisites, leaving the agent to infer usage context.

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

okf_suggest_concept_pathA
Read-onlyIdempotent

Suggest a safe bundle relative Markdown path from a concept type and title.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesConcept type used to build the path.
titleYesConcept title used to build the file name.
bundleNoWritable root id; optional when exactly one local root is configured.
prefixNoOptional bundle relative directory prefix.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true) already establish the safe, non-destructive nature. The description adds the word 'safe', which is not explained further, but it does not contradict annotations. Minimal additional behavioral context is provided beyond what annotations already convey.

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 function. No filler, no redundancy, and the core action is front-loaded. It is an excellent example of concise specification.

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

Completeness4/5

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

For a simple utility tool with four well-documented parameters and no output schema, the description adequately conveys what it does. It implies that the tool returns a path (since it 'suggests' one), and the 'safe' qualifier hints at validation. Given the low complexity, it is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter already has a clear description. The tool description does not add any additional meaning to the parameters, such as constraints, format expectations, or relationships. The schema does the heavy lifting; the description simply restates the purpose without enriching parameter semantics.

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

Purpose5/5

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

The description uses a specific verb ('Suggest') and resource ('bundle relative Markdown path'), and specifies the inputs ('from a concept type and title'). This clearly distinguishes it from siblings like find_paths (which deals with graph paths) and list_bundles (which deals with bundle listing). No ambiguity about what the tool produces.

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?

There is no guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. It simply states what it does without contextualizing its use within the broader workflow. An agent would have to infer that this is a path construction helper, not something to be used for searching or listing.

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

okf_validate_conceptA
Read-onlyIdempotent

Validate a proposed new OKF concept without writing a proposal or concept file.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoMarkdown body for the concept.
pathYesSafe bundle relative Markdown path for the concept.
bundleNoWritable root id; optional when exactly one local root is configured.
frontmatterYesComplete YAML frontmatter represented as a JSON object.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the explicit detail that it does not write a proposal or concept file, which reinforces the non-destructive behavior. However, it does not disclose what the validation returns (e.g., success/failure, error list), so the description provides only marginal value beyond the annotations.

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

Conciseness5/5

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

The description is a single, concise sentence with no filler. The key constraint ('without writing a proposal or concept file') is front-loaded, making it immediately clear what the tool does not do. This is an appropriate size for a validation tool with few parameters.

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

Completeness2/5

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

With no output schema, the description should explain what the tool returns (e.g., validation result, errors) but does not. It also gives no details about what 'validate' entails (e.g., required frontmatter fields, path rules). Given the tool's moderate complexity (nested frontmatter object, multiple parameters), this description is too sparse for an agent to fully understand the tool's behavior without probing.

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

Parameters3/5

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

Schema description coverage is 100%, meaning every parameter (path, frontmatter, body, bundle) is already described in the input schema. The description adds no additional meaning about parameter semantics, such as required combinations or validation rules, so it relies entirely on the schema, matching the baseline of 3.

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 ('Validate') and resource ('a proposed new OKF concept'), and adds the key delimiting phrase 'without writing a proposal or concept file' which clearly distinguishes it from write-oriented tools and aligns with its read-only nature. This is not a tautology and differentiates it from sibling validation tools like validate_bundle and validate_project by targeting a concept-level validation.

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 that the tool is for validating a concept before writing any files, but it does not explicitly state when to use it versus alternatives such as validate_bundle or validate_project. No exclusions or alternative tool names are mentioned, leaving the agent to infer the appropriate context from the tool name and the 'without writing' phrase.

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

prepare_attested_computationA
Read-onlyIdempotent

Check declared parameters and produce non-executing digests without echoing parameter values.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesCanonical or compatibility URI of the Attested Computation.
asOfNoUTC ISO date or datetime for freshness evaluation.
parametersYesParameter values keyed only by declared names.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value beyond these by stating that the tool does not execute the computation ('non-executing') and does not echo parameter values, which has privacy/security implications. It also implies validation ('Check declared parameters'), though it does not explicitly describe error behavior. No contradiction exists between description and annotations.

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

Conciseness5/5

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

The description is a single sentence that is entirely functional: it states the action, the object, the output, and a critical behavioral constraint. It is front-loaded with the primary action and has zero unnecessary words. This is exemplary 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?

With no output schema, the description should explain what the tool returns. It mentions 'produce non-executing digests' but does not specify the digest format, whether a receipt or error is returned, or what 'declared parameters' implies beyond the schema. Given the tool's role in attested computations and the availability of sibling tools like check_computation_receipt, the lack of explicit output details leaves some ambiguity for an agent deciding how to use the result.

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%: 'uri' is described as 'Canonical or compatibility URI of the Attested Computation.', 'asOf' as 'UTC ISO date or datetime for freshness evaluation.', and 'parameters' as 'Parameter values keyed only by declared names.' The description adds no additional meaning beyond these, so the baseline of 3 is appropriate. It does not clarify formats or edge cases beyond the schema's 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 action ('Check declared parameters and produce non-executing digests') and the resource ('Attested Computation'), and adds a critical constraint ('without echoing parameter values'). This distinguishes it from siblings like inspect_attested_computation (which inspects existing computations) and check_computation_receipt (which checks receipts). The verb 'produce' and the specific output 'digests' make the tool's function unambiguous.

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?

There is no guidance on when to use this tool versus its siblings. It does not mention prerequisites (e.g., whether the URI must reference an existing computation), nor does it suggest a workflow context (e.g., 'use this before submitting for verification'). The description only states what it does, leaving the agent to infer appropriate usage from the name and sibling tools.

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

read_bundle_assetA
Read-onlyIdempotent

Read one explicitly referenced, already indexed bundle asset with digest verification and byte bounds.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoIndexed okf-asset URI.
pathNoBundle-relative indexed asset path used with bundle.
bundleNoBundle id used with path when uri is omitted.
maxContentBytesNoMaximum asset bytes to return.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is established. The description adds value by disclosing 'digest verification' (integrity checking) and 'byte bounds' (content size limit), which are behavioral traits beyond the annotations and potentially affect call outcomes (e.g., failures or truncation).

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?

A single sentence packs the action, scope, and key constraints without waste. The critical qualifiers are front-loaded, making the tool's intent immediately clear. No redundant or filler text.

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 read-only tool with no output schema and simple parameters, the description conveys the essential constraints (reference requirement, digest verification, byte limits). It could mention the return format, but the lack of output schema and the simplicity of the operation make the current description adequate. The qualifiers about 'already indexed' are useful context.

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% for all four parameters, so the schema already documents each parameter's meaning. The description does not add parameter-specific detail beyond referencing 'byte bounds' which maps to maxContentBytes; it meets the baseline but does not go 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 uses a specific verb ('Read') with a precise resource ('bundle asset') and adds distinguishing qualifiers ('explicitly referenced, already indexed') plus operational details ('digest verification and byte bounds'). This clearly differentiates it from generic read tools and sibling operations like read_git_source.

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

Usage Guidelines4/5

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

The phrase 'explicitly referenced, already indexed' implicitly tells the agent the asset must be known by URI or bundle+path, steering toward use when a specific asset is targeted. It does not explicitly name alternatives or exclusions, but the context is clear enough for a read operation within a known bundle.

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

read_git_sourceA
Read-onlyIdempotent

Read one pinned sources[].git entry from an explicitly mapped checkout or bare repository without fetching.

ParametersJSON Schema
NameRequiredDescriptionDefault
conceptYesConcept ID, Markdown path, custom ID, or compatibility URI declaring the source.
sourceIdYesExact sources[].id value to read.
maxContentBytesNoMaximum Git blob bytes to read.

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the key behavioral detail 'without fetching' and the prerequisite 'explicitly mapped', which are not present in annotations. No contradiction exists; the description enriches the safety profile with operational context.

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

Conciseness5/5

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

The description is a single, compact sentence that front-loads the action ('Read') and states the core constraints without any filler. Every word carries meaning, making it ideal for quick agent comprehension.

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

Completeness4/5

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

For a simple read operation with three parameters and no output schema, the description adequately covers purpose, constraints, and the 'without fetching' behavior. It lacks explicit return format details and error conditions, but given the simplicity and the presence of safety annotations, the agent has sufficient information to decide when to call and what to expect.

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 provides complete descriptions for all three parameters (concept, sourceId, maxContentBytes), achieving 100% coverage. The tool description mentions 'pinned sources[].git entry' and 'explicitly mapped checkout', which loosely map to concept and sourceId, but it does not add new syntax or format details beyond the schema. 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 states a specific verb ('Read'), a precise resource ('one pinned sources[].git entry'), and a scope ('from an explicitly mapped checkout or bare repository'). It also distinguishes the tool by its 'without fetching' behavior, clearly separating it from potentially similar read operations like read_bundle_asset.

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 on when to use the tool: for a pinned git entry in an explicitly mapped checkout or bare repository, and explicitly states 'without fetching' as a behavior. It implies that if the source is not pinned or not explicitly mapped, or if fetching is desired, another tool should be used, though it does not name alternative tools explicitly.

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

search_conceptsA
Read-onlyIdempotent

Search OKF concepts and return ranked summaries using text and structured filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
asOfNoUTC ISO date or datetime used for deterministic freshness evaluation.
limitNoMaximum number of concepts to return.
queryNoText query matched against concept metadata and content.
typesNoLimit results to any of these concept types.
bundleNoLimit results to this bundle id.
offsetNoNumber of matching concepts to skip before returning results.
runtimeNoLimit results to this Attested Computation runtime.
tagsAllNoRequire all of these tags.
tagsAnyNoRequire at least one of these tags.
linkedToNoRequire an outgoing edge to this concept URI.
statusesNoLimit results to lifecycle statuses.
freshnessNoLimit results to unspecified, fresh, stale, or invalid freshness states.
hasSourcesNoRequire concepts to have or not have normalized sources.
linkedFromNoRequire an incoming edge from this concept URI.
orphanOnlyNoReturn only concepts without incoming or outgoing resolved edges.
pathPrefixNoLimit results to bundle relative paths beginning with this prefix.
trustTiersNoLimit results to unverified, machine-confirmed, or human-reviewed trust tiers.
verifiedByNoLimit results to concepts verified by this actor.
frontmatterNoExact frontmatter filters; array fields use contains matching.
generatedByNoLimit results to this generator actor.
relationTypeNoLimit results to concepts with an outgoing relation of this type.
attestationReadyNoRequire static Attested Computation readiness.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description adds the key behavioral detail that results are 'ranked summaries' rather than full concept objects. It does not disclose pagination behavior, ranking algorithm, or how filters combine, but given strong annotations this is acceptable.

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, front-loaded sentence with no wasted words. It communicates the core action, resource, output type, and filter categories efficiently.

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

Completeness2/5

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

With 22 parameters and no output schema, a one-sentence description is insufficient. It mentions 'ranked summaries' but does not explain what a summary contains, how pagination works, or important behaviors like default limits or that results are filtered by all specified criteria. The schema covers parameters, but the return format and search semantics remain largely underspecified.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 22 parameters. The description only adds the generic context of 'text and structured filters', which does not enrich the meaning of any specific parameter beyond what the schema already provides.

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

Purpose5/5

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

The description uses a specific verb ('search') with a clear resource ('OKF concepts') and outcome ('return ranked summaries'), and differentiates the tool from siblings like list_concepts or get_concept by emphasizing text and structured filtering with relevance ranking.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when you need to search concepts with text or structured filters and get ranked results. However, it does not explicitly state when not to use it or name alternative tools, so it stops short of the explicit 'use X instead' guidance that would earn a 5.

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

validate_bundleA
Read-onlyIdempotent

Report OKF conformance separately from project validity for one bundle or the full current index.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleNoOptional bundle id to validate in isolation.

TDQS

A4.4/5.0
Behavior4/5

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

The description aligns with the annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true), and adds meaningful behavioral detail beyond them: it clarifies that when 'bundle' is provided the validation is isolated to that bundle, and when absent it applies to the full current index. This is a substantive operational nuance not captured in annotations, but it doesn't deepen further (e.g., what the report contains or failure modes), so it stops short of a 5.

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 sentence that leads with the action and resource, then states the scope condition. There is no filler or redundant phrasing; every clause carries necessary information about purpose and selection. It is efficiently front-loaded and easy to parse.

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

Completeness4/5

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

For a tool with one optional parameter, read-only annotations, and no output schema, the description covers the essential aspects: the purpose, the distinction from project validity, and the two invocation scopes. It does not explain domain terms like 'OKF conformance' or describe the output format, but given the simplicity of the tool and the low risk indicated by annotations, it is sufficiently complete for an agent to invoke it correctly. A slight gap is the lack of guidance on output structure, but that is not critical for a report-style tool.

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

Parameters4/5

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

The schema already documents the single 'bundle' parameter as 'Optional bundle id to validate in isolation,' and the description adds the complementary behavior when the parameter is omitted (full current index). This gives the agent a complete picture of the parameter's semantics, going slightly above the schema baseline of 3. With 100% schema coverage, the description adds the critical default-case logic, warranting a 4.

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

Purpose5/5

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

The description states a specific verb ('Report'), a clear resource (OKF conformance), and explicitly contrasts it with project validity. It also specifies the target scope ('one bundle or the full current index'), which distinguishes it from the sibling validate_project tool. Even without title, the agent can determine what this tool does and how it differs from closely 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 Guidelines4/5

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

The phrase 'separately from project validity' signals that this tool is appropriate when OKF conformance is the concern, distinct from validate_project. It also clarifies the two operating modes (single bundle vs. entire index), giving the agent a basis for deciding how to call it. However, it does not explicitly state when not to use it or name the alternative tool, relying on the implicit contrast rather than an explicit routing instruction.

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

validate_projectB
Read-onlyIdempotent

Report OKF conformance, project validity, and structured diagnostics for the complete configured project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds that it reports structured diagnostics and targets the complete configured project, which supplements the annotation context but does not elaborate on output format or edge cases such as partial validity.

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?

A single, front-loaded sentence with no wasted words. It conveys the core purpose and scope efficiently.

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?

With no output schema, the description should clarify the return value. It mentions 'structured diagnostics' but does not specify the structure, fields, or how errors are represented. Given the tool's simplicity and annotation coverage of safety, the gap is moderate.

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 tool has zero parameters and 100% schema coverage (empty schema). The baseline of 4 applies because there is nothing to explain; the description correctly scopes the operation to the entire project.

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 'report' and the resource 'complete configured project', specifying three outcomes: OKF conformance, project validity, and structured diagnostics. It implicitly distinguishes from bundle- or concept-level validators like validate_bundle and okf_validate_concept by focusing on the whole project, though it does not name 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 given on when to use this tool versus the many sibling validation tools (e.g., validate_bundle, okf_validate_concept). The description implies a whole-project scope but does not explicitly state alternatives or when to choose it over them.

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. 17 tool updatesv0.4.0
    • Addedcheck_computation_receipt
    • Addedcheck_v02_migration
    • Changedexport_graph2 fields changed
      • addedInput schema / properties / edgeKinds
        Added value: +{
        +  "description": "Limit exported edges to these edge kinds.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / includeAssets
        Added value: +{
        +  "default": false,
        +  "description": "Include explicitly referenced bundle assets in the export.",
        +  "type": "boolean"
        +}
    • Changedfind_paths1 field changed
      • addedInput schema / properties / edgeKinds
        Added value: +{
        +  "description": "Limit path traversal to these edge kinds.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedget_concept2 fields changed
      • changedInput schema / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "uri"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "bundle",
        -      "path"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "id"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "uri"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "bundle",
        +      "path"
        +    ]
        +  }
        +]
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Portable extensionless Concept ID or bundle-relative Markdown path.",
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedget_graph2 fields changed
      • addedInput schema / properties / edgeKinds
        Added value: +{
        +  "description": "Limit returned edges to these edge kinds.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / includeAssets
        Added value: +{
        +  "default": false,
        +  "description": "Include explicitly referenced bundle assets as graph nodes.",
        +  "type": "boolean"
        +}
    • Changedget_neighbors3 fields changed
      • addedInput schema / properties / edgeKinds
        Added value: +{
        +  "description": "Limit neighbors to these edge kinds.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / includeAssets
        Added value: +{
        +  "default": false,
        +  "description": "Include referenced asset neighbors.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / includeExternal
        Added value: +{
        +  "default": false,
        +  "description": "Include opaque external neighbors without fetching them.",
        +  "type": "boolean"
        +}
    • Addedget_provenance
    • Changedget_subgraph1 field changed
      • addedInput schema / properties / edgeKinds
        Added value: +{
        +  "description": "Limit traversal to these edge kinds.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Addedinspect_attested_computation
    • Addedlist_edge_kinds
    • Changedokf_suggest_concept_path2 fields changed
      • changedInput schema / properties / bundle / description
        Previous value: -"Writable bundle id that will contain the concept."New value: +"Writable root id; optional when exactly one local root is configured."
      • changedInput schema / required
        Previous value: -[
        -  "bundle",
        -  "type",
        -  "title"
        -]New value: +[
        +  "type",
        +  "title"
        +]
    • Changedokf_validate_concept2 fields changed
      • changedInput schema / properties / bundle / description
        Previous value: -"Writable bundle id that would contain the concept."New value: +"Writable root id; optional when exactly one local root is configured."
      • changedInput schema / required
        Previous value: -[
        -  "bundle",
        -  "path",
        -  "frontmatter"
        -]New value: +[
        +  "path",
        +  "frontmatter"
        +]
    • Addedprepare_attested_computation
    • Addedread_bundle_asset
    • Addedread_git_source
    • Changedsearch_concepts13 fields changed
      • addedInput schema / properties / asOf
        Added value: +{
        +  "description": "UTC ISO date or datetime used for deterministic freshness evaluation.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / attestationReady
        Added value: +{
        +  "description": "Require static Attested Computation readiness.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / freshness
        Added value: +{
        +  "description": "Limit results to unspecified, fresh, stale, or invalid freshness states.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / frontmatter
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Exact frontmatter filters; array fields use contains matching.",
        +  "type": "object"
        +}
      • addedInput schema / properties / generatedBy
        Added value: +{
        +  "description": "Limit results to this generator actor.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / hasSources
        Added value: +{
        +  "description": "Require concepts to have or not have normalized sources.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / linkedFrom
        Added value: +{
        +  "description": "Require an incoming edge from this concept URI.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / linkedTo
        Added value: +{
        +  "description": "Require an outgoing edge to this concept URI.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / orphanOnly
        Added value: +{
        +  "default": false,
        +  "description": "Return only concepts without incoming or outgoing resolved edges.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / runtime
        Added value: +{
        +  "description": "Limit results to this Attested Computation runtime.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / statuses
        Added value: +{
        +  "description": "Limit results to lifecycle statuses.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / trustTiers
        Added value: +{
        +  "description": "Limit results to unverified, machine-confirmed, or human-reviewed trust tiers.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / verifiedBy
        Added value: +{
        +  "description": "Limit results to concepts verified by this actor.",
        +  "minLength": 1,
        +  "type": "string"
        +}
  2. 20 tool updatesv0.3.3
    • First observedexport_graph
    • First observedfind_paths
    • First observedget_concept
    • First observedget_graph
    • First observedget_neighbors
    • First observedget_subgraph
    • First observedgraph_summary
    • First observedlist_bundles
    • First observedlist_concepts
    • First observedlist_relation_types
    • First observedlist_remote_bundles
    • First observedlist_tags
    • First observedlist_types
    • First observedokf_get_proposal
    • First observedokf_list_proposals
    • First observedokf_suggest_concept_path
    • First observedokf_validate_concept
    • First observedsearch_concepts
    • First observedvalidate_bundle
    • First observedvalidate_project

TDQS

B3.4/5.0

Scored across 28 tools

Disambiguation4/5

Most tools target distinct resources (concepts, bundles, graph, validation, computation), and descriptions clarify their specific scope. However, list_bundles and list_remote_bundles overlap since the former already includes remote bundles, and several validation tools have similar names. Overall, an agent can usually select correctly with clear descriptions.

Naming Consistency3/5

The naming mixes conventions: many tools use verb_noun patterns (list_, get_, validate_), but some have an okf_ prefix (okf_get_proposal, okf_validate_concept) and graph_summary is a noun phrase. This inconsistency reduces predictability, though the overall style is still readable.

Tool Count2/5

With 28 tools, the server exceeds the 25-tool threshold, making the set feel heavy. While the domain is complex, many listing and validation tools could be consolidated or generalized, and the count is high enough to overwhelm agents navigating the surface.

Completeness4/5

The tool surface is comprehensive for a read-only, validation, and graph-analysis server: it covers listing, querying, validating, and graph traversal. Missing create/update/delete operations appear out of scope, and minor gaps like no get_bundle or get_tag are workable. Overall, the domain is well-covered.

Maintenance

ActivitySlowing
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server that indexes Markdown, Word, HTML, and PDF documents into a SQLite knowledge graph with CJK+Latin full-text search and cross-document reference tracking. Runs drift audits to surface stale policies, conflicting research claims, superseded ADRs, and undocumented code exports.
    10
    8
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A CLI tool and MCP server that turns markdown documentation into a searchable, queryable knowledge base.
    29 npm
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that turns a Markdown folder (e.g. Obsidian vault) into a second brain, capturing readings and ideas, connecting them as concepts, and resurfacing related notes on demand.
    37 npm
    MIT