Commit graph

55 commits

Author SHA1 Message Date
Sam Hoang Van
467c52fb46
refactor(mcp): use getDefaultEnvironment for stdio client transport (#4259)
- Replace manual PATH and HOME env var handling with getDefaultEnvironment()
- Improves consistency and reliability of MCP client environment setup
- Leverages SDK's built-in environment configuration
2025-06-04 16:53:25 -04:00
Taylor Wilsdon
6423fc301c
fix: SSE MCP Invocation (#4251)
* only apply transport.start for stdio

* instructions

* formatting
2025-06-02 07:41:36 -04:00
qingyuan1109
98711d45cf
add support for mcp server instructions (#3260)
* add support for mcp server instructions

* Update McpView.tsx

* feat(mcp): add instructions field to MCP localization files and update UI to display instructions

---------

Co-authored-by: huixin <yuanhx@cffex.com.cn>
Co-authored-by: Daniel Riccio <ricciodaniel98@gmail.com>
2025-06-01 22:28:27 -04:00
Taylor Wilsdon
7e125f86c6
feat: Add support for Streamable HTTP Transport MCP servers (#4210)
* Implement support for streamable-http transport type mcp servers

* add streamable-http mock in same fashion as sse - which does not seem to currently be actually leveraged

* rename mock to resolve kebabcase vs camelCase

* fix (seemingly unrelatd) test failure in writeToFileTool.test.ts

* fix tests
2025-06-01 21:54:38 -04:00
Matt Rubens
116a50f7b4
Pass headers to SSE (fixes #2705) (#4148)
* Pass headers to SSE

* Add changeset
2025-05-30 15:34:19 -04:00
Matt Rubens
12669e1e64
Turn Prompts tab into Modes tab and move support prompts to Settings (#4078) 2025-05-28 17:47:37 -04:00
Trung Dang
dde71d24e4
feat(McpHub): inject env vars on whole mcp config (#3970)
* types(utils/config): improve return type infer

* feat(McpHub): inject env variable on whole mcp config

* fix: check for undefined configInjected

* refactor: improve type assertion

---------

Co-authored-by: Daniel <57051444+daniel-lxs@users.noreply.github.com>
2025-05-28 13:10:40 -04:00
DEV×PAIN
a734aca02e
fix(mcp): fix error loading config when running MCP Server with npx and bunx (#3922) 2025-05-24 09:07:05 -07:00
Noritaka Kobayashi
6a6df08fbd
refactor: import multiple times (#3745) 2025-05-20 09:19:44 -04:00
robertheadley
78b2083467
feat: Add error console to MCP servers - Edited with Roo Code and Anthropic Claude 3.5 (#2722)
Co-authored-by: cte <cestreich@gmail.com>
2025-05-06 00:17:20 -07:00
Chris Estreich
1924e10e72
Fix all linter errors (and fix the lint scripts too) (#2958) 2025-04-26 09:45:26 -07:00
Trung Dang
01a7a66ca0
feat: add injectEnv util, support env ref in mcp config (#2679)
* feat: support environment variables reference in mcp `env` config

* tests(src/utils/config): add test for `injectEnv`

* fix(injectEnv): use `env == null` and `??` check instead of `!env`, `||`

* refactor: remove unnecessary type declare

* chore!: simplify regexp, remove replacement for env vars with dots
2025-04-23 03:13:04 -04:00
Hannes Rudolph
3f6e07adf1
refactor(mcp): Implement reference counting for McpHub lifecycle (#2310)
Problem:
Closing auxiliary windows (e.g., from "open in editor") could prematurely dispose the shared singleton McpHub instance, shutting down MCP servers unexpectedly while other panels (like the sidebar) might still be active.

Solution:
Implemented reference counting directly within the McpHub class to manage its own lifecycle based on active clients (ClineProvider instances).
- Added `refCount`, `registerClient()`, and `unregisterClient()` methods to McpHub.
- McpHub now disposes itself only when the last registered client unregisters (`refCount` reaches 0).
- ClineProvider instances now call `mcpHub.registerClient()` upon initialization and `mcpHub.unregisterClient()` upon disposal.
- Removed the direct `mcpHub.dispose()` call from ClineProvider.dispose.

Benefit:
This ensures the shared McpHub instance remains active as long as at least one ClineProvider instance is using it. Cleanup now correctly occurs only when the last provider is closed or during full extension deactivation. This centralizes the resource's lifecycle logic within the resource class itself.

Files Changed:
- src/services/mcp/McpHub.ts
- src/core/webview/ClineProvider.ts
2025-04-04 23:14:05 -04:00
jdavis
b38b40656c
mcp supports cwd config and defaults to workspace cwd (#2171)
* mcp supports cwd config and defaults to workspace cwd

* clean up

* Update src/services/mcp/McpHub.ts

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-04-03 15:08:21 -04:00
Steven T. Cramer
b9f4695d12
Fix Tests to run properly on Windows (#1963)
* fix: remove -p flag from test script to prevent git operation errors

The -p flag in npm-run-all was causing tests to run in parallel, which led to 'Cannot log after tests are done' errors with git operations. These errors don't appear when running test:extension alone.

The issue occurs because git-based tests create temporary directories and run async operations that can interfere with each other when executed in parallel. Running tests sequentially resolves this cleanly.

While it might increase total test time slightly, it ensures more reliable and consistent test results.

* refactor(terminal): improve mock streams and fix test issues

- Create shell-specific mock streams (bash, cmd, pwsh) with proper line ending handling
- Fix open handles in tests by properly managing timeouts
- Standardize stderr redirection across all shell implementations using stdio option
- Improve test reliability and output cleanliness

* fix(tests): add skipVerification option to PowerShell tests to debug Linux issues

* fix(tests): use explicit variable name in PowerShell test to fix Linux compatibility

* Refactor terminal tests to use purpose-based approach instead of command mapping

* Remove reference to non-existent test file

* fix: use printf instead of echo -e for more consistent behavior across platforms

* fix: use single quotes for PowerShell commands to preserve variables on Linux

* Update code-qa workflow to run tests on both Windows and Ubuntu

* fix: use platform-specific PowerShell command execution for Linux and Windows

* Fix toggleToolAlwaysAllow to handle path normalization for cross-platform compatibility

* Fix McpHub tests to handle normalized paths on Windows

* Suppress console.error messages in McpHub tests

* fix: make Bedrock ARN regex patterns Windows-compatible

Fixed an issue where AWS Bedrock tests were timing out on Windows but passing on Linux. The root cause was path separator handling in regex patterns used for model ID extraction from ARNs.

1. Updated model ID extraction regex to handle both forward slashes (Linux) and backslashes (Windows)
2. Modified ARN matching regex to be platform-independent
3. Ensured consistent region prefix handling for all supported regions

This change maintains functionality while ensuring cross-platform compatibility.

* fix: make WorkspaceTracker test cross-platform compatible

Fixed an issue where the WorkspaceTracker test 'should initialize with workspace files' was failing on Windows but passing on Linux. The problem was in the mock implementation of toRelativePath that only handled forward slashes.

- Updated the toRelativePath mock to use path.relative which properly handles platform-specific path separators
- Ensured all paths are converted to forward slashes for consistency in test assertions
- The fix maintains cross-platform compatibility while preserving the test's intent

* fix: make WorkspaceTracker tests cross-platform compatible

Fixed cross-platform compatibility issues in the WorkspaceTracker tests that were causing failures on Windows but passing on Linux:

1. Updated the toRelativePath mock implementation to:
   - Use path.relative which properly handles platform-specific path separators
   - Convert paths to forward slashes for consistency in test assertions

2. Enhanced the 'should not update file paths' test to be platform-agnostic by:
   - Using more flexible assertions that don't depend on specific path formats
   - Checking file path length and content rather than exact string matches
   - Properly typed the test assertions to fix TypeScript errors

These changes preserve the test intent while ensuring they run successfully across different operating systems.

* fix: make McpHub tests cross-platform compatible

Fixed cross-platform compatibility issues in the McpHub tests that were causing failures on Windows but passing on Linux:

1. Made the toggleToolAlwaysAllow tests more platform-agnostic by:
   - No longer relying on specific path formats which differ between Windows and Linux
   - Using the last write call instead of searching for a specific path string
   - Adding more robust assertions that verify structure instead of exact path matches
   - Properly handling array existence checks

2. These tests would fail on Windows because paths are formatted with backslashes instead of
   forward slashes, causing path equality checks to fail.

The changes maintain test intent while ensuring cross-platform compatibility.

* handle escaping of slash and quote

* fix: ensure consistent line endings in git fallback strategy

Fixed an issue where tests would fail on GitHub Windows runners but pass on local Windows machines due to line ending differences. The fix ensures consistent line ending handling by:

1. Normalizing CRLF to LF when reading files in the git fallback strategy
2. Disabling Git's automatic line ending conversion
3. Maintaining consistent line ending usage throughout text operations

* feat: run tests sequentially on Windows, parallel otherwise
2025-03-31 23:17:56 -05:00
aheizi
c7ac0c5db5
Support project level mcp (#1841)
* support project-level mcp config

* switch the toasts to English

fix test

(cherry picked from commit 26941dcaae)

* add i18n for project mcp

(cherry picked from commit 792a8225c1)

* optimize McpHub.ts

* fix merge main into head

* fix project mcp

* partial update mcp config

* fix toggleToolAlwaysAllow

* Modify mcp to support project and global of the same name

* fix ut

* remove unused mcp log

* i18n for mcp

* Revert README changes

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-03-27 00:23:39 -04:00
Rian Santos
809e8cd6bc
#906 - Add watchPaths option to McpHub for file change detection (#1755)
* #906 Add watchPaths option to McpHub for file change detection

* #906 Refactor file watcher management in McpHub

add support multiple watchers per server.

modified the setupFileWatcher method to properly handle asynchronous operations and prevent unhandled promise rejections.

error handling now includes specific error messages that identify exactly where the error occurred.

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-03-24 15:33:30 -04:00
Steven T. Cramer
8ad4fff0d2
Removed hardcoded filenames to GlobalFileNames constants. (#1904)
* Replace hardcoded custom modes filename with GlobalFileNames constant

* Remove 'cline' prefix from mcpSettings filename

* Use GlobalFileNames.customModes in modes.ts

* replace two more `cline_mcp_settings` with `mcp_settings` in tests.

* feat: add settings file migration for new file naming convention

- Implement migrateSettings function to rename legacy settings files to new format
- Migrate cline_custom_modes.json to new custom modes filename
- Migrate cline_mcp_settings.json to new MCP settings filename
- Add TODO to remove migration code in September 2025 (6 months after implementation)
- Make activate function async to support migration on startup

* Add associated changeset

* removed unused import

* refactor: move migrateSettings to dedicated utility file

- Extract migrateSettings function from extension.ts to src/utils/migrateSettings.ts
- Update extension.ts to import and use the extracted function
- Update tests to use the real implementation
- Improve dependency injection by passing outputChannel as parameter
- Enhance maintainability by isolating temporary migration code (to be removed Sept 2025)

* Update src/extension.ts

---------

Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
2025-03-24 13:32:44 -04:00
aheizi
6bc81c2a0e
fix mcp stderr log (#1830) 2025-03-20 09:12:36 -04:00
Matt Rubens
2267cad93d
Revert "Merge pull request #1618 from aheizi/support_project_mcp" (#1784)
This reverts commit df80e9620d, reversing
changes made to dc302f72c2.
2025-03-18 16:10:12 -04:00
Matt Rubens
38655825d4
Extension-side internationalization (#1757)
* Extension-side internationalization

* Update script

* Cleaner esbuild

* Turn off debugging

* PR feedback

* Update src/i18n/locales/en/common.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* Update src/i18n/locales/ca/common.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2025-03-18 10:39:21 -04:00
aheizi
8f4145efd2 optimize McpHub.ts 2025-03-17 23:57:59 +08:00
aheizi
c948e811db Merge branch 'main' into support_project_mcp
# Conflicts:
#	src/services/mcp/McpHub.ts
2025-03-17 23:37:20 +08:00
aheizi
1f200882d0 fix test 2025-03-17 17:30:38 +08:00
aheizi
47747d67c2 validate server config 2025-03-17 17:30:37 +08:00
aheizi
e2182eb64f fix initializeMcpServers 2025-03-17 17:30:37 +08:00
aheizi
362359cc3c fix ut
(cherry picked from commit b4f808d7dc)
2025-03-17 14:41:18 +08:00
aheizi
3975c8d8a9 replace eventsource with reconnecting-eventsource to optimize the code.
(cherry picked from commit 505f86d75c)
2025-03-17 14:39:48 +08:00
aheizi
78b3130c93 remove rejectUnauthorized
(cherry picked from commit 5e788fc5f1)
2025-03-17 14:39:06 +08:00
aheizi
a7eac55a2b simpler way of setting up
(cherry picked from commit f13d28ad45)
2025-03-17 14:37:59 +08:00
aheizi
5a491672c4 add sseOptions
(cherry picked from commit f9a1cd0b52)
2025-03-17 14:37:14 +08:00
aheizi
a77be3feb7 feat: add sse mcp support
(cherry picked from commit 549b06f46d)
2025-03-17 14:36:28 +08:00
aheizi
c201baa4d1 fix mcp connection 2025-03-17 12:05:23 +08:00
aheizi
26941dcaae switch the toasts to English
fix test
2025-03-15 18:39:39 +08:00
aheizi
f77606996f Merge branch 'main' into support_project_mcp 2025-03-14 20:59:21 +08:00
aheizi
5d8a456374 Merge branch 'main' into support_project_mcp 2025-03-14 20:48:47 +08:00
Matt Rubens
b29f94ae65
Revert "feat: add sse mcp support" 2025-03-13 13:00:32 -04:00
aheizi
4106ca4a19 support project-level mcp config 2025-03-13 21:07:24 +08:00
aheizi
505f86d75c replace eventsource with reconnecting-eventsource to optimize the code. 2025-03-12 19:25:50 +08:00
aheizi
5e788fc5f1 remove rejectUnauthorized 2025-03-12 01:11:22 +08:00
aheizi
f13d28ad45 simpler way of setting up 2025-03-11 00:50:27 +08:00
aheizi
f9a1cd0b52 add sseOptions 2025-03-10 12:36:46 +08:00
aheizi
b4f808d7dc fix ut 2025-03-09 01:26:10 +08:00
aheizi
549b06f46d feat: add sse mcp support 2025-03-09 00:15:23 +08:00
Chris Estreich
159621cea6 Move & clean up model fetchers 2025-02-25 11:35:24 -08:00
Roo Code
bfa73fb69d Does that work? 2025-02-18 21:16:16 -07:00
MuriloFP
0bb6112257 fix: ensure disabled MCP servers appear in settings UI
When the MCP server was initialized before opening RooCode, disabled servers
would not appear in the settings UI. This was fixed by:

1. Using getAllServers() instead of getServers() in ClineProvider.ts for UI
   state updates, ensuring all servers (including disabled ones) are shown
2. Maintaining getServers() for operational use (AI prompts, tool calls)
   where disabled servers should be filtered out

The fix maintains clean separation between UI display and operational
server filtering.
2025-02-09 19:15:01 -03:00
MuriloFP
c9be470319 fix: prevent race conditions in McpServerManager singleton initialization
Added thread-safe initialization to the McpServerManager singleton pattern to
prevent potential race conditions when getInstance is called concurrently.
The changes include:

1. Added initializationPromise to track ongoing initialization
2. Implemented double-checked locking pattern:
   - First check: Return existing instance if available
   - Second check: Wait for any ongoing initialization
   - Third check: Double-check inside initialization block
3. Added proper cleanup in finally block to prevent deadlocks

This ensures that:
- Only one McpHub instance is ever created
- Concurrent calls wait for initialization to complete
- Resources are properly initialized and cleaned up
- No memory leaks from incomplete initialization

The fix maintains the existing functionality while making it safe for
concurrent access in VS Code's multi-window environment.
2025-02-07 17:12:39 -03:00
MuriloFP
b2b5e1ffa6 fix: Implement singleton pattern for MCP server management to prevent multiple instances
Problem:
- Multiple instances of the Roo Code application were launching separate MCP server instances
- This led to unnecessary resource consumption and potential conflicts between instances

Solution:
1. Created new McpServerManager singleton class to manage MCP server instances:
   - Static getInstance() method ensures only one McpHub instance exists
   - Tracks registered ClineProvider instances
   - Handles cleanup on extension deactivation

2. Modified ClineProvider class:
   - Changed mcpHub from private to protected
   - Added getMcpHub() public getter method
   - Updated initialization to use McpServerManager
   - Added unregister logic in dispose()

3. Updated extension.ts to handle cleanup:
   - Added McpServerManager cleanup in deactivate()

Technical Implementation:
- Uses WeakRef for provider tracking to allow proper garbage collection
- Maintains global state to track instance IDs
- Implements proper cleanup of resources on disposal
- Ensures backward compatibility with existing code

This change significantly improves resource usage and prevents potential conflicts
between multiple instances of the application while maintaining all existing
functionality.
2025-02-07 15:51:30 -03:00
Matt Rubens
57518e10b3 Add per-server MCP network timeout configuration 2025-01-26 22:49:21 -05:00