Skip to main content
Glama

Capalith

Capalith is a local-first catalog for portable agent skills. It indexes each skill with its supporting files from local directories or Git branches and tags. Search returns ranked matches, declared relationships, and the IDs a host needs to read a selected skill.

Capalith provides:

  • local directories and Git branches or tags, with the resolved commit recorded for each scan;

  • SQLite FTS5 search, optionally combined with a local semantic model;

  • stable pagination, inspection of stored files, and relationship traversal that handles cycles and enforces depth and result limits;

  • sources that can be enabled, disabled, or removed without deleting history;

  • read-only checks for changes to Git branch or tag sources;

  • an MCP server over stdio with first-search catalog setup and stored-snapshot retrieval.

Connect and use

Connect Capalith, then ask your agent to find a skill for a task. The server starts without a catalog or source arguments. The first search discovers supported skill directories, prepares the local catalog, and returns matches. No readiness call, database path, source IDs, separate scan command, or companion-guide installation is required. Capalith provides navigation; the agent decides when to use it and the host retains control of skill loading.

The current package supports Linux with Python 3.11 or later and SQLite FTS5. Git is needed only for Git sources. Releases are distributed through GitHub, not a package registry. See the changelog and release assets.

Full installation

With uv installed:

uv tool install --python 3.11 \
  https://github.com/Kayhusk/capalith/releases/download/v0.1.3/capalith-0.1.3-py3-none-any.whl
capalith-model provision
capalith-model verify

This installs the CLI, MCP server, bundled guidance, and semantic-search dependencies in an isolated environment. Provisioning downloads and verifies the pinned local model once. Search and indexing then run locally. The full install includes every shipped capability; there are no optional feature extras. SQLite BM25 remains the fallback if the model is unavailable, not a reduced installation tier.

For installation from a checkout, use uv tool install --python 3.11 ., followed by the same model commands. In an existing Python environment, python3 -m pip install . installs the same package. Do not install Capalith's dependencies into an agent host's own environment.

Connect your agent

Clients that use mcpServers accept this form; other clients expose the same command through their native MCP settings:

{
  "mcpServers": {
    "capalith": {
      "command": "capalith-mcp"
    }
  }
}

Use the absolute executable path returned by command -v capalith-mcp if the client does not inherit your shell's PATH. Capalith owns catalog setup. Your client owns connecting the server and exposing its tools. After connecting, ask the agent to find a skill for a task.

Hermes filters subprocess environment variables. Preserve its current profile in the same native connection operation:

PROFILE=default
hermes --profile "$PROFILE" mcp add capalith \
  --command "$(command -v capalith-mcp)" \
  --env "HERMES_HOME=$(dirname "$(hermes --profile "$PROFILE" config path)")"

Set PROFILE to the intended Hermes profile. The native config path resolves its actual directory, without relying on the shell's inherited profile environment. Use Hermes's /reload-mcp in the intended conversation after changing its connection. Clients that filter environment variables must also forward any custom CODEX_HOME, CLAUDE_CONFIG_DIR, or variables used in external skill paths. Capalith sees the subprocess environment supplied by the client, not private parent-process state.

For profile-local model and catalog storage, set CAPALITH_SEMANTIC_MODEL during provisioning and in the MCP entry, and set the entry's XDG_DATA_HOME to that profile's chosen data directory. These settings change storage locations, not available features.

Automatic discovery and refresh

discover accepts a query directly and prepares the catalog on first use. It also accepts the actual absolute task workspace, including project switches. Without an explicit workspace, Capalith uses Claude Code's CLAUDE_PROJECT_DIR when supplied, then the server's working directory. Its installation directory, host profile, task workspace, and catalog can all live separately. config_show optionally previews readiness, source locations, and discovery context without creating a catalog.

When a client omits a custom host home from the MCP environment, the agent can supply the known hermes, claude, or codex config home through host_homes on the search itself. This overrides discovery context, not host configuration. source_paths accepts exact task-authorized roots or roots supplied by native host metadata instead of automatic location discovery. Users do not need to register those sources manually. index_skills remains available for an explicit refresh. Omitted context retains the selected workspace and host homes; switching projects does not require reconnecting.

