BC Code Intelligence MCP Server
Business Central and AL development guidance from a bundled knowledge base of specialist personas
Bridges coding agents to local language servers for definitions, references, renames and diagnostics
By Mirei Itaya (individual) JavaScript Local · stdio Developer tools
67 popularity score ★ 675 ↓ 13k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs CCLSP_CONFIG_PATH. Replace each <NAME> with your value.
claude mcp add cclsp -e CCLSP_CONFIG_PATH=<CCLSP_CONFIG_PATH> -- npx -y cclsp@latest{
"mcpServers": {
"cclsp": {
"command": "npx",
"args": [
"-y",
"cclsp@latest"
],
"env": {
"CCLSP_CONFIG_PATH": "<CCLSP_CONFIG_PATH>"
}
}
}
}{
"mcpServers": {
"cclsp": {
"command": "npx",
"args": [
"-y",
"cclsp@latest"
],
"env": {
"CCLSP_CONFIG_PATH": "<CCLSP_CONFIG_PATH>"
}
}
}
}{
"servers": {
"cclsp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"cclsp@latest"
],
"env": {
"CCLSP_CONFIG_PATH": "<CCLSP_CONFIG_PATH>"
}
}
}
}[mcp_servers.cclsp]
command = "npx"
args = ["-y", "cclsp@latest"]
[mcp_servers.cclsp.env]
CCLSP_CONFIG_PATH = "<CCLSP_CONFIG_PATH>"gemini mcp add --scope user -e CCLSP_CONFIG_PATH=<CCLSP_CONFIG_PATH> cclsp npx -- -y cclsp@latestOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs CCLSP_CONFIG_PATH. Replace each <NAME> with your value.
git clone https://github.com/ktnyt/cclsp.git
cd cclsp
bun install
bun run buildclaude mcp add cclsp -e CCLSP_CONFIG_PATH=<CCLSP_CONFIG_PATH> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'{
"mcpServers": {
"cclsp": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"CCLSP_CONFIG_PATH": "<CCLSP_CONFIG_PATH>"
}
}
}
}{
"mcpServers": {
"cclsp": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"CCLSP_CONFIG_PATH": "<CCLSP_CONFIG_PATH>"
}
}
}
}{
"servers": {
"cclsp": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"CCLSP_CONFIG_PATH": "<CCLSP_CONFIG_PATH>"
}
}
}
}[mcp_servers.cclsp]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"]
[mcp_servers.cclsp.env]
CCLSP_CONFIG_PATH = "<CCLSP_CONFIG_PATH>"gemini mcp add --scope user -e CCLSP_CONFIG_PATH=<CCLSP_CONFIG_PATH> cclsp node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'CCLSP_CONFIG_PATH |
Required: Absolute path to the cclsp.json file mapping file extensions to language server commands; the server exits at start without it. |
|---|
cclsp is a local stdio MCP server that sits between a coding agent (it was built with Claude Code in mind) and the Language Server Protocol servers you already use, such as typescript-language-server, pylsp, gopls, rust-analyzer or clangd. You map file extensions to the command that starts each language server in a cclsp.json file. cclsp then starts those servers itself, and the agent asks it questions about the code by symbol name rather than by exact line and column. Agents often get positions slightly wrong, so cclsp looks the symbol up by name and kind and tries several nearby positions before it gives up.
Version 0.7.0 registers 12 tools in its source, while the README documents only six of them. Beyond go-to-definition, references, renaming, diagnostics and server restarts, the code also adds hover info, find_implementation, workspace symbol search and call hierarchy (prepare_call_hierarchy, then get_incoming_calls or get_outgoing_calls). Renames apply to every affected file by default. With dry_run they only preview the edits.
A `cclsp setup` subcommand runs an interactive wizard. It detects the languages in a project, writes .claude/cclsp.json (or ~/.config/claude/cclsp.json with --user), can install language servers and can register cclsp with Claude Code, asking first each time. Run without arguments, the same binary starts the MCP server.
| Runtime | Node.js 18+ |
|---|
Node.js 18 or later (the package's engines field), or Bun. Each language server you want to use must be installed separately and be on the path, e.g. typescript-language-server, pylsp, gopls, rust-analyzer, clangd. You also need a cclsp.json file mapping file extensions to those server commands, with CCLSP_CONFIG_PATH pointing at it. Building from source needs Bun.
In 0.7.0 the server will not start unless CCLSP_CONFIG_PATH names an existing config file. Its loader throws when the variable is unset (src/lsp/config.ts), so the README's note about a TypeScript-only fallback does not hold, and it does not find the wizard's .claude/cclsp.json on its own. A tool fails for files whose extension has no configured server, and some servers need time to index first. The README warns that pylsp slows down after hours of use and suggests restartInterval (minutes) or restart_server. A rename leaves a .bak copy beside each changed file, even when it succeeds.
Suits developers who use a terminal coding agent such as Claude Code and want IDE-style navigation and safe symbol renames across a codebase without opening an IDE, in any language with a working LSP server. It runs entirely on your machine and needs no account. It is a poor fit if you cannot install language servers locally, or if you want the agent kept read-only, since the two rename tools rewrite source files by default unless dry_run is set. It is a community project, not published by any language or editor vendor.
find_definitionfind_referencesfind_implementationrename_symbolrename_symbol_strictget_diagnosticsget_hoverfind_workspace_symbolsprepare_call_hierarchyget_incoming_callsget_outgoing_callsrestart_server