Skip to main content
Glama

Kin is an open-source code repository and version control system for people and AI agents. It keeps track of how the code fits together, so you can investigate what a change might affect.

Functions, types, recorded relationships, and change history are repository data that you commit, branch, and merge. The graph is the repository model, not a separate index alongside Git. Exact source is preserved byte for byte, and filesystem projections let supported tools keep working with ordinary files.

A star helps other people find Kin, and Discussions is where to bring a question about it.

Public alpha. Start with a small repository you know well. Expect rough edges and breaking changes.

Quickstart · Documentation · Browser demo

See what connects

Before changing a shared function, what else should you inspect? Kin lets you look up its recorded callers and explore related code. The CLI and MCP server query the same graph, so you and your agent can work from the same record.

Recorded on a prepared ripgrep graph at e89fff89ac9af12e8d4ce9d5fd07beb408ca730f. Raw run artifacts are not public. This illustrates a workflow, not a performance benchmark.

Related MCP server: GraphHub

Use it from Claude Code, Codex or Cursor

For Claude Code:

/plugin marketplace add firelock-ai/kin
/plugin install kin@kin

For Codex, add the marketplace and install the plugin, or let kin setup --intent agent write the MCP server into ~/.codex/config.toml for you.

For Cursor, add the MCP server by hand; see plugins/kin-cursor for the exact snippet.

After installing, run kin init . in a small repository you know well; the kin-setup skill walks you through the rest.

Kin is not published on crates.io. The kin crate there is an unrelated project.

Quickstart

Use a disposable copy of a small Git repository. Import includes its full reachable history and can take substantial time and memory. Shallow clones, submodules, and Git LFS are not supported.

1. Install

On macOS or Linux, run the installer and finish its setup prompts:

curl -fsSL https://get.kinlab.dev/install | sh

After it finishes, reload your shell as a separate command:

exec "$SHELL" -l

For Windows, alternative installers, or troubleshooting, see the full quickstart.

2. Initialize the repository

At the new prompt, replace the path below:

cd /path/to/your/repository &&
kin init . &&
kin overview &&
kin status

kin overview shows the entities Kin imported. kin status shows what was admitted and the working tree's state against it. kin graph status reports the daemon's live query graph and coverage. Uncommitted and untracked changes are not part of the imported Git history; kin init reports what it left out.

3. Ask a question you can check

Look for something you already know is in the code:

kin locate "<something you already know is in this repository>"

Replace ExactEntityName below with a symbol from the result:

kin refs ExactEntityName
kin trace ExactEntityName
kin impact ExactEntityName

refs returns recorded references, trace brings in nearby context, and impact explores potential effects through the graph. Check the results against the source.

4. Connect your agent

Prepare local embeddings, then configure detected MCP clients:

kin embed &&
kin setup --intent agent &&
kin setup status --json

Kin supports Claude Code, Codex, Cursor, Gemini, and other MCP clients. Use kin setup --intent editor for VS Code. Kin also includes kin agent run for local or hosted OpenAI-compatible model endpoints.

Client configuration · MCP tools · Built-in agent

Local imports, storage, and queries run on your machine. Installation and the initial embedding-model download need network access. Before embeddings are ready, kin locate uses lexical and graph signals and reports the missing vector coverage.

Review a change

After running kin init on the Git branch you want to review, compare explicit commit SHAs against main:

kin review shadow "$(git rev-parse main)..$(git rev-parse HEAD)"

The report returns PASS, NEEDS ATTENTION, or WOULD BLOCK, with graph-derived impact and supporting evidence. It is advisory: it does not block a merge or change graph state. Authorship is declared, not independently verified.

Use Kin with or without Git

Kin has its own commits, branches, merges, diffs, and history, including in repositories with no Git underneath. Existing Git repositories can be imported, and supported workflows can export a new Git repository.

Native version-control walkthrough · Git interoperability and export limits

Alpha limits

Coverage is incomplete. Supported languages are parsed into entities and relationships; other files remain available as content and history. An empty result does not prove there are no callers or dependencies. Keep using your compiler, tests, and review. See language support.

Compatibility varies. Filesystem projection has separate platform and tool restrictions. Check platform notes before relying on it.

Preserve Kin-only state. Deleting .kin and re-importing from Git does not recover commits, reviews, or other state that existed only in Kin. Read the import, recovery, and upgrade notes.

Windows. Native Windows x86_64 support is early. Repository admission works: kin init imports a Git repository and publishes graph authority, and graph, lexical, and daemon-backed queries answer natively. Transparent filesystem projection is not shipped on Windows, and the end-to-end install proof does not yet cover MCP or review workflows there, so WSL2 remains the recommended path for the full Kin experience.

Why I built Kin

I kept watching coding agents piece together parts of a codebase we'd already worked through. Then I'd do a version of that work myself to review their changes. I started wondering why more of that structural understanding wasn't part of the repository itself.

That's what I'm building with Kin.

Troy

Learn more and contribute

CLI reference · Architecture and detailed limits · Contributing · Issues · Security

Kin and its local stack, including kin-db, are Apache-2.0. KinLab is the separate proprietary hosted product. Public repository onboarding is still in development.

Available Tools

22 tools
find_referencesA
Read-onlyIdempotent