The detector checks these locations, not the whole filesystem:

  • Codex: ~/.agents/skills, plus the legacy $CODEX_HOME/skills location, defaulting to ~/.codex/skills.

  • Claude Code: $CLAUDE_CONFIG_DIR/skills, defaulting to ~/.claude/skills.

  • Hermes: the current $HERMES_HOME/skills, defaulting to ~/.hermes/skills, plus skills.create_dir and skills.external_dirs from that profile's config.yaml. Configured paths expand ~ and environment variables; relative paths resolve against that profile home. Config reads are limited to 1 MiB and must be regular, non-symlinked files.

  • Project .agents/skills and .claude/skills from the task directory through its nearest Git root, plus .hermes/skills at that root. Outside Git, only the task directory is checked.

Root symlinks and linked category or skill directories, including links nested inside categories, resolve to canonical intake roots. Traversal stops at each skill bundle and skips previously visited directories to avoid cycles. Supporting-file links inside bundles remain rejected. Identical canonical source roots are deduplicated. Discovery reports warnings and origins; it does not prove a host loaded or used the skills. Other Hermes profiles, plugin registries, managed enterprise locations, dynamic host state, and arbitrary workspace descendants are not searched. This is source-location discovery, not a replacement for each host's skill inventory, enablement, precedence, quarantine, or project-trust rules. The agent must honor those decisions before using retrieved guidance.

The catalog lives under $XDG_DATA_HOME/capalith/catalogs, or ~/.local/share/capalith/catalogs by default. Its path depends on the selected sources and their order, so clients with the same selection and data directory reuse one catalog. First search and changed context prepare the catalog. Searches with unchanged context, including pagination, read stored snapshots without rescanning. Use index_skills to observe later source changes. There is no watcher or background service. Default-mode discover is annotated as catalog-writing and non-destructive; the other retrieval tools remain read-only.

After failed setup, correct the cause and use index_skills, or supply corrected context to discover. Unchanged searches do not retry setup or serve the prior catalog. Completed source scans remain stored; a failed source scan preserves that source's previous complete observation. Sources commit independently. Setup errors redact source and configuration details. Do not manually change registrations in an automatically managed catalog.

Add your own folders

Keep native source discovery and add folders in the MCP connection's arguments:

{
  "command": "capalith-mcp",
  "args": ["--extra-source", "/absolute/team-skills", "--extra-source", "/absolute/my-skills"]
}

These additions survive reconnects because the client owns the connection settings. Startup stays lazy. No new Capalith config file is needed. Native roots take precedence, followed by extras in the supplied order; canonical duplicates are merged. Missing or unreadable additions fail setup instead of silently dropping the folder.

For connection-local changes, discover and index_skills accept extra_source_paths. A supplied list replaces previous additions; [] clears them, and omission retains them. source_paths instead selects only explicit roots and cannot appear in the same call. Supplying workspace, host homes, or additions returns to automatic discovery unless explicit roots are also supplied. --extra-source cannot be combined with the explicit-only modes below or --db.

Explicit startup sources

The installed server accepts local directories and Git branches or tags:

capalith-mcp --source /absolute/path/to/skills
capalith-mcp --git https://example.com/skills.git refs/heads/main

These optional modes index only the supplied sources at startup and expose read-only query tools. Repeat --source or --git to select more sources. Local sources take priority over Git sources; within each group, the first listed source wins a name collision.

Each server start refreshes this explicit selection. Git startup may fetch the configured ref; local startup needs no network. Restart these connections to pick up later source changes. If startup fails, the server exits rather than serving a stale catalog. Use --db below for manual source lifecycle control.

Bundled guidance

The server supplies the companion skill as MCP initialization instructions. It also exposes the exact bundled files at capalith://guide/SKILL.md and capalith://guide/references/operations.md. Clients decide how to expose those instructions and resources. Capalith does not install or activate a native host skill, and no separate skill installation is required by the server.

