A Model Context Protocol (MCP) server that provides Go language tools for LLMs to analyze, test, and format Go code.
The Model Context Protocol (MCP) is a standardized way for applications to provide context to Large Language Models (LLMs). Learn more at the Model Context Protocol Website.
- TypeScript implementation with strict type checking
- Full set of Go code analysis tools:
go_find_dead_code: Find unused code in Go projectsgo_vet: Run Go's static analyzergo_format: Format Go codego_lint: Run Go lintinggo_test: Run Go testsgo_mod_tidy: Clean up Go module dependencies
- Comprehensive error handling and validation
- Passes tool output directly to the LLM
- Node.js 18 or later
- npm or yarn
- Go 1.18 or later
- The following Go tools installed:
golint:go install golang.org/x/lint/golint@latestdeadcode:go install github.com/remyoudompheng/go-misc/deadcode@latest
mcp-golang/ ├── build/ # Compiled JavaScript files ├── cmd/ # Example Go code for testing │ └── example/ # Simple Go application ├── src/ │ ├── __tests__/ # Integration tests and test utilities │ ├── errors/ # Custom error classes │ ├── tools/ # MCP tool implementations │ │ ├── goTools.ts # Go tools for LLM │ │ └── noteTools.ts # Example note tools │ ├── types/ # TypeScript type definitions │ └── index.ts # Main server entry point ├── package.json # Project configuration ├── tsconfig.json # TypeScript configuration └── README.md # Project documentation-
Clone the repository:
git clone https://github.com/Rethunk-Tech/mcp-golang.git cd mcp-golang -
Install dependencies:
yarn install
-
Build and run the server:
yarn build yarn start
- Start TypeScript compiler in watch mode:
yarn dev - Lint your code:
yarn lint - Fix linting issues:
yarn lint:fix - Run tests:
yarn test
For standalone testing, use the MCP Inspector tool:
yarn inspectorThis will open an interactive session where you can test your MCP tools.
go_find_dead_code({ wd: "/path/to/go/project", path: "./..." })Finds unused code in Go projects.
| Parameter | Type | Description | Default |
|---|---|---|---|
wd | string | Working directory where the command will be executed | (required) |
path | string | Path pattern to analyze (e.g., "./...", "./pkg/...", specific file) | "./..." |
go_vet({ wd: "/path/to/go/project", path: "./..." })Runs Go's built-in static analyzer to find potential issues.
| Parameter | Type | Description | Default |
|---|---|---|---|
wd | string | Working directory where the command will be executed | (required) |
path | string | Path pattern to analyze (e.g., "./...", "./pkg/...", specific file) | "./..." |
go_format({ wd: "/path/to/go/project", path: "./...", write: true })Formats Go code. Set write to true to modify files directly.
| Parameter | Type | Description | Default |
|---|---|---|---|
wd | string | Working directory where the command will be executed | (required) |
path | string | Path pattern of files to format (e.g., "./...", "./pkg/...", specific file) | "./..." |
write | boolean | Whether to write changes directly to the source files (true) or just output the diff (false) | false |
go_lint({ wd: "/path/to/go/project", path: "./..." })Runs the Go linter to check for style and potential issues.
| Parameter | Type | Description | Default |
|---|---|---|---|
wd | string | Working directory where the command will be executed | (required) |
path | string | Path pattern to lint (e.g., "./...", "./pkg/...", specific file) | "./..." |
go_test({ wd: "/path/to/go/project", path: "./..." })Runs Go tests with verbose output.
| Parameter | Type | Description | Default |
|---|---|---|---|
wd | string | Working directory where the command will be executed | (required) |
path | string | Path pattern for tests to run (e.g., "./...", "./pkg/...", specific package) | "./..." |
go_mod_tidy({ wd: "/path/to/go/project" })Cleans up Go module dependencies.
| Parameter | Type | Description | Default |
|---|---|---|---|
wd | string | Working directory where the command will be executed (should contain go.mod file) | (required) |
To integrate this MCP server with Cursor or Claude Desktop, add the following configuration to your mcp.json file:
{ "mcpServers": { "mcp-golang": { "command": "cmd", "args": [ "/c", "node C:\\path\\to\\mcp-golang\\build\\index.js" ], "enabled": true } } }Make sure to replace C:\\path\\to\\mcp-golang with the actual path to your installation, using double backslashes for Windows paths.
You can then access the tools in Cursor or Claude Desktop with the following names:
mcp_go_find_dead_codemcp_go_vetmcp_go_formatmcp_go_lintmcp_go_testmcp_go_mod_tidy
See CONTRIBUTING.md for guidelines on how to contribute to this project.
MIT