Find who depends on one entity: direct callers, importers and references, one row each with id, name, kind, file and the lines it references from. Call it for one hop. For a whole chain, use trace_data_flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoExact symbol name to resolve. Optional if entity_id is provided.
entity_idNoExact entity UUID. Optional if query is provided.
max_charsNoSerialized characters this response may occupy; what was cut is named in `elisions`.
relation_kindsNoFilter to calls, imports or references. Defaults to all three.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the response is one row per dependent with id, name, kind, file and referenced lines, and it is deliberately one-hop rather than transitive. It does not discuss ordering, pagination, or the case of zero dependents, which keeps it below 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?

Two sentences plus a routing clause, all front-loaded: the capability comes first, the scope constraint and alternative follow. No filler sentences and each clause carries information the agent needs.

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?

There is no output schema, so the description carries the return-shape burden and does so by naming the per-row fields. Combined with the one-hop scope statement and the sibling routing, an agent has everything needed to call this correctly against a deep sibling list.

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 (query, entity_id, max_chars, relation_kinds) are already documented in structured form. The description's mention of callers/importers/references loosely maps to relation_kinds but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific verb and resource (find who depends on one entity) and enumerates the exact scope: direct callers, importers, references, one row per dependent. It also distinguishes itself from trace_data_flow by declaring one-hop semantics, so an agent can tell it apart from siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicitly states the selection condition ('Call it for one hop') and names the alternative ('For a whole chain, use trace_data_flow'), giving an unambiguous when-to-use vs when-to-use-something-else rule.

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

get_context_packA
Read-onlyIdempotent

Assemble a token-bounded bundle from one entity, several entities, or a plain-language question: focal bodies plus dependency signatures and connecting routes. Call it instead of several get_entity_source and traversal reads.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoDependency traversal depth
entitiesNoSeveral focal entity names or UUIDs when the question is about how they connect.
questionNoA plain-language question resolved to one or more focal entities before packing.
entity_idNoFocal entity UUID
max_charsNoSerialized characters this response may occupy; what was cut is named in `elisions`.
token_budgetNoToken budget (8000, 16000, or 32000)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds substantive behavior beyond that: the output is a token-bounded bundle containing focal bodies, dependency signatures, and connecting routes, which tells the agent this is a lossy, budget-constrained aggregation rather than an exhaustive dump.

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

Conciseness5/5

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

Two sentences, zero filler, and the primary capability is front-loaded ahead of the routing advice. Every clause carries information about what is produced or when to call it.

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 usefully covers return composition and truncation behavior ('token-bounded'), and it explains the alternative it supersedes. Minor gaps remain around how the budget interacts with the two overlapping budget parameters, though that detail lives in the schema.

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%, including the anyOf branching requirement and per-field docs for depth, entities, question, entity_id, max_chars, and token_budget. The description restates the three input modes in prose but adds no format, default, or constraint detail beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Assemble') and a specific artifact ('token-bounded bundle'), and enumerates the three input modes (one entity, several entities, a plain-language question). It also names the sibling it replaces (get_entity_source plus traversal reads), so an agent can route without opening the schema.

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?

Explicitly says 'Call it instead of several get_entity_source and traversal reads', giving both a trigger (multiple related reads) and named alternatives. It lacks an explicit exclusion (e.g. when a single direct read is preferable), so it stops short of the full when/when-not bar.

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

get_entity_sourceA
Read-onlyIdempotent

Return one entity's exact graph-owned body by id. Call it when you hold an id and need the real source text, not a snippet.

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_idYesEntity UUID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuine value beyond that by clarifying the return payload is the full owned body rather than a truncated snippet. It omits behavior for a missing/invalid id and any size or rate limits.

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

Conciseness5/5

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

Two short sentences, both earning their place: the first states the action and return scope, the second states the usage condition and contrast. Nothing is padded or redundant.

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 carries the burden of describing the return value and does so ('exact graph-owned body', 'real source text'). One parameter plus full annotation coverage keeps this nearly complete; only error behavior for absent entities is unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% with a single entity_id parameter, so the schema already documents the input. The description's 'by id' adds no syntax, format, or lookup semantics beyond the schema's 'Entity UUID.' Baseline 3 applies.

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

Purpose5/5

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

Specific verb (return) plus a precisely scoped resource: one entity's exact graph-owned body addressed by id. It also implicitly distinguishes itself from the snippet-returning search siblings (semantic_search, semantic_locate) by emphasizing 'exact' and 'real source text, not a snippet.'

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?

Gives a clear triggering condition — 'when you hold an id' — and a contrast case ('need the real source text, not a snippet'), which routes the agent away from search tools. It stops short of naming a specific sibling alternative or stating when not to use it.

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

graph_neighborhoodA
Read-onlyIdempotent

Get what one entity depends on and what depends on it, to a depth you choose, as summaries with ids. Call it to orient in unfamiliar code. Use find_references for callers only, trace_data_flow for an ordered path.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoTraversal depth
limitNoMax entities to return (default 30)
directionNo`out` for what the focal depends on, `in` for what depends on it, `both` merges.both
entity_idYesEntity UUID
max_charsNoSerialized characters this response may occupy; what was cut is named in `elisions`.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description usefully spends its words on the return shape: "summaries with ids" with a chosen depth. This adds real value since there is no output schema. It stops short of describing truncation behavior, but the schema's max_chars/elisions entry covers that.

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?