Related MCP server: AAS Core MCP Server

Development setup

requirements.txt pins all dependencies used by the test suite, including MCP and fastembed, for CPython 3.11 on Linux x86_64. SQLite must include FTS5.

python3 -m pip install --require-hashes -r requirements.txt
PYTHONWARNINGS=error python3 -m unittest discover -s tests -v

These tests cover package and MCP protocol behavior. They do not verify integration with a specific host, remote access, deployment, or package publication.

The semantic model is local. It converts skill text and queries into vectors so related wording can match when BM25 does not. fastembed runs the pinned ONNX model on the CPU.

Download and verify the model once:

python3 -m capalith.semantic provision
python3 -m capalith.semantic verify

Only python3 -m capalith.semantic provision uses the network. Scans and searches use local files with local_files_only=True.

Advanced: manage a catalog through the CLI

These commands are optional. Use them when you want direct control of database placement, source lifecycle, or scan timing instead of source-selected MCP startup.

DB="${DB:-capalith.sqlite3}"
ROOT="/path/to/a/skills/root"

SOURCE_ID="$(
  python3 -m capalith --db "$DB" source add-local "$ROOT" |
    python3 -c 'import json, sys; print(json.load(sys.stdin)["source_id"])'
)"

python3 -m capalith --db "$DB" scan "$SOURCE_ID"
python3 -m capalith --db "$DB" --source-id "$SOURCE_ID" discover "your query"

Search returns ranked matches with their source, IDs, matching excerpts, declared relationships, recommendations, and pagination fields. The default page contains five matches. You can request up to 50 per page.

To request the next page without changing the result set, reuse its view_id and next_offset:

python3 -m capalith --db "$DB" --source-id "$SOURCE_ID" --limit 10 \
  --offset "$NEXT_OFFSET" --view-id "$VIEW_ID" discover "your query"

A view becomes stale if the query, selected sources, catalog, retrieval method, model, or ranking rules change.

Inspect and traverse

Use the artifact ID and content digest returned by discovery:

python3 -m capalith --db "$DB" artifact show "$ARTIFACT_ID" "$CONTENT_DIGEST"
python3 -m capalith --db "$DB" artifact show \
  "$ARTIFACT_ID" "$CONTENT_DIGEST" "references/guide.md"

python3 -m capalith --db "$DB" --source-id "$SOURCE_ID" \
  --relationship-type requires --direction both --depth 2 --limit 10 \
  traverse "$ARTIFACT_ID" "$CONTENT_DIGEST"

Inspection reads the copy stored in SQLite. It does not reopen the source directory. A resource-specific read returns identity, catalog status, and that resource without manifests, version history, other resources, or relationships. Omit the resource path for full audit inspection. Prefer the host's native reader for ordinary skill use, and reuse instructions already loaded instead of fetching a second copy.

Traversal follows only declared requires, complements, alternatives, conflicts, and supersedes relationships. It is deterministic, cycle-safe, and limited to depths 1 through 3.

Add a Git branch or tag source

Capalith accepts credential-free https:// URLs without query data and local file:// URLs. The requested ref must be a fully qualified branch or tag.

SOURCE_ID="$(
  python3 -m capalith --db "$DB" source add-git \
    "$GIT_URL" "refs/heads/main" |
    python3 -c 'import json, sys; print(json.load(sys.stdin)["source_id"])'
)"
python3 -m capalith --db "$DB" scan "$SOURCE_ID"
python3 -m capalith --db "$DB" source review "$SOURCE_ID"

Each scan records the requested ref and resolved commit. Later scans of a moving ref keep records of earlier revisions.

Review fetches the configured ref, compares its commit and skill contents with the last successful scan, and reports any changes without updating the catalog. After upgrading an older database that stores multiple Git revisions for one source, scan that source once before review.

Enable, disable, or remove sources

python3 -m capalith --db "$DB" source list
python3 -m capalith --db "$DB" source disable "$SOURCE_ID"
python3 -m capalith --db "$DB" source enable "$SOURCE_ID"
python3 -m capalith --db "$DB" source remove "$SOURCE_ID"
python3 -m capalith --db "$DB" config show

Disabled sources remain in the database and can be enabled without another scan. Removed sources remain in history but cannot be enabled again. config show is read-only and works before the database exists.

Connect an existing catalog read-only

python3 -m capalith.mcp_server --db "$DB"

Every mode exposes discover, inspect, traverse, and config_show. The default agent-managed connection also exposes index_skills. With --db, the server uses the exact database path supplied, does not create, migrate, or refresh the catalog, and does not read source files. --db cannot be combined with --source, --git, or --extra-source. Explicit-only connections reject automatic-discovery context arguments on search. No mode opens a network listener or configures hosts.

Retrieval behavior

Capalith ranks BM25 and semantic matches separately, then combines the rankings. Exact names can still match below the semantic similarity threshold. If semantic search cannot run safely, SQLite BM25 handles the full query.

Only enabled sources are searched. Newer registrations win name collisions by default. Callers can pass an ordered list of source IDs to choose which sources to search and their priority. Capalith does not decide when an agent should search, load selected content through a host, or run an LLM.

Limits

Capalith does not install itself into an agent host. It only catalogs and retrieves skills. It does not install, activate, execute, change, synchronize, sign, or publish them. The current release has no background service, user interface, general-purpose graph API, model reranker, or host adapter. Git sources do not support embedded credentials, SSH, proxies, custom certificates, submodules, or LFS.

Dependency, model, and license records are in THIRD_PARTY_NOTICES.md and DEPENDENCIES.json.

License

Capalith is available under the MIT License. Copyright 2026 Edward Bowie and Capalith contributors.

Available Tools

5 tools
config_showB
Read-only

Return configured sources, source states, and Capalith features.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description only restates the return content, which the output schema already documents, and adds no behavioral context such as auth requirements, side effects, or scope 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?

A single front-loaded sentence with no filler; every word maps to the tool's purpose.

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 0-param read tool with full annotation coverage and an output schema, the description is minimally sufficient. It is somewhat thin on when to choose it over the sibling readers, but the structured fields carry most of the burden.

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, which per the rubric establishes a baseline of 4. There is nothing for the description to clarify on the input side.

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 gives a specific verb ('Return') and enumerates the resources returned (configured sources, source states, Capalith features), so the agent knows it reads configuration. It does not, however, distinguish this tool from siblings like 'inspect' or 'discover', leaving overlap ambiguous.

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

Usage Guidelines2/5

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

There is no indication of when to use this tool versus the siblings (inspect, discover, traverse, index_skills), nor any exclusions, prerequisites, or triggering conditions. The agent is left to infer usage entirely.

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

discoverA

Search Agent Skills by task, including known skills and declared relationships. The first search prepares a local catalog from supported host skill directories. workspace and host_homes select task/profile context when it differs from the server. Repeated searches read the snapshot; index_skills explicitly refreshes it. Writes only Capalith's catalog, never sources or host settings; does not load or activate skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results per page.
queryYesNatural-language task to search for.
offsetNoNumber of results to skip.
view_idNoView ID returned by an earlier page of the same search.
workspaceNoAbsolute task workspace; falls back to CLAUDE_PROJECT_DIR, then server cwd.
host_homesNoKnown absolute host config homes, not installation or skill paths. Overrides filtered environment values; omitted keys use the server environment.
source_idsNoSources to search, in priority order.
source_pathsNoAbsolute skill directories selected by the user or task.
extra_source_pathsNoUser-added absolute skill directories alongside host defaults, after them in priority. Replaces previous additions; [] clears them. Omit to retain. Cannot be combined with source_paths, which selects only explicit roots.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false, so the description's 'Writes only Capalith's catalog, never sources or host settings' is essential and non-obvious context explaining the write. It also states it 'does not load or activate skills,' bounding side effects, and explains snapshot vs. refresh semantics.

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?

Front-loaded with purpose, then state/side-effect constraints in compact sentences. It is dense and mostly earns its space, with minor redundancy between the snapshot and refresh 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?

