Data as of

MCP Language Server for Windsurf: Setup & Config

Windsurf: Expose an installed language server to MCP assistants for semantic code navigation and edits.

What you can do with MCP Language in Windsurf

Choose it to give an MCP coding assistant semantic navigation powered by an existing language server.

  • Inspect file diagnostics while an assistant changes code.
  • Give a coding client language intelligence without embedding an IDE.

Before you start: MCP Language in Windsurf

  • Go
  • Bridge installed with go install github.com/isaacphi/mcp-language-server@latest
  • rust-analyzer installed for this example
  • An MCP client and a local workspace

This is the README's Rust example. Replace the workspace path and choose the appropriate installed language server. Other documented configurations cover gopls, pyright, TypeScript, and clangd.

MCP Language Windsurf configuration

  1. Choose Windsurf configuration scope

    For MCP Language Server, open macOS/Linux: ~/.codeium/windsurf/mcp_config.json Windows: %USERPROFILE%\.codeium\windsurf\mcp_config.json. Merge into mcpServers; remote endpoints use serverUrl.

  2. Add MCP Language Server to Windsurf

    Use the mcp-language-server entry below in mcpServers. Keep MCP Language Server's documented stdio connection fields and your other Windsurf entries.

  3. Check MCP Language Server in Windsurf

    MCP Language Server: Refresh MCP in Windsurf settings and inspect Cascade’s tools.

Config file · macOS/Linux: ~/.codeium/windsurf/mcp_config.json

Windows: %USERPROFILE%\.codeium\windsurf\mcp_config.json

JSON
{
  "mcpServers": {
    "mcp-language-server": {
      "command": "mcp-language-server",
      "args": [
        "--workspace",
        "/Users/you/dev/yourproject/",
        "--lsp",
        "rust-analyzer"
      ],
      "env": {}
    }
  }
}

MCP Language tools available to Windsurf

MCP Language's stored tool list documents 6 tools; compare it with Windsurf's connected tool list, because the stored list is not a live check.

definition

After refreshing MCP Language in Windsurf settings, check Cascade's tool list for definition.

references

After refreshing MCP Language in Windsurf settings, check Cascade's tool list for references.

diagnostics

After refreshing MCP Language in Windsurf settings, check Cascade's tool list for diagnostics.

Read warnings and errors reported for a file.

hover

After refreshing MCP Language in Windsurf settings, check Cascade's tool list for hover.

rename_symbol

After refreshing MCP Language in Windsurf settings, check Cascade's tool list for rename_symbol.

Apply a language-aware symbol rename across the project.

edit_file

After refreshing MCP Language in Windsurf settings, check Cascade's tool list for edit_file.

Apply multiple file changes using line positions.

MCP Language: full stored tool descriptions

Troubleshooting MCP Language in Windsurf

  • Check mcp-language-server on the machine running Windsurf's MCP integration for MCP Language Server; refresh MCP and inspect Cascade's tools.
  • MCP Language Server uses stdio here: Windsurf must keep the configured process running; protocol output belongs on stdout and diagnostics on stderr.
  • Known limitation: Requires a separately installed language server.
  • Known limitation: The underlying server must communicate through stdio.
  • Known limitation: The README labels the project beta software.
  • General Windsurf troubleshooting lives in the /clients/windsurf guide.

MCP Language Server — details. Windsurf guide

Frequently asked questions

Windsurf reads MCP Language Server under mcpServers in ~/.codeium/windsurf/mcp_config.json on macOS/Linux; Windows uses %USERPROFILE%\.codeium\windsurf\mcp_config.json.

Windsurf's mcp-language-server example uses stdio.

MCP Language Server's Windsurf configuration invokes mcp-language-server.

MCP Language Server's stored list contains 6 tools, including definition, references, diagnostics. Compare those names with Windsurf's connected tool list; the stored list is not a live check.

The README includes gopls, rust-analyzer, pyright, typescript-language-server, and clangd configurations.

Set LOG_LEVEL to DEBUG to enable verbose stderr logs, including language-server messages.