data-olympus MCP server
The data-olympus MCP server is a governance-grade knowledge base for agent workforces, enabling structured knowledge management, retrieval of governing rules, and a controlled write pipeline for collaborative authoring and enforcement.
Health & Observability
kb_health– Check service health (index freshness, pending counts, degraded state)kb_audit– View recent audit events filtered by time, agent, or statuskb_session_recap– Per-session write summary (committed, demoted, rejected)kb_compliance– Aggregate enforcement events (consults, gate checks) overall or per agent
Knowledge Retrieval & Search
kb_search– Full-text search with filters (tier, category, status, type, validity, in-force); supports abstain modekb_get– Retrieve a full document (content + metadata) by stable ID (e.g.STD-U-001,ADR-002)kb_list– List document IDs in a given tier/categorykb_outline– Browse the tier/category tree with document counts
Governance & Enforcement
kb_consult– Record a consultation and retrieve governing rules for a given intent (in-force docs only)kb_gate_check– Check whether a pending code action is allowed or requires a fresh consultationkb_record_event– Record gate bypass or degraded enforcement events in the audit log
Writing & Proposals
kb_propose_memory– Propose a new memory item; high-confidence auto-commits, low-confidence enters a pending queuekb_propose_edit– Propose an edit to an existing or new markdown file (same confidence-gated flow)kb_list_pending– List all proposals awaiting operator reviewkb_resolve_pending– Approve (with optional edited text) or reject a pending proposal; includes secret-scan override
Onboarding & Project Management
kb_onboarding_status– Check whether a workspace/component is absent, partial, onboarded, or a rename candidatekb_bootstrap_project– Atomically commit a set of initial files to bootstrap a new workspace/componentkb_cleanup_plan– Identify local docs that duplicate KB content and can be replaced with thin KB pointers
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@data-olympus MCP serverfind all accepted decisions in tier T1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
data-olympus
New here? Start with WHY.md. It is the story behind the project: the problem we kept hitting with coding agents, what data-olympus does differently, how it relates to Google's Open Knowledge Format, and where our benchmarks say it is strong and where it is not. The rest of this README is the technical reference.
data-olympus is a governance-grade knowledge-base format and server for agent workforces. It is readable by Open Knowledge Format (OKF) consumers: it inherits OKF's directory structure, frontmatter conventions, reserved filenames, and link model, then layers governance extensions on top (stable id, controlled type/status/tier fields, supersedes chains) plus a single-writer MCP server and a CLI. CI proves two concrete directions against official Google OKF commit d44368c15e38e7c92481c5992e4f9b5b421a801d: its reference visualization consumer reads every concept in example-bundle, and data-olympus imports, lints, indexes, searches, and retrieves the pinned official Bitcoin sample. This is fixture-scoped interoperability evidence, not a blanket guarantee for every OKF bundle or future upstream revision. The result is a git-native, version-controlled document graph of engineering standards, architectural decisions, and project knowledge that agents and humans can read, search, and extend without any proprietary service.
It governs decisions, not code. When an agent is about to make a choice (a library, a pattern, a migration), data-olympus surfaces the established standard or decision that should govern that choice. It is deliberately not a code-search, reference-finding, or "where is X used" tool: LSP, grep, and Sourcegraph already do that well. The retrieval task it targets is coding-intent to governing-rule, and it helps where current model interaction during vibe-coding is weakest: keeping the model aligned to patterns the team has already established as correct.
Status: pre-1.0 beta. Stable releases are distributed through PyPI and GHCR.
Why
Portable, no lock-in. The entire KB is a directory of markdown files in git. No database, no proprietary schema, no vendor.
Git-native diffs and review. Every change is a commit. Proposed edits go through a pending queue before commit; history is plain git log.
Agent and human readable. Plain markdown with YAML frontmatter. No SDK required to read or author a document.
Governed multi-agent writes. The single-writer MCP pipeline (advisory locks, per-session worktrees, durable push queue) prevents concurrent write races without requiring distributed locking infrastructure.
Queryable by status, tier, and type. Filter by
status: accepted,tier: T1, ortype: decisionwithout post-processing. Thesupersedeschain makes it possible to trace decision history across the graph.Tested with official OKF tooling. CI pins an exact Google OKF revision and proves both consumption directions over committed fixtures. The pin, fixture checksum, and Apache 2.0 license provenance live in
tests/okf/reference.json.
Related MCP server: Knowledge MCP
Quickstart
Requires Python 3.13+ and uv. Run the stable CLI
directly from PyPI:
uvx --from data-olympus data-olympus --helpInstall it persistently when you are ready to create a bundle and run the server:
uv tool install data-olympus
data-olympus init my-kb
data-olympus-mcp --helpAn announced candidate remains opt in through its exact PyPI version:
uvx --from 'data-olympus==0.6.0rc3' data-olympus --helpSee docs/quickstart.md for bundle initialization, server startup, readiness,
agent registration, and the contributor source installation.
See docs/adoption.md for the full bundle authoring guide.
Documentation
SPEC.md: format specification (bundle layout, frontmatter schema, serving contracts).docs/quickstart.md: verified local-run procedure.docs/adoption.md: bring-your-own-KB guide (author, lint, index, serve, wire an agent).docs/serving.md: single-replica serving model, read-only replicas, git pull loop, health/readiness/liveness split, proxy headers, audit-log rotation.docs/operations.md: production runbook — backup, upgrade, recovery playbooks (degraded/fetch-failed, history rewrite, frozen/demoted push entries, orphaned locks), and the health/alerting model.docs/comparison.md: how data-olympus relates to OKF, enterprise catalogs, markdown KB tools, agent-context conventions, RAG, and ADR tooling.docs/okf-profile.md: field-by-field OKF profile — which governance extensions are stable, which are runtime-only serving fields, and which are experimental candidates.docs/glama.md: Glama registry claim, release, and score-maintenance notes.docs/enforcement.md: turning the KB into a mandatory consultation gate (hooks,kb enforce).benchmarks/README.md: retrieval benchmark methodology and how to reproduce the numbers indocs/comparison.md.SECURITY.md: supported versions and how to report a vulnerability.
License
Available Tools
9 toolscall_toolB
Call a tool by name with the given arguments.
Use this to execute tools discovered via search_tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the tool to call | |
| arguments | No | Arguments to pass to the tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It only states the action ('call'/'execute') without addressing potential side effects, error handling, or the dynamic and possibly dangerous nature of executing arbitrary tools. This is a significant transparency gap for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant phrasing. The action and usage context are front-loaded, making it easy to parse and remember. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, and the description does not explain what the caller should expect as a return value or that arguments must conform to the target tool's schema. For a meta-execution tool, this lack of critical context makes the description incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters ('The name of the tool to call' and 'Arguments to pass to the tool'). The tool description adds no extra parameter meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with the verb 'call' and identifies the resource as a tool by name. It also distinguishes itself from sibling tools by explicitly connecting to 'execute tools discovered via search_tools,' which separates it from search and knowledge-base functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence provides direct usage guidance: 'Use this to execute tools discovered via search_tools.' This tells the agent exactly when to invoke it. It does not mention alternatives or exclusions, but for a meta-dispatch tool, the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_consultKB ConsultA
Record a consultation for (source_session, workspace) and return the governing rules for the intent. Call before code/architectural work. trigger is 'explicit' (default: a deliberate consult, clears the gate) or 'prompt_hook' (an installer auto-consult: audited, never clears).
Retrieval is hard-filtered to the in-force class (active/accepted/ approved, within its validity window, and never a memory-inbox doc): an unreviewed proposed memory, a retired/superseded decision, an expired doc, or a legacy/forged inbox file is never returned as a governing rule.
pending_actions, when present, lists open maintenance items (missing
status fields, recently-expired/expiring-soon docs); omitted when
the corpus is clean. Surface it to the operator and act on it only
with operator confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Natural-language search query. | |
| trigger | No | Consult trigger: explicit or prompt_hook. | explicit |
| workspace | Yes | Project or workspace key in the KB. | |
| agent_identity | Yes | Human-readable agent identity for audit events. | |
| source_session | Yes | Stable id of the agent session making the call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so description carries full burden. It details hard-filtering logic (in-force class, excluded docs) and pending_actions behavior. Exceeds minimal disclosure requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose, then trigger explanation, filtering details, and pending_actions note. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, output schema, and sibling tools, the description provides thorough context: when to call, filtering rules, and return behavior (governing rules and optional pending_actions). No gaps remaining.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The description adds context for the trigger parameter and overall purpose but doesn't significantly enhance per-parameter meaning beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a consultation and returns governing rules for the intent, with specific verb+resource. It distinguishes from sibling tools like kb_search or kb_get by emphasizing its role in pre-work consultation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call before code/architectural work and explains the two trigger types. While it doesn't explicitly list when not to use it, the context is clear. No mention of alternatives but the sibling list provides contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_gate_checkKB Gate CheckA
Return a verdict (allow | consult_required) for a pending code action.
Governed actions require a fresh consultation on record. Records each
check to the audit log (non-destructive; readOnlyHint=false is
intentional). Use this in a PreToolUse hook to verify a specific pending
action before execution; use kb_consult instead when proactively
reading governing rules at the start of a session rather than checking
individual actions.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | Name of the tool or command about to run. | |
| workspace | Yes | Project or workspace key in the KB. | |
| session_id | Yes | Agent session id checked against consult history. | |
| action_diff | No | Short description or diff summary of the pending action. | |
| action_path | No | Optional path or URL affected by the pending action. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, and the description adds useful context by explaining that the tool records each check to the audit log, is non-destructive, and that readOnlyHint=false is intentional. It does not contradict annotations and provides behavioral detail beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, followed by key behavioral context and explicit usage guidance. Every sentence earns its place and there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and detailed parameter schemas, the description covers the essential purpose, behavior, and usage context. It does not detail output semantics, but the schema handles that; the description is sufficiently complete for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description mentions 'pending code action' and 'specific pending action,' which loosely aligns with tool_name and action_diff, but it does not add significant parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return a verdict (allow | consult_required) for a pending code action.' This clearly states what the tool does and distinguishes it from siblings like kb_consult and kb_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use this in a PreToolUse hook to verify a specific pending action before execution; use kb_consult instead when proactively reading governing rules at the start of a session rather than checking individual actions.' This clearly states when to use this tool versus the key alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_getKB Get DocumentARead-onlyIdempotent
Retrieve a document by id (STD-U-001, ADR-002, T-NNN, etc.).
Returns the full content markdown plus metadata. Use this when you have a
specific id (from kb_search results or session memory); use kb_search
instead when you need to find a document by topic.
Always resolves regardless of expiry (ids never dangle): an expired
document is still returned, with its full validity object and a
computed freshness indicator (stale/expired/upcoming).
verbose: False (default) returns the full content_markdown body (kb_get
exists to read the doc) with a trimmed envelope: path,
git_remote_url, and last_modified_source are dropped and empty
status/type/applies_when/description/validity/freshness are omitted;
source_commit and last_modified provenance are kept, and
in_force: false is emitted when the computed in-force predicate says
the doc does NOT currently govern (deviation-only; an in-force doc
omits the key). verbose=True returns the full legacy envelope with
every field plus the computed in_force: bool (the single-sourced
status + validity-window + not-inbox predicate; never stored in
frontmatter).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Stable KB document id to retrieve. | |
| verbose | No | False returns the compact response; true includes all fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description deeply explains behavior: full content markdown plus metadata, handling of expired documents with validity and freshness, and the specific differences between verbose=false and verbose=true including which fields are dropped/kept and the computed in_force predicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise for the level of richness it provides. It is front-loaded with the core purpose, then usage, then detailed envelope behavior. Each sentence earns its place; nothing is redundant or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers all essential aspects: return content, metadata, edge cases like expired documents, and the computed in_force field. It is fully sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema has 100% coverage for both parameters, the description adds significant meaning, especially for the verbose flag. It details exactly what the compact response includes/omits and contrasts with the verbose envelope, providing far more insight than the schema's 'true includes all fields.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource: 'Retrieve a document by id' and provides concrete id examples. It clearly differentiates from sibling tools by explicitly stating 'use kb_search instead when you need to find a document by topic.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
This description gives explicit when-to-use guidance: 'Use this when you have a specific id (from kb_search results or session memory)' and the alternative 'use kb_search instead when you need to find a document by topic.' It also notes the always-resolves behavior for expired documents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_healthKB HealthARead-onlyIdempotent
Return service health: kb_commit, index_built_at, staleness, degraded flag, and write-side state (pending_count, push_queue_size, last_index_*).
verbose: False (default) returns a token-compact shape that keeps the core snapshot and OMITS diagnostic fields that are null/empty (e.g. last_index_error, remote_head_sha when unset). verbose=True returns every field including the nulls.
pending_actions, when present, lists open maintenance items (missing
status fields, recently-expired/expiring-soon docs) computed at the
last index build; it is omitted when the corpus is clean. Surface it
to the operator and act on it only with operator confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | False returns the compact response; true includes all fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. The description adds detail on response fields, conditional inclusion of pending_actions, and verbose behavior, providing full transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose stated upfront, followed by parameter details and special field notes. It is concise yet informative, though it could be slightly more terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter, rich annotations, and an output schema, the description covers return fields, parameter behavior, and conditional items completely for a health check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the verbose parameter. The description adds examples of omitted fields in compact mode, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return service health' and lists specific fields like kb_commit, index_built_at, etc. It distinguishes from sibling tools (e.g., kb_search, kb_audit) which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use verbose=true vs false and advises handling pending_actions only with operator confirmation. It does not explicitly compare to alternatives, but the use case is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_record_eventKB Record EventA
Append a durable, non-destructive audit entry for a client-reported enforcement event. Requires write capability (not a read-only tool).
event_type is gate_bypass (agent proceeded despite a gate block) or gate_degraded (kb_gate_check was unavailable; last-known state used). workspace, agent_identity, source_session are required; reason is optional but recommended for gate_bypass entries.
Use this when an enforce hook bypassed or degraded the gate and the fallback must be recorded. To check gate status use kb_gate_check; to consult use kb_consult; to read back events use kb_audit or kb_compliance.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Short reason for the proposed change. | |
| workspace | Yes | Project or workspace key in the KB. | |
| event_type | Yes | Client-reported event type: gate_bypass or gate_degraded. | |
| agent_identity | Yes | Human-readable agent identity for audit events. | |
| source_session | Yes | Stable id of the agent session making the call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description clarifies the operation is non-destructive and durable, explains the meaning of event_type values, and notes required vs optional parameters. It also recommends 'reason' for bypass entries. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it front-loads the purpose, then details parameters and usage, and ends with sibling alternatives. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values. It covers purpose, parameter semantics, when to use, and alternatives, providing complete context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all parameters at 100%, but the description adds significant meaning by explaining event_type options (gate_bypass vs. gate_degraded) and the recommendation for 'reason' in bypass scenarios, going beyond simple schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Append') and resource ('durable, non-destructive audit entry') for client-reported enforcement events. It also distinguishes from siblings by explicitly referencing kb_gate_check, kb_consult, kb_audit, and kb_compliance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Use this when an enforce hook bypassed or degraded the gate') and provides clear alternatives for gate status, consultation, and reading back events, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_searchKB SearchARead-onlyIdempotent
Full-text search across the KB.
Optional tier/category/status/type filters (status e.g. 'active', doc_type e.g. 'decision'). Returns ranked hits with snippets.
in_force: when true, HARD-filter to the in-force status class
(active/accepted/approved) AND the validity window (not expired, not
upcoming) before ranking, EXCLUDING superseded/deprecated/expired/
upcoming docs rather than only soft-downranking them. Composes with an
explicit status (both must hold). Use this when you want only guidance
that currently applies.
A doc past its valid_until date is EXCLUDED from every default search
result (not just in_force=True): an expired doc has no named successor
to outrank it, so left visible it could be the top hit and would govern.
Set include_expired=true to see it anyway; it then carries
freshness: "expired". A doc with a future valid_from ("upcoming")
stays visible in default search, flagged freshness: "upcoming"; only
in_force=true excludes it. validity_state is an audit-query facet:
one of "expired", "stale", or "expiring_within:N" (N days) to list
docs by validity condition; filtering for "expired" implies including
them regardless of include_expired.
abstain: when true, apply the signal gate. If the query matches no
discriminating column (title/tags/applies_when) it is treated as
out-of-scope and the search returns NO hits with abstained: true and an
abstain_reason, instead of surfacing a weak keyword match. A query with
a real signal retrieves normally. Distinguish abstained: true (no
governing rule) from an ordinary empty result (abstained: false).
verbose: False (default) returns a token-compact shape. Each hit is
{id, title, snippet} plus status only when a hit is NOT in-force
(superseded/deprecated), type when set, and freshness only when a
hit deviates (stale/expired/upcoming); the query echo, per-hit
path, and score are dropped (fetch a hit's full metadata with
kb_get(id); array order conveys rank). A compact hit additionally
carries in_force: false when the computed in-force predicate (the
single-sourced status + validity-window + not-inbox rule; never
stored in frontmatter) says the doc does NOT currently govern --
emitted deviation-only, so an in-force hit's compact shape is
unchanged. verbose=True restores the full legacy shape with query,
path, score, status, type, freshness, and the computed
in_force: bool on every hit, so a hit retrieved WITHOUT
in_force=true can still be checked for whether it may govern now.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Optional tier filter such as T1, T2, T3, or T4. | |
| limit | No | Maximum number of results, clamped to 1..100. | |
| query | Yes | Natural-language search query. | |
| status | No | Optional frontmatter status filter. | |
| abstain | No | True returns an explicit abstention when the query has no KB signal. | |
| verbose | No | False returns the compact response; true includes all fields. | |
| category | No | Optional category filter within a tier. | |
| doc_type | No | Optional document type filter. | |
| in_force | No | True returns only currently governing documents. | |
| validity_state | No | Optional validity facet: expired, stale, or expiring_within:N. | |
| include_expired | No | True allows expired documents in search results. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations (readOnlyHint, idempotentHint) to explain complex behaviors: hard-filtering vs downranking for in_force, default exclusion of expired docs, abstention logic, and compact vs verbose response shapes. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with a clear purpose and then explaining each parameter. Though lengthy, each sentence adds necessary detail for a complex tool with 11 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, output schema exists), the description covers all parameter semantics, interactions, and return variations, leaving no gaps for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3, but the description adds significant value by explaining parameter interactions (e.g., in_force composing with status), the effect of include_expired on validity_state, and detailed output shape changes with verbose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full-text search across the KB' and distinguishes the tool from siblings like kb_get and kb_list by detailing unique filtering capabilities and behavioral nuances such as in_force, abstain, and verbose modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive guidance is provided for each parameter (e.g., when to use in_force vs include_expired, abstain behavior), but there is no explicit mention of when to use this tool versus alternatives like kb_audit or kb_list for non-full-text queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_session_recapKB Session RecapARead-onlyIdempotent
Read-only per-session write summary (issue #112 feedback loop):
N committed, M demoted-to-pending, K rejected for source_session.
Call this (or kb pending) whenever a write response indicated a
demotion, to confirm the current tally before informing the
operator.
| Name | Required | Description | Default |
|---|---|---|---|
| source_session | Yes | Stable id of the agent session making the call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds the format of the summary (N committed, M demoted-to-pending, K rejected) and references the feedback loop context, which adds useful behavioral insight beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, clear and front-loaded with the summary. The issue reference (#112) adds minor noise but doesn't harm clarity. Could be slightly more concise, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With high schema coverage, annotations, and an output schema (present), the description provides sufficient context for a simple parameter tool. It explains the purpose and usage scenario adequately without needing to detail returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers the one parameter (source_session) fully. Description doesn't add extra semantics but restates it implicitly by context. Baseline 3 is appropriate as schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Read-only per-session write summary' and lists the counted categories (committed, demoted-to-pending, rejected). It distinguishes from sibling `kb_pending` and implies a specific scope per session, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: 'whenever a write response indicated a demotion, to confirm the current tally before informing the operator.' Also names an alternative (`kb pending`) and provides a specific context (issue #112 feedback loop).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_searchA
Search for tools using natural language.
Returns matching tool definitions ranked by relevance, in the same format as list_tools.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query to search for tools |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It states the tool searches and returns ranked tool definitions, conveying a read-only operation. It adds useful context about ranking and output format. It does not explicitly mention side effects or limitations, but for a search tool, the implied read-only nature is clear enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and every word earns its place. It is concise, direct, and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter search tool with an output schema, the description is complete. It explains the purpose, the query mechanism, and the output format, which is sufficient for the agent to select and invoke it correctly. No critical gaps exist given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter 'query' is well-documented in the schema as 'Natural language query to search for tools'. The description merely restates this ('natural language') without adding extra parameters, constraints, or examples. It does not enhance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: 'Search for tools using natural language.' It also specifies the output: 'Returns matching tool definitions ranked by relevance, in the same format as list_tools.' This distinguishes it from sibling tools like kb_search (knowledge base) and call_tool (execution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool searches for tools, which implies usage when the agent needs to find a tool definition. However, it does not explicitly state when not to use it or name alternative tools, such as kb_search for knowledge base queries. The reference to list_tools gives some contextual hint, but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
13 tool updates
v0.7.1- Added
call_tool - Removed
kb_audit - Removed
kb_bootstrap_project - Removed
kb_cleanup_plan - Removed
kb_compliance - Removed
kb_list - Removed
kb_list_pending - Removed
kb_onboarding_status - Removed
kb_outline - Removed
kb_propose_edit - Removed
kb_propose_memory - Removed
kb_resolve_pending - Added
tool_search
18 tool updates
v0.5.0- First observed
kb_audit - First observed
kb_bootstrap_project - First observed
kb_cleanup_plan - First observed
kb_compliance - First observed
kb_consult - First observed
kb_gate_check - First observed
kb_get - First observed
kb_health - First observed
kb_list - First observed
kb_list_pending - First observed
kb_onboarding_status - First observed
kb_outline - First observed
kb_propose_edit - First observed
kb_propose_memory - First observed
kb_record_event - First observed
kb_resolve_pending - First observed
kb_search - First observed
kb_session_recap
TDQS
Each tool has a clearly distinct purpose: search, health check, get by ID, session recap, consultation recording, gate checking, audit event writing, and tool meta-operations. No two tools overlap in functionality; the detailed descriptions reinforce the boundaries.
All tools follow a consistent lowercase snake_case pattern with a category prefix: kb_* for knowledge-base operations and tool_*/call_* for tool meta-operations. The verb-noun structure (search, get, consult, check, record) is uniform and predictable.
Nine tools is within the optimal range for a knowledge-base server with governance features. Each tool serves a specific role without redundancy, and the count feels appropriate for the server's scope.
The core workflow—search, retrieve, consult, gate-check, and record events—is covered, but the description of kb_record_event explicitly references kb_audit and kb_compliance as read-back tools that are not present in the server. This leaves a notable gap for agents needing to review audit history.
Maintenance
Related MCP Connectors
OAuth-protected, read-only-by-default MCP server for provenance-labeled QuillCaddie project memory.
Read-only MCP server for the OrchestKit docs: full-text search + Markdown fetch. No auth.
Publish and share access-controlled Markdown documents from any MCP-enabled AI tool.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn improved implementation of persistent memory using a local knowledge graph with a customizable --memory-path. This lets Claude remember information about the user across chats.10407887MIT
- FlicenseAqualityCmaintenanceAutomatically organizes and merges learned CS knowledge into a graph structure using Claude for entity/relation extraction and SQLite for storage, with tools for ingestion, querying, merging, and managing nodes and edges.6-
- AlicenseNot gradedqualityBmaintenanceA local OKF-compatible knowledge engine for AI agents. Enables capturing agent conversations, hybrid semantic+keyword search, MCP serving to agents, interactive graph visualization, and OKF bundle export.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceServes markdown knowledge from a git repository over MCP, providing tools to list, search, and retrieve documents.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/knaisoma/data-olympus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server