An output schema exists, so return values need not be explained, and the description covers the stateful behaviors (catalog preparation, snapshot reuse, refresh) an agent must know. It is complete for a 9-parameter search tool, though pagination semantics could be slightly clearer.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, and the description adds real meaning beyond the schema: workspace and host_homes select task/profile context when it differs from the server, and extra_source_paths is described as replacing previous additions. view_id pagination usage is only lightly covered, keeping this at 4.

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

Purpose5/5

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

States a specific verb and resource ('Search Agent Skills by task') and clarifies scope ('including known skills and declared relationships'). It also distinguishes itself from the sibling index_skills by naming it directly, so an agent can route correctly without opening schemas.

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

Usage Guidelines4/5

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

Gives clear context: the first search builds the catalog, repeated searches read the snapshot, and index_skills is the explicit refresh path. It lacks an explicit when-not-to-use statement (e.g., versus inspect or traverse), but the index_skills routing is concrete.

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

index_skillsA

Find and index installed Codex, Claude Code and current Hermes profile skill directories. Refresh the current selection or select different sources; discover also handles first-use setup. Supply host_homes from known host context if the client's environment omitted a custom home. No-argument calls refresh the selection; source_paths selects only explicit custom roots. Creates Capalith's catalog, never edits sources or activates skills. config_show previews roots.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoAbsolute task workspace; falls back to CLAUDE_PROJECT_DIR, then server cwd.
host_homesNoKnown absolute host config homes, not installation or skill paths. Overrides filtered environment values; omitted keys use the server environment.
source_pathsNoAbsolute skill directories selected by the user or task.
extra_source_pathsNoUser-added absolute skill directories alongside host defaults, after them in priority. Replaces previous additions; [] clears them. Omit to retain. Cannot be combined with source_paths, which selects only explicit roots.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With annotations declaring readOnlyHint=false but destructiveHint=false, the description resolves the ambiguity: 'Creates Capalith's catalog, never edits sources or activates skills.' That tells the agent exactly what side effect occurs and what does not, which the annotations alone cannot convey. It does not mention failure modes or permission requirements.

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?

Front-loaded with the core action, then compact clauses for each parameter's behavior. Dense but every sentence carries a distinct instruction; the 'config_show previews roots' aside is slightly tacked-on but still useful routing 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?

The tool mutates its own catalog, and the description states the boundary (creates catalog, never edits sources/activates skills) plus the parameter interplays. An output schema exists, so return values need not be explained. Minor gap: no mention of what happens to previously indexed skills on refresh.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: no-arg calls refresh, source_paths is restricted to explicit roots, and host_homes should come from known host context when the environment omitted a value. This clarifies the interaction between optional parameters beyond the per-field schema text.

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?

Opens with a specific verb+resource: 'Find and index installed Codex, Claude Code and current Hermes profile skill directories.' It also distinguishes itself from a sibling by noting 'config_show previews roots,' so an agent can separate indexing from previewing. It stops short of fully differentiating from discover/inspect/traverse, so not a 5.

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

Usage Guidelines4/5

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

Explicitly states the invocation modes: no-argument calls refresh the selection, source_paths selects only explicit custom roots, and host_homes is supplied 'from known host context if the client's environment omitted a custom home.' It also notes first-use setup is handled by 'discover.' Clear context with no explicit when-not guidance beyond that.

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

inspectB
Read-only

Return stored metadata, a resource list, or one resource for an artifact version.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifact_idYesArtifact ID returned by Capalith.
resource_pathNoRead only this stored resource with identity and catalog status; omit for full audit metadata and resource list.
content_digestYesContent digest paired with the artifact ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the description is consistent with it. The description adds the three return modes, which is genuinely useful behavior information, but says nothing about auth requirements, rate limits, or error conditions. Some added value beyond annotations, but not rich.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words that enumerates the three return modes. Efficient, though the extreme terseness leaves the mode-selection logic unstated rather than merely brief.

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 a full output schema present, the description need not explain return values, and annotations cover the read-only/safety profile. Combined with 100% parameter coverage, the definition is adequate for an agent to call this correctly. The one real gap — routing between this and its siblings — is minor given the structured data available.

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 artifact_id, resource_path, and content_digest are all documented in the schema itself. The description reinforces the artifact-version scoping but adds no syntax, format, or meaning beyond what the schema already provides. Baseline 3 applies when the schema carries the load.

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

Purpose4/5

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

The description states a specific verb (Return) and resource scope — stored metadata, a resource list, or one resource for an artifact version — so an agent knows what data comes back. It does not, however, explicitly position itself against siblings like discover or traverse, leaving the reader to infer the boundary. Clear but without sibling differentiation.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance and no mention of alternatives among discover, traverse, config_show, or index_skills. The only selection cue (omit resource_path vs. supply it) lives in the input schema, not the description. No usage guidance beyond the bare purpose.

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

traverseB
Read-only

Return declared relationships for an artifact version.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoMaximum relationship depth.
limitNoMaximum results per page.
offsetNoNumber of results to skip.
view_idNoView ID returned by an earlier page of the same traversal.
directionNoDirection to follow relationships.outbound
source_idsNoEnabled sources to include, in priority order.
artifact_idYesStarting artifact ID returned by Capalith.
content_digestYesContent digest paired with the starting artifact ID.
relationship_typesNoRelationship types to follow.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description's only behavioral contribution is the qualifier 'declared' relationships, which usefully implies these are explicitly asserted rather than inferred links, but it says nothing about how depth, direction, or pagination affect the result.

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

Conciseness4/5

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

The single sentence is front-loaded with the action and resource and contains no filler. It is arguably too terse for a 9-parameter traversal tool, but measured purely as conciseness and structure it is clean and efficient.

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?

An output schema and annotations exist, so safety and return shape need not be restated. However, for a traversal tool with depth, direction, view-based pagination, and source prioritization, one sentence leaves the agent without context on traversal semantics or paging behavior.

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 (depth, view_id, direction, source_ids, etc.) is already documented in the schema. The prose description adds no syntax 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.

Purpose4/5

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

The description gives a specific verb ('Return') and resource ('declared relationships') scoped to 'an artifact version,' so the agent knows exactly what operation this is. It does not, however, distinguish this traversal operation from siblings like inspect or discover, which likely also read artifact metadata.

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

Usage Guidelines2/5

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

There is no guidance on when to choose traverse over the sibling tools, nor any stated preconditions (e.g., that artifact_id/content_digest must come from a prior Capalith call). The word 'declared' hints at a scope boundary but is not framed as usage guidance.

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. 5 tool updatesv0.1.0
    • First observedconfig_show
    • First observeddiscover
    • First observedindex_skills
    • First observedinspect
    • First observedtraverse

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation3/5

inspect and traverse both target artifact versions but return different things (metadata/resources vs relationships), while discover and index_skills overlap heavily around catalog preparation and skill discovery/indexing. The descriptions help distinguish them, but boundary selection still requires careful reading.

Naming Consistency3/5

The set mixes bare verbs (inspect, discover, traverse), a noun_verb form (config_show), and a verb_noun form (index_skills). The names are readable but follow no single predictable convention.

Tool Count5/5

Five tools is well-scoped for a skill-catalog and artifact-inspection server. Each tool maps to a distinct capability area: inspection, discovery, relationship traversal, configuration viewing, and indexing.

Completeness3/5

The surface covers read/discovery/indexing workflows, but lacks mutation operations for artifacts, source configuration changes, and any skill loading or activation. These gaps may be intentional, but agents will hit dead ends if the task requires config changes or artifact lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Provides read-only hybrid RAG search and discovery over a local-first AI knowledge corpus, enabling semantic and keyword search, browse, digest, and status tools.
    4
    PolyForm Noncommercial 1.0.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables coding agents to search, recommend, and validate a stack of reusable skills from a local catalog, producing deterministic plans without modifying the project.
    3,212 npm
    1
    MIT