Three tight sentences with the core purpose front-loaded and routing to siblings at the end. Every clause earns its place; nothing is redundant.

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 orientation tool with full schema coverage and annotations covering safety, the description supplies the purpose, return character, and sibling disambiguation. Nothing critical is missing, though it leaves pagination/truncation handling entirely to schema fields rather than noting it.

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 depth, limit, direction, entity_id, and max_chars are already documented. The description reinforces depth ("to a depth you choose") and the summarized output but adds no syntax or format beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (get) and resource (an entity's dependencies and dependents), with scope modifiers: traversal depth and summarized-with-ids output. It explicitly distinguishes itself from find_references and trace_data_flow, so an agent can select it without opening the schema.

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

Usage Guidelines5/5

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

"Call it to orient in unfamiliar code" gives the when, and the next sentence names two alternatives with the conditions that select them (callers only vs. an ordered path). Both usage and exclusion are explicit.

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

impact_analysisA
Read-onlyIdempotent

Walk the graph from a change to every entity it could affect. Target it one way at a time: entity_ids, file paths, base and head change ids, or change_ids. Call it before editing, across the whole repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoBase semantic change ID (hex)
headNoHead semantic change ID (hex)
filesNoDeprecated, answered through 0.7.16; use entity_ids. File paths resolved to entities.
max_charsNoSerialized characters this response may occupy; what was cut is named in `elisions`.
change_idsNoChange ID hexes to combine and analyze impact
entity_idsNoEntity UUIDs to analyze impact for

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=false, so the safety profile is covered. The description adds a scope statement ('across the whole repository') and the transitive nature of the walk, but says nothing about result size handling, the elisions mechanism, or performance characteristics. With annotations doing the heavy lifting, this is adequate but thin.

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

Conciseness5/5

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

Two tightly packed sentences with the purpose front-loaded and the operational instructions following. No filler and no 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 6-parameter, all-optional read tool with no output schema, the description covers purpose, trigger timing, scope, and targeting-mode exclusivity, which is most of what an agent needs. It leaves the max_chars/elisions contract and the deprecation of the files parameter to the schema, which is acceptable.

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 baseline is 3. The description adds one genuinely useful constraint not in the schema — that targeting modes are mutually exclusive ('one way at a time') — but it omits max_chars and lists 'file paths' as a live targeting mode even though the schema marks files as deprecated in favor of entity_ids.

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 concrete verb and resource — 'walk the graph from a change to every entity it could affect' — which conveys transitive impact traversal rather than a single-hop lookup. It does not explicitly name or contrast with siblings like find_references or graph_neighborhood, so the agent must infer the distinction from the tool name alone.

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?

'Call it before editing, across the whole repository' gives a clear situational trigger and scope. 'Target it one way at a time' adds a usage constraint on combining targeting modes, but no alternative tool or when-not-to-use condition is named.

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

kin_artifact_listA
Read-onlyIdempotent

List the repository's tracked files at one semantic change, code and non-code alike: Dockerfiles, lockfiles, configuration, assets, symlinks. Call it for what the repository contains, not what the parsers turned into entities.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
source_change_idNoExact semantic change ID. Defaults to the current branch head.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine scope context (Dockerfiles, lockfiles, config, assets, symlinks are included) but says nothing about pagination behavior, default limits, or what happens with a large repo.

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

Conciseness5/5

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

Two tight sentences, zero filler, with the core scope (tracked files at one change) front-loaded and the disambiguation clause second.

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 listing tool with full annotation coverage and no output schema, the description tells the agent what is returned (all tracked files, code and non-code) and when to use it. Only pagination semantics and the default 'current branch head' behavior for omitted source_change_id go unaddressed.

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 only 33% – source_change_id is documented, but limit and offset are not. The description's 'at one semantic change' hints at source_change_id but adds no detail on the limit/offset paging parameters, so the gap is only partially compensated.

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?

States a specific verb (List) and resource (repository's tracked files) scoped to one semantic change, and explicitly distinguishes itself from the parser-based sibling by saying 'not what the parsers turned into entities.' An agent can separate this from list_file_entities without opening either schema.

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?

Provides a clear usage rule – call it 'for what the repository contains' rather than entity output – which implicitly routes the agent away from list_file_entities. There is no explicit when-not condition or named alternative, but the context is unambiguous for this repo-listing tool.

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

kin_artifact_readA
Read-onlyIdempotent

Read one tracked file's exact content by artifact_id or repo-relative path: text when valid UTF-8, else base64. Call it for a file the parsers made no entities for, which a locate hit's artifact_path means.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRepo-relative path as in path_label (a leading / is fine), or {bytes_hex} for non-UTF-8
artifact_idNo
include_bytesNoAlso return content_base64 for a UTF-8 body. Non-UTF-8 bytes always come as base64.
source_change_idNoExact semantic change ID. Defaults to the current branch head.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds a genuine behavioral fact beyond that: content is returned as text when valid UTF-8, else base64. Auth/rate-limit behavior is still unspecified, but the return-encoding trait is real added 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?

Two dense sentences with zero filler; the core purpose and the return-format caveat are front-loaded ahead of the usage hint. Every clause carries information.

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

Completeness4/5

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

No output schema, so the description usefully explains the return form (text vs base64) and the identification modes. With read-only annotations and 75% schema coverage, this is largely sufficient, though it could clarify what happens when neither identifier resolves.

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 75% and the schema already documents path, include_bytes, and source_change_id. The description restates the artifact_id-or-path alternative identity, which mirrors the anyOf constraint rather than extending it; no extra syntax or defaulting detail for include_bytes is added.

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?

States a specific verb (Read) and resource (one tracked file's exact content) and specifies the two identification modes. It further distinguishes itself from entity-source siblings by scoping to 'a file the parsers made no entities for', so an agent can tell it apart from get_entity_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?

Gives explicit when-to-use criteria: 'Call it for a file the parsers made no entities for, which a locate hit's artifact_path means.' This ties invocation to the output of semantic_locate. It does not name the complementary tool (get_entity_source) for the opposite case, so no full when-not routing.

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

kin_graph_statusA
Read-onlyIdempotent

The graph this call is answered from: entity and relation counts, and how many are embedded, pending or unindexed. Call it when a search returns less than you expect. sampling=last_settled_selected_graph means the last settled reading, aged in stale.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description goes beyond them by disclosing the semantics of the `sampling=last_settled_selected_graph` value and that a reading can be aged and reported as `stale` — genuine behavioral context about freshness that the annotations cannot express.

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?

Three compact sentences: what it returns, when to call it, and how to read the sampling value. Front-loaded with the payload, no filler. The final sentence is jargon-dense and could be parsed only by a reader already familiar with the vocabulary, costing it a point.

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 carries the burden of describing return content, and it does name the count categories and the sampling/stale semantics. It does not explain how to act on an 'unindexed' backlog or what thresholds matter, leaving a modest gap for a diagnostic 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 tool takes zero parameters, so there is no parameter surface to document; baseline 4 applies. The description instead spends its words on interpreting the returned sampling field, which is the only semantically load-bearing token in the call.

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 the resource (the resolved graph) and the concrete payload: entity and relation counts plus embedded/pending/unindexed breakdown. That distinguishes it from search- and mutation-oriented siblings, though the opening phrase 'The graph this call is answered from' is slightly indirect about the fact that this is a status/diagnostic read.

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?

It gives an explicit trigger: 'Call it when a search returns less than you expect.' That is a clear context for reaching for this tool rather than semantic_search or the trace tools. It stops short of naming an alternative diagnostic to compare against, so it is a 4 rather than a 5.

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

kin_mutateA
DestructiveIdempotent

Atomically validate and commit a batch of graph mutations in a single call. Automatically manages transaction begin, validation, and commit. Provide an operations array with mutation verb and payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOptional target scope or workspace identifier (defaults to 'repository')
summaryNoOptional change message: one sentence in your own words saying what this change does, which becomes the subject a human reads in history. Omit it and the change records only the transaction id, which names the call and not the work.
operationsYesArray of mutation operations to validate and commit atomically
request_idNoOptional client request id, carried into the receipt so you can match the answer to your call; nothing deduplicates on it
session_idNoOptional owning session UUID

TDQS

A3.9/5.0
Behavior4/5

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

With annotations already declaring destructiveHint=true and idempotentHint=true, the description still adds value beyond them: atomicity and all-or-nothing validation before commit, and the fact that transaction begin/commit are managed internally. It does not describe the receipt/return payload or failure rollback semantics, 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.

Conciseness4/5

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

Three sentences, front-loaded with the core verb and resource, no filler. The third sentence ('Provide an operations array with mutation verb and payload') largely restates the required parameter already fully specified in the schema, which costs a point.

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 destructive batch mutation tool with annotations covering the safety profile and a fully documented schema, the description supplies the missing piece - atomic lifecycle management. It omits what happens on partial validation failure and what the receipt contains, but annotations and schema carry most of the remaining burden.

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

Parameters3/5

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

Schema description coverage is 100% and the nested operation variants are documented exhaustively in the schema itself. The description only gestures at 'an operations array with mutation verb and payload', which the schema states in far more detail, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('validate and commit a batch of graph mutations') plus the scope ('in a single call', 'atomically'). The sentence 'Automatically manages transaction begin, validation, and commit' distinguishes it from the sibling tools kin_transaction_begin/stage/commit, so an agent can tell it apart without opening either schema.

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?

Usage is implied: when you have a batch of mutations, pass an operations array and the tool handles the transaction lifecycle. But it never explicitly says when to prefer this over the manual kin_transaction_begin/stage/commit trio, nor does it state any prerequisite or exclusion. The alternative is only hinted at, not named.

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

kin_provenance_queryA
Read-onlyIdempotent

Answer who changed an entity and whether it was approved: change count, latest change, approvals on it, a page of changes newest first, and recent audit events. Call it before relying on code whose history matters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax changes per page. Default 20.
entity_idYesEntity UUID to query provenance for

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds behavioral substance beyond that by disclosing the actual payload — change count, latest change, approvals, a newest-first page of changes, and recent audit events — which is meaningful since no output schema exists.

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?

Two sentences, front-loaded with the core answer and then the usage cue. Slightly dense in the enumeration but no filler or repetition.

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

Completeness4/5

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

With no output schema, the description compensates by listing the returned fields, and annotations carry the safety profile, so an agent has enough to invoke it correctly. Only minor gaps remain: no note on what happens with invalid/unknown entity_id or how approval status is represented.

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 coverage is 100% and both parameters are documented in the schema (entity_id UUID, limit default/max/min). The description alludes to paging ('a page of changes newest first') but adds no syntax, format, or default information beyond what the schema already provides, so baseline 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?

States a specific verb and resource — answering who changed an entity and whether it was approved — and enumerates the data returned. It is clearly a read-only provenance query rather than a mutation or graph traversal, though it does not explicitly name the siblings it supersedes (e.g., kin_artifact_read, impact_analysis).

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?

Provides one directive: 'Call it before relying on code whose history matters.' That gives a use context, but there are no exclusions, no prerequisites stated, and no named alternative for cases where history doesn't matter. Usage is implied rather than fully specified.

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

kin_session_endA
Idempotent

Close this session and release what it holds. Call it when your work is done.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession UUID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds 'release what it holds,' which hints at session-state teardown, but says nothing about what specifically gets released, whether in-flight transactions are affected, or error behavior.

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?

Two short sentences with the action front-loaded and the trigger condition second; zero filler. Slightly terse for the amount of behavioral surface a session-teardown tool has, but nothing is wasted.

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 single-parameter tool with rich annotations and no output schema, the description covers what it does and when to call it. Minor gap: no note on interaction with sibling session/transaction tools, which the adjacent siblings would suggest is relevant.

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?

There is a single required parameter (session_id) with 100% schema description coverage, so the schema fully documents it. The description adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

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?

States a specific verb+resource ('Close this session') and adds what the action does ('release what it holds'), which is clear enough to distinguish from siblings like kin_session_start or kin_session_heartbeat. It does not explicitly name any sibling, so the differentiation is implicit rather than stated.

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?

'Call it when your work is done' gives a genuine trigger condition, so usage is more than merely implied. However there is no when-not guidance and no mention of alternatives (e.g. heartbeats, transaction commit/abort ordering), leaving cross-tool routing to inference.

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

kin_session_heartbeatA

Keep this session alive. Call it periodically during long work so the session does not lapse at its idle TTL.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession UUID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare it is not read-only, not idempotent and not destructive, so the safety burden is light. The description adds meaningful behavioral context beyond the annotations: the tool's effect is TTL refresh and the consequence of omission (session lapses), which the structured fields do not convey. It does not specify a recommended interval, which is a minor gap.

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

Conciseness5/5

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

Two short sentences, no filler, and the imperative action is front-loaded ahead of the rationale. Every sentence earns its place.

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

Completeness4/5

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

For a single-parameter keep-alive tool with no output schema and annotations covering the safety profile, the description supplies enough to call it correctly. A recommended cadence would make it 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% for the single session_id parameter, so the schema already documents the input. The description adds nothing about the parameter itself (e.g. which session's UUID, defaults), so the baseline 3 applies.

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

Purpose5/5

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

States a specific action ('Keep this session alive') on a specific resource (the session), and clarifies the mechanism (preventing lapse at the idle TTL). An agent can distinguish this from kin_session_start/kin_session_end without opening a schema.

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?

Gives clear invocation timing ('Call it periodically during long work') and the reason (idle TTL lapse). It doesn't explicitly state when not to call it or name a sibling alternative, but the when-to-use condition is unambiguous.

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

kin_session_startA

Register this agent with Kin and get a session_id: who you are, your transport, working directory and capabilities. Call it once at the start of your work, before any transaction, so activity is attributed.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdYesWorking directory of the agent
pidNoOS process ID of the agent (optional)
vendorYesVendor identifier (claude-code, codex, gemini-cli, etc.)
transportNoConnection type: mcp, cli, wrapper, or uimcp
client_nameYesHuman-readable client name
capabilitiesNoAgent capabilities

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the agent knows this is a non-idempotent mutation. The description adds useful context that the call should be made once at the start so activity is attributed, but does not disclose what happens if called twice, whether session_id expires, or any auth requirements.

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

Conciseness5/5

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

Two sentences, zero waste. The primary action ('Register this agent...') and return value ('get a session_id') are front-loaded, followed by essential timing guidance.

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 session-start tool with 100% schema coverage and an output value (session_id) mentioned in the description, the definition is nearly complete. It covers what the tool does, when to call it, and what it returns, though it omits lifecycle details such as how the session_id relates to kin_session_end or kin_transaction_begin.

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 six parameters are already documented in the schema. The description mentions 'who you are, your transport, working directory and capabilities,' which maps to some parameters but adds no syntax, format, or semantic detail beyond what the schema provides. Baseline 3 is appropriate 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 states a specific verb and resource: 'Register this agent with Kin and get a session_id.' It explicitly lists what is being registered (who you are, transport, working directory, capabilities) and the timing ('once at the start of your work, before any transaction'), which distinguishes it from sibling lifecycle tools like kin_session_heartbeat and kin_session_end.

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?

It gives clear when-to-use guidance: 'Call it once at the start of your work, before any transaction.' There is no explicit mention of alternatives or when-not conditions, but the timing and one-time nature of the call are unambiguous.

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

kin_transaction_abortA
DestructiveIdempotent

Abandon an open transaction and discard everything staged on it. Call it when you decide against a change, or to start clean after a refusal. Refused once kin_transaction_commit has fenced it.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOwning session UUID. In enforce mode it must match the authenticated caller.
transaction_idYesTransaction UUID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so safety is covered structurally. The description adds real value beyond them: it specifies WHAT is destroyed ('everything staged on it') and a state-dependent refusal after the commit fence, which the annotations do not 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?

Three tight sentences, front-loaded with the core action and effect, followed by usage and a failure boundary. Every clause earns its place with no 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?

No output schema exists, and the description covers action, side effect, and the key failure mode, which is sufficient for a two-parameter transactional tool. The 'fenced' phrasing is slightly terse and could be clearer about the resulting state, keeping it just below a 5.

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%, including the enforce-mode session match caveat, so the description carries no additional parameter burden. It adds nothing beyond the schema, making the baseline 3 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?

States a specific verb and resource ('Abandon an open transaction') plus the scope of effect ('discard everything staged on it'). This clearly distinguishes it from kin_transaction_commit and kin_transaction_stage without the agent needing to open any sibling schema.

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?

Gives two concrete trigger conditions: deciding against a change, and starting clean after a refusal, which implicitly routes the agent away from commit. It also states a boundary condition (refused once commit has fenced it). It does not explicitly name commit as the alternative, so it falls just short of a 5.

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

kin_transaction_beginA

Open a transaction to stage mutations onto. Returns a transaction_id; nothing lands until kin_transaction_commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeYesTarget scope (e.g. filename, module, etc.)
session_idYesSession UUID owning the transaction

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive behavior, so the description is freed to add the transactional semantics: a transaction_id is returned and mutations are buffered until commit. It does not cover what happens on abort, session expiry, or lock contention, keeping it 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?

Two compact sentences, front-loaded with the purpose and followed by the commit dependency. Every clause earns its place and nothing is padding.

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 usefully discloses the return value (transaction_id) and the buffering guarantee. It is nearly complete for a 2-param tool, though it omits transaction lifetime/cleanup behavior that an agent would need in edge cases.

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

Parameters3/5

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

Schema description coverage is 100%, with both session_id and scope documented in the schema itself. The description adds no format, default, or constraint detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Open a transaction') and clarifies its role as a staging layer for mutations, which distinguishes it from kin_transaction_stage and kin_transaction_commit. An agent can identify it without opening the schema.

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 sentence 'nothing lands until kin_transaction_commit' implicitly routes to the commit sibling, but there is no explicit when-to-use rule, no mention that kin_transaction_stage is the follow-up call, and no statement of prerequisites (e.g., an active session from kin_session_start). Usage is implied rather than stated.

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

kin_transaction_commitA
DestructiveIdempotent

Publish every staged mutation atomically: the daemon reparses the final bytes and journals the semantic change, the workspace tree and the ref together. All of it lands or none does. Re-sending a fenced commit is safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional change message: one sentence in your own words saying what this change does, which becomes the subject a human reads in history. Omit it and the change records only the transaction id, which names the call and not the work.
operationsNoOptional exact mutation operations to stage atomically in this commit request
session_idNoOptional owning session UUID mirror; when present in enforce mode it must match the authenticated caller and transaction owner
transaction_idYesTransaction UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description isn't carrying the safety load. It nonetheless adds real behavioral context beyond them: atomic all-or-nothing landing, the daemon reparse + journal step, and the 'fenced commit' retry-safety nuance.

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?

Three tight sentences with the core action front-loaded, followed by the atomicity guarantee and the retry note. No filler; each clause adds a distinct fact.

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 mutation tool with no output schema, the description covers atomicity, idempotent re-send, and journaling, and annotations cover the safety profile. It stops short of stating the prerequisite staging step or failure/rollback reporting, leaving a small gap.

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 documents all four parameters thoroughly. The description adds only the framing that staged mutations are what gets published; it offers no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource — 'Publish every staged mutation atomically' — and the term 'staged' implicitly anchors it to the stage/commit/abort transaction trio, letting an agent separate it from kin_transaction_stage and kin_transaction_begin without opening a schema.

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?

Usage is implied: you commit what has been staged, and 'Re-sending a fenced commit is safe' gives a retry rule. But it never explicitly says when to call this versus kin_transaction_abort, nor states the begin→stage→commit ordering, so the agent must infer the workflow.

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

kin_transaction_stageA

Stage mutations onto an open transaction. Four verbs: 'create' admits a file the graph has never seen, 'update' changes an entity, 'delete' retires one, 'rename' moves one. An 'update' replaces the whole body; read it first with get_entity_source.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesArray of mutation operations to stage
session_idNoOptional owning session UUID mirror; when present in enforce mode it must match the authenticated caller and transaction owner
transaction_idYesTransaction UUID

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is partly covered. The description adds genuinely useful behavior beyond that: an 'update' replaces the whole body rather than patching it. It omits the most consequential staging fact, that nothing lands until kin_transaction_commit and can be discarded by kin_transaction_abort. No contradiction 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.

Conciseness5/5

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

Three short sentences, front-loaded with the operation, then the verb glossary, then the one non-obvious rule plus the pointer to get_entity_source. No padding.

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 transaction-staging tool with no output schema and a large polymorphic operation union, the description covers the verb model but not the lifecycle (commit/abort, atomicity, ordering of operations) or the structured Entity/Relation shape. Adequate, but an agent still has to infer how staged work is applied.

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 baseline is 3. The description adds a conceptual verb taxonomy, but it says 'four verbs' while the schema accepts many aliases (replace/overwrite/move/add/upsert) across six operation shapes, including the structured Entity/Relation mutation, none of which the summary mentions. The framing is helpful but incomplete against the schema.

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

Purpose4/5

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

The first sentence gives a specific verb and resource: stage mutations onto an open transaction. The verb glossary ('create' admits a file, 'update' changes an entity, 'delete' retires one, 'rename' moves one) sharpens what the tool does. It does not explicitly differentiate itself from kin_mutate, which is the obvious sibling it could be confused with.

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 makes the prerequisite ('an open transaction') explicit and routes one case to a sibling: read with get_entity_source before an 'update'. It stops short of stating when to use this over kin_mutate, or what happens if no transaction is open.

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

list_file_entitiesA
Read-onlyIdempotent

List every entity the graph holds for one file, by repo-relative path. The only retrieval tool that says what it left out: it returns the whole set and reports whether it is complete. Call it before concluding a file holds nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRepo-relative file path, no leading slash and no "..". Optional when `cursor` names it.
cursorNoOpaque token from a prior result's `next_cursor`. Pass it back unedited.
page_sizeNoEntities per page (default 200, 1..1000). `total_in_file` is the whole-file count.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is covered. The description adds genuinely new behavioral context: it returns the entire set rather than a ranked subset, and it reports a completeness flag, which the agent cannot infer from the annotations alone.

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?

Three short sentences, front-loaded with the action and scope, then the differentiator, then the call trigger. Every clause earns its place 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.

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 carries the burden of describing what comes back, and it does so at the right level: the full entity set plus a completeness signal. Pagination fields are covered by the schema, so for a three-parameter read tool this is nearly complete; only the shape of an entity record is left unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents path, cursor, and page_size with defaults and bounds. The description only echoes the path semantics ('by repo-relative path') and the whole-set framing, adding little syntax or format detail beyond the structured fields — baseline 3 applies.

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

Purpose5/5

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

The description gives a specific verb and resource ('List every entity the graph holds for one file') and pins the scope to one file keyed by repo-relative path. It also carves out a distinctive property against the retrieval siblings ('the only retrieval tool that says what it left out'), so an agent can separate it from semantic_search, find_references, or graph_neighborhood without opening a schema.

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?

It gives one explicit and valuable trigger: 'Call it before concluding a file holds nothing,' which is exactly the failure mode that matters for an exhaustive-listing tool. What's missing is the other half of routing guidance — when to prefer a narrower retrieval sibling instead — but the stated condition is concrete rather than implied.

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

semantic_locateA
Read-onlyIdempotent

Find code by a plain-language question, ranked from the graph. Call it when you know what the code does but not its name. Returns id, name, kind, file, line, signature, score. Read ranked_by. Know the exact name? Use semantic_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax ranked rows per page: entities, or files at file granularity. Default 20.
queryNoNatural-language description of the code to find. Optional when paging with `cursor`.
cursorNoOpaque token from a prior result's `next_cursor`. Pass it back unedited.
max_charsNoSerialized characters this response may occupy; what was cut is named in `elisions`.
granularityNoRank entities ('entity', default) or roll up to files ('file')entity
include_testsNoRank test-role entities alongside source. Off unless your query is about tests.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds useful non-annotation context: the returned field set (id, name, kind, file, line, signature, score) and the hint to read `ranked_by`. It omits pagination/elision behavior, which the schema carries instead.

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?

Three tight sentences, front-loaded with the purpose and routing rule before the return fields. Slightly telegraphic in places ('Read `ranked_by`') but no wasted sentences.

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 compensates by enumerating the returned fields, and it covers usage and the sibling alternative. It is adequate for this tool, though it doesn't explain ranking semantics or paging beyond what the schema states.

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 is already documented with defaults, bounds, and enums. The description only implies the natural-language query and paging ('plain-language question', 'ranked_by'), adding no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Find code by a plain-language question') and adds the mechanism ('ranked from the graph'), which distinguishes it from lexical siblings. It explicitly contrasts itself with semantic_search by name, so an agent can route correctly without opening either schema.

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

Usage Guidelines5/5

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

Gives the selecting condition ('when you know what the code does but not its name') and names the alternative tool for the opposite case ('Know the exact name? Use semantic_search'). This is an explicit when/when-not/alternative triad.

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

trace_data_flowA
Read-onlyIdempotent

Walk the call chain out from ONE entity and get the whole path back, as ordered steps. Give a focal, a direction and a depth. It walks call and import edges, not values through variables. Naming TWO things? Use trace_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoMaximum traversal depth from the focal (default 3, capped at 8)
focalYesFocal entity UUID or exact entity name to start tracing from
targetNoA symbol to reach, by exact name or UUID. Its branch survives the per-step cap first.
compactNoAlias for include_body: false. Ignored when include_body is given explicitly.
directionNoWhich way to walk: `calls` for callees, `callers` for callers, `both` merges.both
max_charsNoAlias for max_response_chars, the spelling shared with the other retrieval tools.
include_bodyNoInline each step's source. False gives the chain's shape at a fraction of the size.
limit_per_stepNoEdges kept per hop. Raise it for a node `clipped_steps` reports as cut.
max_response_charsNoSerialized characters this response may occupy; the same parameter as `max_chars`.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is low. The description still adds real semantics not in annotations: it walks call/import edges rather than values through variables, and returns ordered steps rather than an unordered set. It does not describe pagination or clipping behavior beyond the schema's own hints.

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?

Four short sentences, front-loaded with the action and result, then scope exclusion, then the alternative-tool routing rule. Only minor filler ('Give a focal, a direction and a depth') repeats what the schema enforces.

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?

There is no output schema, but the description compensates by stating the return shape ('the whole path back, as ordered steps'). With 100% schema coverage and full annotations, the agent has enough to invoke correctly; only edge-case behavior (clipping, response truncation) is left to the schema.

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% across all 9 parameters, so the schema already carries the meaning of focal, direction, depth, target, and the char/limit aliases. The description only restates focal/direction/depth without adding format or interaction detail. 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?

Specific verb+resource: 'Walk the call chain out from ONE entity and get the whole path back, as ordered steps', with the traversal direction made explicit. It also differentiates itself from a named sibling ('Naming TWO things? Use trace_path'), so an agent can route between the two without opening a schema.

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?

It states the required inputs ('Give a focal, a direction and a depth'), names the alternative tool and the condition that selects it (two named entities -> trace_path), and excludes value-flow tracing. That is clear positive and negative guidance, though no other siblings (impact_analysis, graph_neighborhood) are addressed.

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

trace_pathA
Read-onlyIdempotent

Find how one entity reaches another, as ordered hops. Call it when your question names TWO things. from and to take a name, an id, or name@file. Read found and gap before concluding A never reaches B. One endpoint? Use trace_data_flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget end, in the same forms.
fromYesSource end: entity UUID, exact name, or name@file to pin one of two same-named entities.
limitNoRoutes returned, shortest first (default 3, ceiling 25). See `routes_total`.
to_fileNoDeprecated, answered through 0.7.16; pass the entity id in `to`. Pins `to` by file.
directionNo`forward`: from reaches to. `reverse`: the other way. `either` (default) tries both.either
from_fileNoPin `from` to the entity of that name in this file. Same as the name@file spelling.
max_charsNoSerialized characters this response may occupy; what was cut is named in `elisions`.
max_depthNoHops between the two ends (default 6, ceiling 12). Containment hops are not counted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavioral guidance — 'Read `found` and `gap` before concluding A never reaches B' — warning that a negative path result may be an artifact. It stops short of describing truncation semantics beyond naming `elisions`, but adds real value over 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?

Five short sentences, front-loaded with the purpose, then the trigger, the argument forms, the output caveat, and the routing alternative. Nothing is padded and the reader gets the essentials first.

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 complex 8-parameter graph traversal with no output schema, the description covers purpose, triggers, alternatives, and how to interpret the key response fields (`found`, `gap`). It names truncation signals (`elisions`) but does not itself explain the response shape, leaving a small gap for a tool with no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all eight parameters including the enum direction, file-pinning, depth and char limits. The description's restatement that `from`/`to` take 'a name, an id, or name@file' mirrors the schema rather than extending it, so this lands at the high-coverage baseline.

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?

States a specific verb and resource: 'Find how one entity reaches another, as ordered hops.' It also discriminates from the nearest sibling by naming trace_data_flow for the single-endpoint case, so an agent can choose between them without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('when your question names TWO things') and an explicit exclusion with the alternative to use instead ('One endpoint? Use trace_data_flow'). The when/when-not/alternative triad is fully present.

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. 22 tool updatesv0.7.16
    • First observedfind_references
    • First observedget_context_pack
    • First observedget_entity_source
    • First observedgraph_neighborhood
    • First observedimpact_analysis
    • First observedkin_artifact_list
    • First observedkin_artifact_read
    • First observedkin_graph_status
    • First observedkin_mutate
    • First observedkin_provenance_query
    • First observedkin_session_end
    • First observedkin_session_heartbeat
    • First observedkin_session_start
    • First observedkin_transaction_abort
    • First observedkin_transaction_begin
    • First observedkin_transaction_commit
    • First observedkin_transaction_stage
    • First observedlist_file_entities
    • First observedsemantic_locate
    • First observedsemantic_search
    • First observedtrace_data_flow
    • First observedtrace_path

TDQS

A3.8/5.0

Scored across 22 tools

Disambiguation4/5

The traversal tools (find_references, graph_neighborhood, trace_data_flow, trace_path) and the search pair (semantic_search vs semantic_locate) are explicitly cross-referenced and distinguished by their descriptions, which is excellent. However the mutation surface overlaps: kin_mutate ('atomically validate and commit a batch') appears to duplicate what kin_transaction_begin/stage/commit do, and no description reconciles the two paths, creating a misselection risk.

Naming Consistency3/5

All names use snake_case and mostly follow verb_noun (find_references, list_file_entities, trace_data_flow), which is readable. But the kin_ prefix is applied inconsistently—about half the tools carry it (kin_session_start, kin_transaction_begin, kin_mutate) and half do not (get_entity_source, impact_analysis, semantic_locate)—and a few are bare noun phrases (impact_analysis, graph_neighborhood), breaking the pattern.

Tool Count3/5

At 22 tools the surface is on the heavy side of the 16-25 range for a single code-graph server. Much of the count is justified by genuinely distinct concerns (search, retrieval, tracing, sessions, transactions, artifacts), but the coexistence of both kin_mutate and the four-tool transaction family suggests a redundant mutation pathway that inflates the count.

Completeness4/5

Coverage is broad and lifecycle-complete: search, retrieval, traversal, impact analysis, provenance, atomic mutations with create/update/delete/rename, plus session and graph-status introspection leave few obvious dead ends. Minor gaps remain around review/approval workflows and multi-endpoint tracing beyond single-source walks, but core workflows are covered.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Knot is a semantic and structural codebase indexer designed for AI coding agents and developers navigating large projects. It combines vector search and graph traversal to find code by meaning, analyze impact via reverse dependencies, and explore file architectures.
    5
    5
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    AI-native code intelligence graph that builds a persistent knowledge graph of your codebase in Neo4j and exposes it to AI assistants via MCP, enabling contextual code analysis, impact analysis, and dependency tracking.
    23
    -