go-mcp-server-service
A JSON-RPC 2.0 compliant server implementing the Model Context Protocol (MCP) for note management (as an example)
This is an example. You can modify this and use as a Boilerplate for your own project. It supports cross-platform development and includes a command-line interface and service component for both development and release builds.
Features
- JSON-RPC 2.0 compliant API
- Cross-platform support (Windows, Linux, macOS)
- Thread-safe note management
- Development and release build configurations
- Service and command-line interface components
Components
Command Line Interface (cmd
)
The command-line interface provides direct access to the notes server functionality.
Service (service
)
The service component enables system-level integration and background operation.
Resources
The server implements a note storage system with:
- Custom
note://
URI scheme for accessing individual notes - Resource metadata including name, description, and MIME type
- Thread-safe concurrent access
Prompts
Available prompts:
summarize-notes
: Creates summaries of all stored notes- Optional
style
argument ("brief"/"detailed") - Combines all current notes with style preference
- Thread-safe note access
- Optional
Tools
Available tools:
add-note
: Adds a new note to the server- Required arguments:
name
(string),content
(string) - Thread-safe state updates
- Returns confirmation message
- Required arguments:
Building
Prerequisites
- Go 1.21 or later
- GNU Make or compatible build tool
- Git (for version information)
Build Commands
Development builds (includes debug symbols and race detection):
# Build all components for all platforms
make dev
# Build for specific platform
make dev-windows
make dev-linux
make dev-darwin
# Build specific components
make build-cmd
make build-service
Release builds (optimized and stripped):
# Build all components for all platforms
make release-all
# Build for specific platform
make release-windows
make release-linux
make release-darwin
Run locally:
# Run command-line interface
make run-cmd
# Run service
make run-service
View all available targets:
make help
Build Output
Binaries are created in the bin
directory:
- Development builds:
bin/dev/<platform>/
- Release builds:
bin/release/<platform>/
Configuration
Claude Desktop Integration
Configure the notes server in Claude Desktop's configuration file:
Location
- MacOS:
~/Library/Application\ Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%/Claude/claude_desktop_config.json
Development Configuration
{
"mcpServers": {
"notes-server": {
"command": "./bin/dev/<platform>/notes-server",
"args": []
}
}
}
Release Configuration (Service Example)
{
"mcpServers": {
"notes-server": {
"command": "./bin/release/<platform>/notes-service",
"args": []
}
}
}
Development
Project Structure
.
├── cmd/ # Command-line interface
├── service/ # Service implementation
├── internal/
│ └── server/ # Core server implementation
│ ├── operations.go # Server operations
│ ├── server.go # Main server logic
│ └── types.go # Type definitions
├── Makefile # Build configuration
└── README.md
Debugging
Since the server runs over stdio, we recommend using the MCP Inspector for debugging:
npx @modelcontextprotocol/inspector ./bin/dev/<platform>/notes-server
The Inspector will provide a URL for the debugging interface.
Error Codes
The server implements standard JSON-RPC 2.0 error codes plus custom codes:
| Code | Description | Standard | | ------ | --------------------- | -------- | | -32700 | Parse error | Yes | | -32600 | Invalid request | Yes | | -32601 | Method not found | Yes | | -32602 | Invalid params | Yes | | -32603 | Internal error | Yes | | -32001 | Resource not found | No | | -32002 | Unsupported operation | No |
License
MIT License
Copyright (c) 2024 Andrew Lee Donelson