Skip to content

Commit eb4d3c2

Browse files
fix: Fix MCP server identification for multi-project workspaces (#8070)
## Closing issue closes #7930
1 parent e1c4024 commit eb4d3c2

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

metals/src/main/scala/scala/meta/internal/metals/mcp/MetalsMcpServer.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import scala.util.Try
1515
import scala.util.control.NonFatal
1616

1717
import scala.meta.internal.bsp.BuildChange
18+
import scala.meta.internal.metals.BuildInfo
1819
import scala.meta.internal.metals.BuildTargets
1920
import scala.meta.internal.metals.Cancelable
2021
import scala.meta.internal.metals.Compilations
@@ -106,9 +107,12 @@ class MetalsMcpServer(
106107
.build();
107108

108109
// Create server with configuration
110+
// Include project name in server info to help LLM distinguish between servers
111+
// when multiple projects are open in the same workspace
112+
val serverName = s"$projectName-metals"
109113
val asyncServer = McpServer
110114
.async(servlet)
111-
.serverInfo("scala-mcp-server", "0.1.0")
115+
.serverInfo(serverName, BuildInfo.metalsVersion)
112116
.capabilities(capabilities)
113117
.build()
114118

@@ -137,8 +141,8 @@ class MetalsMcpServer(
137141
LoggingMessageNotification
138142
.builder()
139143
.level(LoggingLevel.INFO)
140-
.logger("scala-mcp-server")
141-
.data("Server initialized")
144+
.logger(serverName)
145+
.data(s"Server initialized for project: $projectName")
142146
.build()
143147
)
144148

tests/unit/src/main/scala/tests/mcp/McpTestUtils.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import scala.concurrent.Future
44

55
import scala.meta.internal.metals.UserConfiguration
66
import scala.meta.internal.metals.mcp.McpConfig
7-
import scala.meta.internal.metals.mcp.VSCodeEditor
7+
import scala.meta.internal.metals.mcp.NoClient
88

99
import tests.BaseLspSuite
1010

@@ -17,7 +17,11 @@ trait McpTestUtils {
1717
UserConfiguration(startMcpServer = true).toString
1818
)
1919
port <- Future.successful(
20-
McpConfig.readPort(server.workspace, "root", VSCodeEditor)
20+
McpConfig.readPort(
21+
server.server.folder,
22+
server.server.getVisibleName,
23+
NoClient,
24+
)
2125
)
2226
_ = assert(port.isDefined, "MCP server port should be defined")
2327
client = new TestMcpClient(s"http://localhost:${port.get}", port.get)

tests/unit/src/test/scala/tests/mcp/McpServerLspSuite.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,11 +467,17 @@ class McpServerLspSuite extends BaseLspSuite("mcp-server") with McpTestUtils {
467467
override def afterEach(context: AfterEach): Unit = {
468468
super.afterEach(context)
469469
assertEquals(
470-
McpConfig.readPort(server.workspace, "root", CursorEditor),
470+
McpConfig.readPort(
471+
server.server.folder,
472+
server.server.getVisibleName,
473+
CursorEditor,
474+
),
471475
None,
472476
)
473477
assert(
474-
McpConfig.readPort(server.workspace, "root", NoClient).isDefined,
478+
McpConfig
479+
.readPort(server.server.folder, server.server.getVisibleName, NoClient)
480+
.isDefined,
475481
"MCP server port should be defined in the default location",
476482
)
477483
}

0 commit comments

Comments
 (0)