-
Notifications
You must be signed in to change notification settings - Fork 23
feat: complete MCP tools compliance with VS Code extension specs #57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…specs Complete implementation of MCP (Model Context Protocol) tool compliance by: - Adding 2 missing tools from VS Code extension - Converting all tool outputs to MCP-compliant format - Exposing internal tools via MCP while preserving existing functionality - Comprehensive test suite updates with robust JSON handling - Updated documentation to reflect 100% VS Code compatibility - **getLatestSelection**: Get most recent text selection (different from getCurrentSelection) - **closeAllDiffTabs**: Close all diff-related tabs/windows with VS Code-compatible output format All tools now return MCP-compliant format: `{content: [{type: "text", text: "JSON-stringified-data"}]}` - **checkDocumentDirty**: Added schema for MCP exposure, success/failure JSON responses - **saveDocument**: Added schema for MCP exposure, detailed success information - **getWorkspaceFolders**: Added schema for MCP exposure, VS Code-compatible structure - **getOpenEditors**: Restructured from `{editors: [...]}` to `{tabs: [...]}` with all VS Code fields - **getCurrentSelection**: Enhanced with proper fallback behavior and MCP format - **openFile**: Added missing parameters (preview, selectToEndOfLine, makeFrontmost, text selection) - **closeTab**: Updated format while keeping internal-only (per Claude Code requirement) - **Text Selection in openFile**: Full implementation of startText/endText pattern matching - **Conditional Output**: openFile returns simple vs detailed responses based on makeFrontmost - **Language Detection**: getOpenEditors includes proper languageId field mapping - **Error Handling**: Comprehensive JSON-RPC error responses throughout - **Robust JSON encoder/decoder**: Custom implementation supporting nested objects and special keys - **Comprehensive test coverage**: All new tools with unit tests - **Updated test expectations**: All existing tests adapted to MCP format - **Format validation**: Tests verify exact VS Code extension compatibility - **CLAUDE.md**: Complete rewrite of MCP tools section with 100% compliance status - **Development Guidelines**: Added MCP tool development patterns and troubleshooting - **Quality Standards**: Updated to reflect 320+ tests with 100% success rate - **Protocol Compliance**: New section documenting VS Code extension feature parity - **Backward compatibility**: No breaking changes to existing API - **VS Code alignment**: Output formats match official VS Code extension exactly - **Internal tools preserved**: close_tab remains internal as required by Claude Code architecture - ✅ 320 tests passing (0 failures, 0 errors) - ✅ All linting checks passing (0 warnings, 0 errors) - ✅ Full MCP protocol compliance - ✅ VS Code extension feature parity achieved Change-Id: Ic1bd33aadb7fa45d64d4aba208acf37b2c9779cb Signed-off-by: Thomas Kosiewski <[email protected]>
- Fix closeAllDiffTabs potential duplicate window closing by using set-based approach instead of array - Add comprehensive test coverage for openFile parameters (makeFrontmost, preview mode, line/text selection) - Update CLAUDE.md documentation to mention endLine parameter for openFile tool - Enhance JSON encoder/decoder in test suite with proper escape sequence handling - Add missing vim API mocks for complex openFile functionality testing All 325 tests now pass with complete coverage of new MCP tool features. Change-Id: I15bceb2bb44552205ea63c5ef1cb83722f7b5893 Signed-off-by: Thomas Kosiewski <[email protected]>
Address Copilot review comment: when searching for endText pattern, line_idx is already the correct 1-based index for the lines array, so accessing lines[line_idx + 1] was incorrect. Changed to lines[line_idx] to access the current line directly. Change-Id: I05853ff183ef8f3e5df2863d2184a0cb58cb7e65 Signed-off-by: Thomas Kosiewski <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR updates all MCP tools to return VS Code extension–compatible JSON structures and adjusts tests and documentation accordingly.
- Wrapped tool handler returns in
{ content: [{ type = "text", text = JSON }] }
format - Revised tests to assert on
result.content[...]
and JSON-parse the embedded text - Added JSON encode/decode helpers and updated CLAUDE.md with full compliance and new tool registrations
Reviewed Changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
File | Description |
---|---|
tests/unit/tools/*_spec.lua | Updated assertions to use result.content[...] and JSON-decode |
tests/busted_setup.lua | Added _G.json_encode /_G.json_decode helpers for test JSON ops |
lua/claudecode/tools/*.lua | Wrapped returns in MCP-compliant content arrays and added schemas |
lua/claudecode/tools/init.lua | Registered new tools (getLatestSelection , closeAllDiffTabs ) |
CLAUDE.md | Documented full MCP compliance and tool behaviors |
end) | ||
_G.vim.api.nvim_win_set_cursor = spy.new(function(win, pos) | ||
-- Mock cursor setting | ||
end) | ||
end) | ||
|
||
after_each(function() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The after_each
hook should clear all mocks introduced in before_each
, including vim.json.encode
, vim.api.nvim_get_current_buf
, vim.api.nvim_buf_get_name
, vim.api.nvim_buf_line_count
, vim.api.nvim_buf_set_mark
, vim.api.nvim_buf_get_lines
, and vim.api.nvim_win_set_cursor
, to avoid leakage between tests.
Copilot uses AI. Check for mistakes.
@@ -42,6 +48,7 @@ describe("Tool: save_document", function() | |||
_G.vim.api.nvim_buf_call = nil | |||
_G.vim.cmd = nil | |||
_G.vim.cmd_history = nil | |||
_G.vim.json.encode = nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also reset the overridden vim.fn.bufnr
spy in this after_each
to restore the default stub and prevent interference with other tests.
Copilot uses AI. Check for mistakes.
Summary
Implements complete MCP (Model Context Protocol) tools compliance, achieving 100% feature parity with Anthropic's official VS Code extension.
Key Achievements
{content: [{type: "text", text: "JSON"}]}
structureNew Tools Added
Enhanced Tools
{tabs: [...]}
format with all required fieldsTechnical Improvements
Latest Updates (Latest Commit)
Compatibility
Validation
All changes have been thoroughly tested and validated: