An open API service indexing awesome lists of open source software.

https://github.com/MCP-Mirror/AndrewDonelson_go-mcp-server-service

Mirror of https://github.com/AndrewDonelson/go-mcp-server-service
https://github.com/MCP-Mirror/AndrewDonelson_go-mcp-server-service

Last synced: about 2 months ago
JSON representation

Mirror of https://github.com/AndrewDonelson/go-mcp-server-service

Awesome Lists containing this project

README

          

# 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

### 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

## 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):

```bash
# 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):

```bash
# Build all components for all platforms
make release-all

# Build for specific platform
make release-windows
make release-linux
make release-darwin
```

Run locally:

```bash
# Run command-line interface
make run-cmd

# Run service
make run-service
```

View all available targets:

```bash
make help
```

### Build Output

Binaries are created in the `bin` directory:

- Development builds: `bin/dev//`
- Release builds: `bin/release//`

## 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

```json
{
"mcpServers": {
"notes-server": {
"command": "./bin/dev//notes-server",
"args": []
}
}
}
```

#### Release Configuration (Service Example)

```json
{
"mcpServers": {
"notes-server": {
"command": "./bin/release//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](https://github.com/modelcontextprotocol/inspector) for debugging:

```bash
npx @modelcontextprotocol/inspector ./bin/dev//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