Skip to content

feat: unify MCP list tools - #428

Draft
jlitola wants to merge 21 commits into
mainfrom
jlitola/unified-list-mcp
Draft

jlitola wants to merge 21 commits into
mainfrom
jlitola/unified-list-mcp

Conversation

@jlitola

@jlitola jlitola commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

The MCP catalog splits inventory browsing across code_files and docs_list, giving packages, repositories, and hosted sites different schemas and leaving stale client guidance without one canonical replacement.

This change replaces both callable tools with one ten-argument list tool backed by the existing transport-neutral ListService. Package and repository targets expose source and documentation together; hosted documentation remains a separate explicit site: inventory. Paths are target-relative literals or globs for every target, directory recursion is independent of glob depth, and the shared CLI/MCP formatter emits only the source header, paths, and read/continuation guidance.

Default text now carries the opaque continuation directly:

More results: reuse the same target, paths, and options with:
  after="..."

CLI renders the equivalent --after command. JSON remains available for programmatic consumers, while --silent stays paths-only for piping. The descriptor leads with listing intent and later says Replaces code_files and docs_list. so full-description searches from stale skills still find the replacement.

The branch was rebased onto current main, preserving unified grep, target-relative site listing, and backend-authored unified read actions.

Hosts upgrading @githits/mcp must provide McpToolServices.listService. ListService and ListServiceImpl are exported from @githits/mcp/client, and custom endpoints must implement Query.list.

Validation:

  • bun test — 5,168 pass, 0 fail
  • bun run typecheck
  • bun run format:check
  • bun run lint — nine pre-existing non-null assertion warnings
  • bun run build
  • bun run plugins:generate / bun run plugins:check
  • bun run validate:packages
  • authenticated production CLI smoke — 157 steps
  • authenticated production MCP smoke — 65 steps
  • built CLI smoke — 38 steps
  • built MCP registration smoke — 9 steps
  • five targeted Codex descriptor workloads passed with high confidence using default text and no JSON
  • matching Claude eval could not start because the local Claude CLI was logged out
  • replacement descriptor — 2,892 UTF-8 bytes, 44.3% smaller than the 5,188-byte retired pair
  • external post-rebase review clean after one minor shared-guidance correction

@jlitola jlitola added the enhancement New feature or request label Sep 28, 2026
@jlitola
jlitola force-pushed the jlitola/unified-list-mcp branch from 8400a48 to 01fc63f Compare September 29, 2026 14:43
Export the transport-neutral list client API and require ListService in public and local MCP service providers.
Expose the backend list contract through a token-efficient MCP tool with shared text, JSON, validation, and error behavior.
Use MCP-native list actions and translate them to top-level githits list commands at CLI boundaries.
Register one list tool, update stable routing guidance, and remove code_files and docs_list from callable catalogs.
Replace retired public smoke inventories and fixture cases with the unified list tool. Exercise package and site text/JSON inventories, returned read actions, and cursor continuation.
Replace the retired docs_list and code_files parity cases with package and explicit-site list fixtures. Keep compact-package assertions scoped to package-addressed fixtures.
Replace separate source-directory and package-docs routing with one unified inventory route. Guide package-hosted documentation through an emitted explicit site target and assert exact-page reads use list results.
Add neutral descriptor-only scenarios for inventory boundaries, recursion and glob behavior, site-page locator reuse, continuation, and package-to-site discovery. Update active eval selection guidance while keeping pre-unification observations historical.
Drop CLI-to-MCP parity tests that require removed callable tools, while retaining direct legacy CLI implementation coverage and repository target checks for code_grep and read.
Include the five neutral list scenarios in the stable-full eval suite and pin the updated workload inventory and selection.
Keep the package.json exact-file read probe on its single-path listing, and exercise cursor replay with a root inventory query that returns two different pages.
Delete the unregistered code_files and docs_list factories and their MCP text renderers. Keep the grouped CLI request and response helpers, and document the host migration requirement for the unified list service.
Capture the completed review rounds, deterministic evidence, and the local Keychain limitation that still blocks authenticated live and agent-eval gates.
Preserve the 0.23.0 release-preparation facts while rebasing the Phase 2 plan onto current main.
Keep Phase 2 review evidence accurate after rebasing the implementation onto the 0.23.0 release commit.
Update the Phase 2 verification record for the exact head rebased onto the 0.23.0 release commit.
Add text-mode continuation commands for CLI and MCP, align list guidance with target-relative site paths, and preserve unified grep and read behavior after rebasing onto main.
Preserve main's search locator wording while asserting the unified list route.
@jlitola
jlitola force-pushed the jlitola/unified-list-mcp branch from 01fc63f to 53509c4 Compare September 29, 2026 14:46

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant