- Notifications
You must be signed in to change notification settings - Fork35
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 ourterms of service andprivacy 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
…specsComplete 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 formatAll 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 achievedChange-Id: Ic1bd33aadb7fa45d64d4aba208acf37b2c9779cbSigned-off-by: Thomas Kosiewski <tk@coder.com>
This comment was marked as outdated.
This comment was marked as outdated.
Sorry, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
- 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 testingAll 325 tests now pass with complete coverage of new MCP tool features.Change-Id: I15bceb2bb44552205ea63c5ef1cb83722f7b5893Signed-off-by: Thomas Kosiewski <tk@coder.com>
This comment was marked as outdated.
This comment was marked as outdated.
Sorry, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
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: I05853ff183ef8f3e5df2863d2184a0cb58cb7e65Signed-off-by: Thomas Kosiewski <tk@coder.com>
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 useresult.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-compliantcontent 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.
Theafter_each
hook should clear all mocks introduced inbefore_each
, includingvim.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
, andvim.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 overriddenvim.fn.bufnr
spy in thisafter_each
to restore the default stub and prevent interference with other tests.
Copilot uses AI. Check for mistakes.
szihs commentedJun 26, 2025
Not sure, but I see only 10 tools when running
|
Uh oh!
There was an error while loading.Please reload this page.
Summary
Implements complete MCP (Model Context Protocol) tools compliance, achieving100% 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: