Skip to main content
Glama

okf-mcp

이 저장소는 엔터프라이즈 빠른 롤아웃 워크플로를 위해 원본 mhdaves/okf-mcp 프로젝트를 확장합니다. 원본 프로젝트와 그 기여자는 MIT 라이선스에 따라 크레딧이 유지됩니다.

okf-mcp는 Open Knowledge Format v0.2를 위한 로컬 우선 소비자, 검증기, 그래프 인덱스, CLI 및 MCP 서버입니다.

YAML frontmatter를 포함한 Markdown 파일로 구성된 OKF 번들 디렉터리를 소비합니다. 선택적 워크스페이스 모드는 여러 번들을 연합할 수 있습니다. 개념은 CLI 명령과 MCP 리소스 및 도구를 통해 노출되며, 검증, 구조화 검색, 그래프 탐색, 출처 조사, 제안 기반 작성을 수행합니다.

핵심은 의도적으로 데이터베이스, 임베딩, 빌드 단계, 또는 호스팅 서비스 의존성이 없습니다. 안전한 YAML에는 js-yaml, Markdown 구조에는 CommonMark, 인메모리 BM25+ 텍스트 검색에는 MiniSearch, stdio MCP에는 공식 Model Context Protocol TypeScript SDK v2를 사용합니다. 로컬 루트 모드는 네트워크 호출을 하지 않습니다. 선택적 원격 로딩은 공개 Markdown 개념과 명시적으로 참조된 비활성 에셋만 GitHub에서 가져옵니다. v0.2 계산 지원은 어떤 것도 코드를 실행하거나 수신 증명(attestation receipt)을 하지 않습니다.

OKF v0.2 지원 및 확장

OKF v0.2는 의도적으로 이식 가능한 파일 형식을 명시하며, 서빙 또는 쿼리 런타임을 명시하지 않습니다. okf-mcp는 그 경계를 명확히 유지합니다:

영역

공식 OKF v0.2

okf-mcp 동작

번들 및 정체성

Markdown 파일 디렉터리 트리; Concept ID는 .md 확장자를 사용하지 않는 번들 상대 경로입니다.

--root는 하나의 번들에 직접 매핑됩니다. okf://는 이식 가능한 Concept ID가 아닌 선택적 워크스페이스 로케이터입니다.

개념 메타데이터

type 필수, title, description, resource, tags 권장, 알 수 없는 키는 허용됨

확장 필드와 알 수 없는 유형을 보존하면서 표준 적합성은 워크스페이스 정책과 별도로 보고합니다.

출처 및 수명주기

sources, usage_window, generated, verified, status, stale_after

검색, 출처 탐색, 신뢰 계층, 결정적 신선도 검사를 위해 이러한 필드를 정규화합니다.

참조

Markdown 링크 및 경로를 값으로 갖는 resource, sources[].resource, computation, executor.resource, attester.resource 필드

코드를 실행하거나 암묵적으로 가져오지 않고 그래프 엣지와 제한된 비활성 자산 스냅샷을 구축합니다.

증명된 계산(Attested Computation)

계약 필드와 안내용 소비자 흐름을 정의하며 런타임 전송 프로토콜 및 증명자 패키징은 연기합니다.

계약과 다이제스트를 정적으로 검사하고, 선언된 매개변수 및 수령 필드 이름을 확인하며, 실행하거나 증명을 주하지 않습니다.

v0.1 호환성

전체 generated 매핑이 없을 때 timestamp 폴백, sources 키가 없을 때 # Citations 폴백 허용

두 형식을 모두 소비하고 검토 전용 마이그레이션 검사 및 제안을 추가합니다.

다음은 형식의 요구 사항이 아닌 okf-mcp 확장입니다:

  • CLI, MCP 및 HTTP 인터페이스; 인메모리 검색 및 그래프 뷰

  • 선택적 다중 번들 okf.project.yaml 워크스페이스 및 타입이 있는 relations

  • 호가성 id, aliases, okf:// 로케이터

  • 명시적 수락을 포함한 제안 기반 제작

  • 제한된 GitHub 원격 로딩 및 명시적으로 매핑된 고정 Git 소스

  • 생성기 플러그인 및 strictLinks와 같은 더 엄격한 옵트인 프로젝트 정책

Related MCP server: 50 First Tapes MCP Server

설치 및 실행

Node 22 이상이 필요합니다.

npm 레지스트리 없이 소스에서 실행

내부 npm 레지스트리는 필요하지 않습니다. 빌드 머지에서 종속성을 한 번 설치한 다음 node_modules를 포함한 전체 런타임 디렉터리를 배포하십시오:

git clone https://github.com/doctormacky/okf-mcp.git
cd okf-mcp
npm ci --omit=dev
node bin/okf-mcp.js --version

그런 다음 런타임을 에이전트 호스트로 복사하여 직접 호출할 수 있습니다:

node /opt/okf-mcp/bin/okf-mcp.js --version
node /opt/okf-mcp/bin/okf-mcp.js knowledge --help

안정적인 명령을 사용하려면 /usr/local/bin/okf에 작은 래퍼를 설치하십시오:

#!/usr/bin/env bash
set -euo pipefail
exec node /opt/okf-mcp/bin/okf-mcp.js "$@"

에이전트 Skill은 이 명령과 그 버전을 확인하지만, 런타임을 자동으로 설치하거나 업그레이드하지 않습니다.

GitHub 릴리스에서 설치합니다:

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

이 포크는 현재 npm 레지스트리가 아닌 소스에서 배포됩니다. 재현 가능한 배포를 위해 Git 커밋 또는 릴리스 아카이브를 핀하십시오. 업스트림 npm 패키지는 업스트림 전용 기능에서 계속 사용할 수 있지만, 이 포크의 호스팅 롤아웃 확장은 포함되지 않습니다.

git clone https://github.com/doctormacky/okf-mcp.git
cd okf-mcp
git checkout <commit-or-tag>
npm ci --omit=dev

현재 소스 브랜치에서 작업하려면:

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

--root은 하나의 로컬 OKF 번들 디렉터리를 받으며, 단일 번들에서 권장되는 okf-mcp 인터페이스입니다. 각 개념의 이식 가능한 정체성은 해당 루트 안에서 확장자가 없는 경로입니다.

--bundle은 경로 또는 id=path를 받습니다. 여러 플래그는 계속 지원됩니다. --project 및 해당 bundles: 목록은 OKF v0.2의 일부가 아니라 선택적 okf-mcp 연합/작성 확장입니다.

--remote-bundle은 id=https://github.com/<owner>/<repo>/tree/<ref>/<path> 형식을 받습니다. 공개 Markdown을 먼저 가져온 후 표준 v0.2 리소스 필드에 명시적 지정된 번들 내 파일만 가져옵니다. 원격 콘텐츠는 읽기 전용 및 비활성 상태를 유지합니다.

--inspect는 간결한 그래프 요약을 인쇄하고 종료합니다. --inspect 없이 명령을 추가로 지정하지 않으면 프로세스는 stdio MCP 서버를 시작합니다.

이 패키지는 설치 시 okf와 okf-mcp 이진 모두를 제공합니다. 소스를 명시하지 않으면 CLI는 먼저 가장 가까운 루트에서 okf_version을 선언하는 index.md를 찾습니다. 가장 가까운 프로젝트 검색은 호환 폴백으로 유지됩니다.

CLI 종료 상태는 성공은 0, 검증 또는 운영 실패는 1, 잘못된 사용법은 2입니다. 알 수 없는 옵션은 거부됩니다.

포함된 OKF 참조

이 저장소는 제품, 런타임 경계, 인터페이스, 작성 워크플로 및 보안 정책을 설명하는 자체 설명 OKF 번들을 게시합니다. 이 이식 가능 엔트리 Concept ID는 overview/okf-mcp이며; okf://okf-mcp/overview/okf-mcp는 워크스페이스/MCP 리소스 로케이터로 유지됩니다.

체크아웃 또는 설치된 패키지에서 번들 참조를 검증하고 쿼리하십시오:

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

이 릴리스에서 참조 번들을 직접 로드하십시오:

okf --remote-bundle okf-mcp=https://github.com/doctormacky/okf-mcp/tree/main/okf/bundles/okf-mcp --inspect

소스 런타임 아카이브에는 okf.project.yaml과 전체 참조 번들이 모두 포함됩니다.

선택적 다중 번들 프로젝트 구성

하나의 프로세스가 여러 루트를 연합하거나, 생성기를 구성하거나, 프로젝트 전반의 지침 어휘를 강제해야 하는 경우에만 okf.project.yaml을 사용하세요:

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

프로젝트 명령을 실행합니다:

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

명령:

  • 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의 옵션:

  • --host <host>: 바인딩 호스트, 기본값 127.0.0.1

  • --port <port>: 바인딩 포트, 기본값 8765

  • --write-token <token>: 쓰기 엔드포인트에 대한 bearer 토큰; 기본값은 `OKF_WRITE_TOKEN``입니다.

  • --proposal-root <path>: 제안 JSON 디렉터리, 기본값은 선택한 로컬 루트 또는 프로젝트 아래 .okf-proposals입니다.

MCP 클라이언트 구성

이 포크는 소스로 배포됩니다. MCP 클라이언트를 체크 아웃된 실행 파일의 절대 경로를 지정하십시오.

클라이언트 구성 예:

{
  "mcpServers": {
    "okf": {
      "command": "node",
      "args": [
        "/absolute/path/to/okf-mcp/bin/okf-mcp.js",
        "--root",
        "/absolute/path/to/okf",
        "mcp"
      ]
    }
  }
}

프로젝트 구성 모드: 읽기 전용 프로젝트 헬퍼만 제공하고 제안 변경은 하지 않습니다.

{
  "mcpServers": {
    "okf": {
      "command": "node",
      "args": [
        "/absolute/path/to/okf-mcp/bin/okf-mcp.js",
        "--project",
        "/absolute/path/to/repo/okf.project.yaml",
        "mcp"
      ]
    }
  }
}

제안 생성, 수락, 거부 기능을 활성화하려면 --authoring을 추가하십시오. 더 작은 직접-쓰기 영역을 원하면 --write --actor <actor>을 추가하여 읽기 전용 okf_validate_changes와 검증된 배치 okf_apply_changes를 노출하십시오. 카탈로그가 깨끗한 Git 워크트리에 있을 때 성공한 배치마다 커밋하려면 --git-commit을 추가하십시오. MCP 클라이언트가 런타임에 임의의 지원 공개 원격 번들을 로드할 수 있도록 --allow-remote-tool을 추가하세요. 구성된 원격 번들은 해당 런타임 로딩 플래그 없이도 읽을 수 있습니다.

stdio 서버는 @modelcontextprotocol/server v2를 사용합니다. 최신 2026-07-28 MCP 개정판과 SDK의 2025년대 클라이언트용 호환 경로(2025-11-25 포함)를 제공합니다. SDK는 프로토콜 협상, 프레이밍, 리소스 디스패치, 도구 디스패치 및 광고된 스키마 검증을 담당합니다.

알려진 도구에서 예상되는 실패(누락된 개념, 읽기 전용 번들, 실패한 원격 페치, 잘못된 인수 또는 제안 충돌)는 isError: true로 지정된 MCP 도구 결과로 반환됩니다. 활성화되지 않는 도구에 대한 호출는 SDK 디스패치에서 거부됩니다. 의도하지 않은 구현 오류는 내부 세부 정보를 노출하지 않도록 차단됩니다.

MCP 레지스트리 메타데이터

server.json은 이 포크의 소스 패키지 정체성과 stdio MCP 엔트리를 io.github.doctormacky/okf-mcp로 설명합니다. 메타데이터는 소스 패키지와 동기화되어 향후 레지스트리 게시에 사용될 수 있습니다. 그러나 이 포크는 현재 소스로 설치됩니다. 클라이언트는 절대 OKF 루트를 --root를 통해 전달하고 고정된 mcp 명령을 추가해야 합니다.

개념 정체성 및 확장

Concept ID는 번들-상대 Markdown 경로에서 .md를 제거한 것입니다. 이 확장자가 없는 경로는 휴대용 OKF 정체성입니다. okf-mcp는 워크스페이스 범위의 호환 로케이터도 노출합니다.

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

이전 .md URI와 유효한 사용자 정의 id는 호환 조회 별칭으로 남습니다. 단일 Concept ID는 로드된 번들 전체에 걸쳐 유일한 경우에만 해결됩니다. 독립 실행형 집계 카탈로그에서 okf://services/queue.md와 같은 URI 형태의 휴대 경로는 services/queue 가 전역 고유 동일성을 가지지 않는 services가 로드된 번들 id가 아닌 경우에도 해결됩니다. 정규 URI는 항상 우선합니다. 알려진 번들에서 못 찾았거나 모호한 휴대 경로는 유지되지 않습니다. 예약된 index.md와 log.md 리소스는 개념이 아니므로 파일 이름을 그대로 갖습니다.

아래의 id, aliases, 그리고 타입화된 relations 필드는 okf-mcp 확장입니다. 표준 v0.2 정체성은 계속 경로에서 파생됩니다.

---
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

새 콘텐츠는 내부에 대한 일반 상대 또는 번들-루트 Markdown 경로를 사용해야 합니다. 링크와 확장 관계 대상을 사용해야 합니다. 기존 okf:// 대상은 계속 지원됩니다. repo:// 같은 비-OKF 스킴은 불투명한 호환 참조로 유지됩니다.

고정된 Git 소스

코드 지식은 코드 저장소 외부에 있으면서도 컴퓨터에 특정 경로를 기록하지 않을 수 있습니다. 표준 sources 항목을Git Repository 개념을 가리키고 아래 okf-mcp의 git extension을 추가하세요.

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

저장소 개념은 로컬 프로세스 구성에서만 매핑하십시오:

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

read_git_source 및 source CLI 명령은 매핑된 Git 객체 데이터베이스에서 고정된 blob을 읽습니다. 이것들은 지저분한 작업 트리를 읽거나 가져오지 않습니다. 누락된 매핑 및 고정되지 않은 개정은 표시되지만 사용할 수 없습니다. 저장소 매핑은 일반 체크아웃, bare 저장소 또는 마운트된 경로를 가리킬 수 있습니다. 자격 증명과 로컬 경로는 OKF-번들 바깥에 유지됩니다.

도구

  • 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

대부분의 MCP 도구는 현재 인덱스에 대해 읽기 전용입니다. load_remote_bundle는 공개 GitHub 트리를 가져와 서버의 인메모리 인덱스만 변경하며, 파일을 쓰지 않습니다. 개념 목록 및 검색은 기본적으로 간결한 요약을 제공하지만, 탐색 메타데이터, 신호, 순위 또는 스니펫이 필요한 경우 detail: "full"을 전달하십시오. 관계 경로는 병렬 에지 종류가 동일한 개념들을 연결하더라도 노드 시퀀스를 기준으로 중복 제거됩니다.

모든 MCP 도구는 목적별 설명, 입력 파라미터 설명, 그리고 읽기 전용 동작, 파괴적 동작, 멱등성, 외부 접근을 다루는 표준 어노테이션을 포함합니다.

도구 인자는 실행 전에 공개된 입력 스키마에 대해 검증됩니다. 지원되지 않는 필드, 누락된 필수 값, 잘못된 원시 타입, 범위를 벗어난 정수는 강제 변환 없이 거부됩니다. 알 수 없거나 비활성화된 도구 이름은 프로토콜 수준의 잘못된 파라미터 오류로 유지됩니다.

도구 검색과 직접 호출은 동일한 기능 검사를 사용합니다.

모드

일반 제안

직접 라이브 쓰기

컴퓨테이션 제안

런타임 원격 로드

default

비활성화

비활성화

비활성화

비활성화

--authoring

활성화

비활성화

비활성화

비활성화

--write --actor openai/gpt-5.6

비활성화

활성화

비활성화

비활성화

--authoring --allow-computation-authoring

활성화

비활성화

활성화

비활성화

--reflow-remote-tool

비활성화

비활성화

비활성화

활성화

명시적 로컬 루트 또는 프로젝트 워크스페이스는 개념 검증, 경로 제안, 제안 검사 헬퍼를 노출합니다. 제안 변경 도구는 --authoring가 필요합니다. 직접 라이브 도구는 대신 --write와 human:<id>, process:<id>, 또는 provider/model 구문의 진실한 행위자를 요구합니다. 일반적인 단일 루트 모드에서 호출자는 bundle을 생략합니다. bundle은 여러 프로젝트 루트를 선택할 때만 필요합니다. 원격 루트는 읽기 전용으로 유지됩니다.

일반 개념 도구는 Attested Computation 계약을 만들거나 변경할 수 없습니다. okf_propose_attested_computation은 추가로 --allow-computation-authoring이 필요하며, 해당 개념에 대한 하나의 조정된 검토 제안과 외부 컴퓨테이션 파일을 함께 만듭니다.

라이브 개념 저작

직접 쓰기 기능을 가진 서버는 MCP 클라이언트/사용자 승인 경계만으로 충분한 검토가 이루어질 때 시작하십시오:

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

에이전트는 읽기 전용 배치 검증기 하나와 파괴적 적용 도구 하나를 보게 됩니다. YAML 대신 구조화된 개념 필드를 제공하며, OKF는 호환 가능한 Markdown frontmatter를 직렬화하고 구성된 generated.by와 배치 전체에 대한 generated.at 타임스탬프 하나를 기록합니다.

{
  "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" }
        ]
      }
    ]
  }
}

생성 경로는 선택 사항입니다. 서버는 먼저 요청된 prefix 내의 기존 같은 종류의 개념에서 강력한 우세한 디렉터리 규칙을 사용한 다음, 결정적 type/title slugs로 폴백합니다. okf_suggest_concept_path는 전략, 증거, 경로 사용 가능 여부, 같은 종류/제목 일치 항목을 보고하므로, 사용 가능한 파일명이 안전한 중복으로 오인되지 않습니다. 업데이트는 기존 uri를 식별합니다. 만료된 위치 항목은 제한된 가능한 대체 후보를 반환하며, 스칼라 필드는 기존 값을 대체하고 tags, sources, relations는 명시적 add/remove 패치를 사용합니다. metadata는 확장 frontmatter를 전달하지만 신원, 생성, 컬렉션 또는 방대한 양식 필드를 재정의할 수 없습니다. 경로와 URI는 업데이트 중에 변경할 수 없습니다. 개념 이동은 휴대형 신원을 변경하므로 별도의 의도적으로 지원되지 않는 작업으로 남습니다.

모든 1–100개 항목은 배치 단위로 하나의 미래 그래프로 검증되므로 함께 생성된 파고물이 서로 참조할 수 있고, 같은 종류/제목 충돌은 생성과 업데이트 모두에서 감지됩니다. okf_validate_changes를 의도한 전체 배치와 함께 호출하면 파일을 쓰지 않고 검증 시점의 미리보기를 받습니다. 검증와 적용은 같은 플래너를 공유하며, 적용은 미리보기 이후 리비전과 Git 상태가 변경될 수 있으므로 쓰기 큐 아래에서 모든 검사를 다시 진행합니다. 간결한 영수증은 v0.8 기본이며, v0.7 계획 레이아웃이 필요하면 detail: "full"을 전달하십시오. 효과는 구조화된 관계를 노출하고 서버 관리형 생성 출처를 실제 changedFields와 분리합니다.

서버는 모든 후보가 유효하고, 리비전 검사가 여전히 일치하며, 모든 대상이 하나의 쓰기 가능한 번들 안에 남아 있을 때만 아무것도 쓰지 않습니다. 프로세스 생성 데이터, 생성 출력 디렉터리, .git/** 같은 숨김/제어 평면 경로, 예약 파일, Attested Computation 계약은 라이브 쓰기 대상이 아닙니다. 롤백은 각 복원 직전에 리비전을 검사하고 감지된 교체를 부분적인 rollback_conflict로 보고합니다. 이 보호는 문서화된 단일 외부 쓰기 요구 사항 아래 최선 노력으로 제공되며, 프로세스 간 compare-and-swap 레퍼런스 변환을 보장하지 않습니다.

--git-commit을 서버 정책으로 추가하면 성공한 배치마다 커밋 하나를 만듭니다. 감지된 Git 워크트리는 커밋 전에 완전히 깨끗해야 하고 구성된 신원이 있어야 합니다. 활성 Git 필터 속성과 assume-unchanged/skip-worktree 인덱스 플래그는 작업을 차단하므로 검증이 설정된 필터를 실행하거나 숨겨진 사용자 변경을 간시할 수 없습니다. replace-objects 추적은 비활성화되어 숨은 대체 기록이 부모 트리를 바꿀 수 없습니다. 서버는 검증된 Markdown 바이트로부터 격리된 인덱스를 만들고, commit-tree로 그대로 트리를 만든 다음, compare-and-swap ref 업데이트로 게시하고 이후 영향 받은 특정 인덱스 경로만 동기화하며, 푸시는 하지 않습니다. 동시에 스테이지된 관련 없는 항목은 커밋에 들어갈 수 없습니다. 결정적 커밋 실패는 일치되는 유효 파일을 작업 트리 전용으로만 남깁니다. 결과 커밋 트리가 증명되지 않으면 모호한 ref 업데이트 시간 초과는 알려지지 않은 것으로 보고됩니다. Git이 아닌 카탈로그는 일반적으로 쓰입니다. 모든 응답은 리포지토리 루트, 커밋 상태, 인덱스 상태, 대상 바이트 상태, 지속성 경계를 명시적으로 밝힙니다.

개념 저작

검토 가능한 제안 워크플로우는 --authoring으로 시작된 MCP 도구와 HTTP API를 통해 계속 사용할 수 있습니다. 클라이언트는 로컬 파일 작업 목적이 필요 없습니다.

MCP 제안 흐름:

{
  "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."
  }
}

그런 다음 반환된 proposal.id를 사용해 okf_accept_proposal을 호출합니다.

기존 개념을 수정하려면 get_concept으로 읽은 다음에 변경이 필요한 필드만 제안합니다:

{
  "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."
  }
}

생략된 frontmatter 필드와 법문 본문은 보존됩니다. 개념 URI는 업데이트에서 변경할 수 없습니다. 각 업데이트 제안은 소스 파일 리비전을 기록하고, 수락은 파일 교체 직전에 변경을 다시 확인하므로 감지된 동시 변경은 거부됩니다.

안전 규칙:

  • 개념 경로는 쓰기 가능한 번들 내의 숨김 없는 안전한 상대 .md 경로여야 함

  • 개념 쓰기는 쓰기 가능한 번들 아래 심볼릭 링크를 통과할 수 없음

  • 누락된 하위 디렉터리는 제안이 수락될 때만 생성됨

  • index.md와 log.md는 개념으로 기록할 수 없음

  • 중복 경로와 중복 okf:// ID는 거부됨

  • 업데이트가 개념 신원을 변경할 수 없고, 제안 생성 후 감지된 변경을 거부함

  • 잘못된 ID, 잘못된 관계 타입, 유효한 내부 OKF 관계 오류는 검증 실패

  • repo://... 같은 외부 관계 대상은 허용됨

  • 직접 배치는 단일 프로세스 내에서 직렬화되고 검증된 결합 미래 그래프를 게시하기 전에 확인

  • 독립 프로세스는 여전히 별도의 단일 쓰기자 요구 사항을 요구함

HTTP API

두 가지 HTTP 모드가 있습니다:

  • hosted: 권장 엔터프라이즈 신속 롤아웃 모드로 인증된 MCP Streamable HTTP와 불변 스냅샷 롤아웃을 한 프로세스로 결합합니다.

  • serve: 아래에 설명하는 기존의 로컬 제안 중심 REST API이며, MCP 트랜스포트가 아니며 불변 롤아웃 워크플로우를 제공하지 않습니다.

HTTP 서버를 시작합니다:

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

읽기/검증 엔드포인트:

  • GET /health

  • GET /v1/assets

  • POST /v1/concepts/validate

  • POST /v1/concepts/suggest-path

제안 검사와 변경 엔드포인트는 대기 중인 레코드에 완전한 후보 Markdown 및 컴퓨테이션 코드를 포함할 수 있으므로 Authorization: Bearer <OKF_WRITE_TOKEN>이 필요합니다.

  • GET /v1/proposals

  • GET /v1/proposals/:id

  • POST /v1/proposals

  • POST /v1/proposals/update

  • POST /v1/proposals/:id/accept

  • POST /v1/proposals/:id/reject

기본 파일 기반 제안 저장소는 선택한 루트 또는 프로젝트의 .okf-proposals에 제안 JSON을 씁니다. 수락된 제안은 Markdown 개념을 선택한 로컬 루트에 씁니다.

POST /v1/concepts/validate와 POST /v1/concepts/suggest-path는 데이터를 지속하지 않습니다. POST /v1/proposals는 제안 레코드만 유지합니다. POST /v1/proposals/:id/accept만 개념을 쓰는 파일입니다.

원격 번들

원격 번들을 사용하면 다른 저장소에서 게시된 개념을 소스 패키징 없이 한 워크스페이스가 소비할 수 있습니다. 호스트에 의존하지 않는 설정은 모든 Git 호스트에서OKF 저장소를 복제 또는마운트하고 --root를 통해디렉터리를 전달하세요. 전송과 동기화는 OKF 스펙 외부에 남습니다.

지원되는 소스:

  • 공개 GitHub 리포지토리 트리 URL: https://github.com/<owner>/<repo>/tree/<ref>/<path>

원격 로딩:

  • 트리를 인벤토리하고 선택된 .md 문서를 먼저 가져온 후 명시적으로 참조된 번들 내부 자산만 가져옴

  • 해석된 리비전 메타데이터, SHA256 다이제스트, 문서/자산 바이트 수, 해결되지 않은 참조를 기록함

  • 원격 경로를 검토하지만 참조되지 않은 .sql, .py 또는 바인더리 파일의 내용을 다운로드하지 않음

  • 원격 번들에 대해 구성된 번들 id마다 유지함

  • include 및 exclude 필터를 지원함

  • 원격 번들 경로 안의 Markdown 링크를 해석함

  • 파일 수와 바이트 제한을 적용함

  • 원격 저장소에서 코드를 실행하지 않음

CLI 예제:

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 런타임 로딩:

load_remote_bundle 호출 전에 --allow-remote-tool를 지정하여 MCP 서버를 시작합니다.

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

로드된 것을 확인하려면 list_remote_bundles를 사용합니다.

구조화된 검색

search_concepts는 다음을 받습니다.

  • query

  • bundle

  • types

  • tagsAny

  • tagsAll

  • path

  • frontmatter

  • linkedTo

  • linkedFrom

  • relationType

  • orphanOnly

  • statuses

  • trustTiers

  • freshness 및 결정적 asOf

  • hasSources

  • runtime 및 attestationReady

  • generatedBy 및 verifiedBy

  • detail (compact 기본, 또는 full)

  • limit

  • offset

list_concepts는 텍스트 query도 함께 받아들이며, 이를 리스트 필터와 함께 적용합니다. 텍스트 검색은 대소문자를 구분하지 않는 토큰화를 사용하며, 순서와 무관하게 모든 쿼리 용어를 요구합니다. BM25+는 제목, 유형, 태그, 별칭, 설명, 경로, 본문 매칭을 순위화하며, frontmatter는 정확한 구조화 필터를 통해서는 계속 사용할 수 있지만 텍스트 인덱스에는 복사되지 않습니다. 점수는 결과 집합 내에서 상대적이며, 버전 간 안정적인 척도가 아닙니다. 컴팩트 결과에는 uri, title, type, description만 포함되며, 제목, 유형, 설명에는 크기 제한이 있고 전체(full) 결과는 무손실로 유지됩니다.

쿼리는 512자와 16개 용어로 제한됩니다. 접두어 확장, 퍼지 매칭, 형태소 분석, 불용어 제거는 의도적으로 비활성화되어 있어 코드 식별자와 도메인 용어가 문자 그대로 유지됩니다. 구두점만으로 구성된 쿼리는 결과를 반환하지 않습니다. 태그와 유형은 대소문자를 구분하지 않고 매칭됩니다. 임의의 frontmatter 필터는 정확한 스칼라 매칭과 배열-포함(array-contains) 매칭을 지원합니다. relationType은 해당 유형의 나가는(outgoing) 관계를 가진 개념을 선택합니다.

SDK 회귀 테스트 스위트는 실제 직렬화된 MCP 텍스트에서 도출한 중립적인 4단계 연구 경로도 예산으로 잡습니다. UTF-8 바이트를 4로 나눈 값을 결정적 추정치로 사용하며, 정확한 모델 토크나이저나 과금 수치는 아닙니다. 절대 컴팩트 예산과 컴팩트/전체 비율을 모두 보호합니다.

예시:

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

로컬 관련성 및 성능 점검을 위해, 번들 루트와 선택적 JSON 배열의 { "query": "...", "expected": "path/or/concept-id" } 판정으로 패키징되지 않은 개발 벤치마크를 실행합니다:

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

OKF 및 검색 인덱스 구축 시간, 유지 힙/RSS, p50/p95 쿼리 지연 시간, Recall@10, MRR@10, 대표 순위를 보고합니다. 검색 인덱스는 프로세스 로컬이며 파싱된 OKF 인덱스에 키가 지정되므로, 원격 로드와 수락된 제안은 자동으로 새 인덱스를 받습니다.

그래프 동작

okf-mcp 그래프 프로젝션에서 Markdown 링크는 markdown_link 엣지가 되고, 확장 relations는 유형화된 relation 엣지가 되며, 표준 v0.2 경로 값 필드는 resource, source, computation, executor, attester 엣지가 됩니다. 내부 개념 참조는 표준 노드로 확인되고, 명시적으로 참조된 비-Markdown 파일은 okf-mcp okf-asset:// 노드로 확인되며, URL과 범위 설명자는 페치되지 않은 외부 또는 불투명한 리프로 남습니다.

탐색 편의를 위해 okf-mcp는 정확한 문서 대상이 없을 때 중첩 번들 디렉터리로의 링크를 해당 디렉터리의 예약된 index.md로 확인합니다. 이는 로컬 및 원격 번들과 제안 작성 중 후보 검증에 모두 적용됩니다.

그래프 도구는 제한된 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": []
}

먼저 graph_summary를 사용하여 라이프사이클, 신뢰, 신선도, 런타임, 준비 상태, 엣지 종류별 개수를 확인하세요. 그래프 도구는 edgeKinds를 받아들이며, 해당 리프 노드가 필요하면 includeExternal: true 또는 includeAssets: true를 전달하세요.

기본 관계 유형:

  • depends_on

  • produces

  • consumes

  • persists_to

  • materializes_to

  • configured_by

  • checked_by

  • owned_by

  • supersedes

  • related_to

프로젝트별 관계 유형은 okf.project.yaml의 relationTypes로 추가할 수 있습니다.

bundles와 plugins의 프로젝트 경로는 okf.project.yaml이 있는 디렉터리 안에 있어야 하는 상대 경로여야 합니다. 절대 경로와 ../ 이스케이프는 거부됩니다.

번들 include와 exclude 필터는 단순한 경로 패턴을 사용합니다:

  • 정확한 파일 경로(예: services/order-status.md)

  • 디렉터리 접두어(예: archive/)

  • *: 경로 세그먼트 하나

  • **: 중첩된 경로

검증

validate, validate_bundle, validate_project는 별도의 conformant와 validForProject 필드 plus 구조화된 진단 정보를 반환합니다. valid는 validForProject를 위한 호환 별칭으로 남습니다.

OKF 적합성은 해당 파일이 있을 때 다음을 다룹니다:

  • 예약되지 않은 개념 문서에서 파싱 가능한 YAML 매핑 frontmatter

  • 비어 있지 않은 type

  • index.md와 log.md의 예약된 구조

알 수 없는 frontmatter 키와 알 수 없는 개념 유형 값은 적합성에 실패하지 않습니다. YAML 파서는 중첩 매핑, 배열, 블록 스칼라 및 안전한 YAML 코어 스키마가 받아들이는 기타 구조를 지원하며, 중복 키와 지원되지 않는 사용자 지정 태그는 거부됩니다.

누락된 index.md 파일과 끊어진 교차 링크는 OKF 적합성에 실패하지 않습니다. strictLinks는 OKF-MCP 작업 공간 유효성(validForProject)에만 영향을 주며, 규범적 conformant 결과에는 영향을 주지 않습니다.

프로젝트 유효성은 추가로 다음을 보고합니다:

  • 중복 OKF URI

  • 기본적으로 권고(advisory) 사항인 내부 Markdown 링크 끊어짐; 프로젝트 strictLinks: true로 설정하거나 --strict-links를 전달하면 프로젝트에 유효하지 않은 것으로 처리됨

  • 유효하지 않은 관계 유형

  • 누락된 관계 대상

  • 끊긴 okf:// 관계 대상

  • 중복 번들 ID

  • 유효하지 않거나 경로를 이탈하는 프로젝트 경로

  • 구성된 번들 루트 밖으로 확인되는 링크

  • 누락된 번들 루트

서버는 일부 번들의 유효한 개념을 계속 제공합니다.

선택적 v0.2 패밀리는 signals로 정규화됩니다. 잘못된 형식의 프로비전, 생성, 검증, 라이프사이클, 신선도 또는 계산 메타데이터는 권고(advisory)를 생성하며 절대 네 번째 신뢰 등급을 만들지 않습니다. 검증은 unverified로 폐쇄 실패합니다. 상태가 없으면 기본값은 stable입니다. 신선도는 asOf가 제공되면 명시적 asOf 날짜로 평가됩니다. 작성은 소비보다 엄격하며 잘못된 형식의 알려진 v0.2 필드를 거부합니다.

Attested Computation

inspect_attested_computation은 런타임, 선언된 매개변수, 승인된 인라인 또는 파일 computation digest, executor receipt 필드, attester 참조, 인덱싱된 자산, 준비 상태 및 진단 정보를 보고합니다. prepare_attested_computation은 선언된 매개변수 이름을 확인하고 값을 반환하지 않고 digest를 반환합니다. check_computation_receipt는 값을 반환하지 않고 필드 존재 여부를 확인하며, receipt를 저장하거나 attestation을 주장하지 않습니다.

okf-mcp에는 실행 또는 attestation 어댑터가 없습니다. computation, executor 리소스, attester 리소스를 실행하지 않으며, 요청 시 외부 계약 URI를 가져오지도 않습니다.

CLI 대응은 computation inspect|prepare|check-receipt, provenance, edge-kinds, asset으로 사용할 수 있습니다. 민감한 값은 --parameters-file <path|-> 또는 --receipt-file <path|->로 공급하세요. 원시 매개변수 및 receipt JSON은 프로세스 인자에서 의도적으로 거부됩니다. -는 stdin에서 JSON 객체 하나를 읽습니다. 에셋 읽기는 인덱싱된 1 MiB 제한까지 --max-content-bytes를 받아들입니다.

기존 카탈로그를 v0.2로 마이그레이션

v0.2 사양은 두 가지 폴백을 통해 v0.1 번들을 계속 사용할 수 있게 합니다: generated가 없을 때 이전 timestamp, 그리고 sources가 없을 때 이전 본문 # Citations 목록. okf-mcp는 읽기 중 이러한 폴백을 적용하며 선택적 검토 전용 변환 워크플로를 제공합니다.

하나의 루트에 대해 마이그레이션 준비 상태를 검사하고 아무것도 쓰지 않고 제안된 네이티브 필드를 미리 보세요:

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

선택적 다중 루트 프로젝트 모드에서는 작업자 매핑 JSON 앞에 루트 id를 제공하세요.

마이그레이션은 의도적으로 보수적입니다:

  • 네이티브 generated 및 sources 필드가 항상 우선합니다

  • 유효한 timestamp는 진실한 by 행위자가 명시적으로 확인된 경우에만 새 generated: { by, at } 매핑에 복사됩니다

  • # Citations는 하나의 최상위 H1 섹션에 안전하게 파싱 가능한 목록 항목이 최소 하나 이상 있고 구문 분석되지 않은 산문, 중첩 섹션, 모호한 항목 또는 경로 이탈이 없는 경우에만 sources가 됩니다

  • 기존 필드와 인용 산문은 호환성을 위해 유지됩니다

  • --generated-path, 문서 플래그 또는 generated_file/generatedFile frontmatter에 의해 표시된 개념은 생성기를 통해 변경해야 합니다; 원격 루트는 보고 전용입니다

  • 신원 충돌, 잘못된 문서, 안전하지 않은 참조, 확인되지 않은 자산은 버전 선언을 차단합니다

okf_propose_v02_migration는 로컬 루트 작성을 요구합니다. 검토 매니페스트, 영향을 받은 파일당 하나의 제안, 그리고 게이팅된 루트 okf_version: "0.2" 제안을 생성합니다. 자동으로 승인되지는 않습니다. 루트 제안은 모든 하위 제안이 승인되고 전체 카탈로그가 검증된 후에만 승인할 수 있습니다.

생성기 플러그인

생성기 플러그인은 okf.project.yaml에서 구성되며 generate로 실행됩니다.

기본 제공 플러그인:

  • filesystem: 매칭되는 소스 파일당 하나의 개념을 생성합니다. 기본값은 Markdown 파일입니다.

  • json-spec: JSON 파일당 하나의 개념을 생성하며 대상 테이블이 있을 때 persists_to 관계를 방출할 수 있습니다.

생성된 출력은 일반 Markdown/YAML OKF이며 직접 작성한 개념과 동일한 인덱서로 검증됩니다.

제한 사항

  • MCP는 stdio와 Streamable HTTP를 지원합니다. 인증된 통합 엔터프라이즈 프로필에는 hosted를 사용하세요. 독립형 mcp --http는 하위 수준 전송 모드이며 호스팅된 인증 또는 롤아웃 엔드포인트를 추가하지 않습니다.

  • MCP 프로토콜 호환성은 고정된 공식 SDK v2 종속성을 따릅니다.

  • 파일 감시기가 없습니다. 외부 파일 변경 후 서버를 다시 시작하세요. MCP 작성으로 승인된 개념은 MCP 서버 인덱스를 즉시 새로고칩니다.

  • 호스티드 모드는 다중 프로세스가 아닌른 단일 프로세스, 단일 작가자 빨른 롤아웃 전개 서비스이지 분산 다중 테난트 제어 평면가 아. 같 은 생션 스토어에 대 해 다수 작가자를 일 시키지 마세 요.

  • 구 성된 번들 루트 는 호 스티 드 모 드 에 서 최 선 노력 호 환 미 러 입 닉니 다. 불 변 생 성 물 이 제 공 원 입 닉니 다.

  • OKF v0.2 계 산 지 원 은 정 적 검 사 및 사 전 검 사 만입 닉다. 계 산 이 나 attestor를 실행하지 않니 크다.

Available Tools

28 tools
check_computation_receiptA
Read-onlyIdempotent

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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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_conceptsA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
tagNoLimit results to concepts containing this tag.
typeNoLimit results to this exact concept type.
limitNoMaximum number of concepts to return.
queryNoOptional all-term text query matched against concept metadata and content; maximum 16 terms.
bundleNoLimit results to this bundle id.
detailNoCompact returns only URI, title, type, and description; full includes navigation metadata and signals.compact
offsetNoNumber of matching concepts to skip before returning results.

TDQS

A3.5/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 minimal behavioral context beyond what annotations provide, such as the fact that results are compact summaries, but it does not disclose pagination behavior or any edge cases. Given the baseline from annotations, a 3 is appropriate.

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 written sentence with no filler words. It front-loads the core purpose and then lists the optional filters, achieving maximum clarity with minimal text.

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 is adequate for a list tool with fully documented schemas and annotations, but it does not state pagination behavior, sorting, or any error cases. Given the 7 parameters and absence of an output schema, a slightly richer description could help, but the current one is sufficient for an agent familiar with the schema. A 3 reflects this balance.

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 7 parameters are already documented in the schema. The description only summarizes these filters without adding new semantics or syntax details. Since the schema handles the heavy lifting, the description adds no significant value beyond what is structured, aligning with the baseline of 3.

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 action (List) and resource (OKF concept summaries) and mentions the available filters. It is clear and distinct, though it does not explicitly differentiate from siblings like search_concepts or get_concept, but the purpose is self-evident.

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 through the filters (bundle, type, tag, text), but it does not explicitly state when to use this tool versus alternatives such as search_concepts or get_concept. There is no mention of exclusions or preferred conditions, leaving the agent to infer usage from the filter list.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

NameRequiredDescriptionDefault
asOfNoUTC ISO date or datetime used for deterministic freshness evaluation.
limitNoMaximum number of concepts to return.
queryNoAll-term text query matched against concept metadata and content; maximum 16 terms.
typesNoLimit results to any of these concept types.
bundleNoLimit results to this bundle id.
detailNoCompact returns only URI, title, type, and description; full includes ranking, navigation metadata, and signals.compact
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.5/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 fully covered structurally. The description adds the 'ranked summaries' output nature, which is genuinely useful context. It does not, however, disclose pagination, the temporal significance of the asOf parameter, or result-shape variation across the detail enum — modest gaps that annotations do not cover.

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, front-loaded with the imperative verb 'Search,' that packs the verb, resource, output nature, and filter modes with zero filler words. Nothing is wasted and nothing is repeated from the schema or annotations.

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

Completeness3/5

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

For a tool with 23 parameters and semantics like temporal asOf, freshness states, trust tiers, and frontmatter object filters, a one-line description is thin on orienting context. However, the schema fully documents every parameter and the annotations cover the safety profile, so the agent can still invoke it correctly. 'Ranked summaries' hints at output, and no output schema exists to carry the return contract.

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% — all 23 parameters carry their own descriptions in the schema, including the detail enum, offset/limit ranges, and filter semantics. The description adds zero parameter-level detail beyond the schema, which is the correct baseline (3) for a fully self-documenting schema.

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

Purpose4/5

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

The description names a specific verb ('Search'), a resource ('OKF concepts'), and an output shape ('return ranked summaries'), with the scope delimited by 'using text and structured filters.' This clearly distinguishes a search-and-filter operation from the sibling list_concepts (pure enumeration) and get_concept (single retrieval). It loses a point only because it never names or explicitly contrasts those siblings.

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 phrase 'using text and structured filters' implies this is the go-to tool when free-text or structured filtering is needed, in contrast to the listing siblings. However, with four list/search-adjacent sibling tools (list_concepts, get_concept, get_neighbors, find_paths), there is no explicit statement of when to prefer this tool over those, nor any exclusion or prerequisite guidance.

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.

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.

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. 28 tool updatesv0.9.0
    • First observedcheck_computation_receipt
    • First observedcheck_v02_migration
    • First observedexport_graph
    • First observedfind_paths
    • First observedget_concept
    • First observedget_graph
    • First observedget_neighbors
    • First observedget_provenance
    • First observedget_subgraph
    • First observedgraph_summary
    • First observedinspect_attested_computation
    • First observedlist_bundles
    • First observedlist_concepts
    • First observedlist_edge_kinds
    • 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 observedprepare_attested_computation
    • First observedread_bundle_asset
    • First observedread_git_source
    • First observedsearch_concepts
    • First observedvalidate_bundle
    • First observedvalidate_project

TDQS

B3.4/5.0

Scored across 28 tools

Disambiguation4/5

Most tools have distinct purposes: list_types, list_tags, and list_relation_types each target different entities, while graph traversal tools (get_neighbors, find_paths, get_graph, get_subgraph) are clearly differentiated by scope. A few pairs like list_bundles and list_remote_bundles could cause minor confusion but descriptions clarify local vs remote.

Naming Consistency2/5

Naming is inconsistent: some tools use a verb_noun pattern (list_types, get_concept) while others have a nonstandard 'okf_' prefix (okf_validate_concept, okf_list_proposals). Also, 'graph_summary' breaks the verb-first convention, and 'check_v02_migration' mixes letters and numbers. The mixed styles reduce predictability.

Tool Count2/5

With 28 tools, the surface is quite large for what appears to be a read-only graph and validation server. While not extreme (≤50), it exceeds the typical comfortable range and many tools feel like minor variations on similar read/validate operations, suggesting the set could be consolidated.

Completeness3/5

The toolset covers reading, searching, validating, and exporting graph data, plus proposal listing/reading, but lacks any creation or update tools for concepts or bundles. Given the emphasis on validation and proposals, there is no direct 'create_concept' or 'submit_proposal' tool, leaving a notable gap in the complete authoring lifecycle.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers