VOOZH about

URL: https://glama.ai/mcp/servers/zhangpanda/gomcp?locale=de-DE

⇱ GoMCP by zhangpanda | Glama


GoMCP

πŸ‘ Go Version
πŸ‘ License
πŸ‘ Release
πŸ‘ gomcp MCP server

Die schnelle, idiomatische Art, MCP-Server in Go zu erstellen.

δΈ­ζ–‡ζ–‡ζ‘£


πŸš€ Schnelle Links


Related MCP server: Filesystem MCP Server

🎯 Was ist GoMCP?

GoMCP ist ein Framework zum Erstellen von Model Context Protocol (MCP) Servern β€” nicht nur ein SDK. Betrachten Sie es als "Gin fΓΌr MCP".

MCP ist das offene Protokoll, das es KI-Anwendungen (Claude Desktop, Cursor, Kiro, VS Code Copilot) ermΓΆglicht, externe Tools aufzurufen, Datenquellen zu lesen und Prompt-Vorlagen zu verwenden. GoMCP macht das Erstellen dieser Server trivial.

Warum GoMCP?

mcp-go (mark3labs)

Offizielles Go SDK

GoMCP

Ebene

SDK

SDK

Framework

Schema-Generierung

Manuell

jsonschema Tag

mcp Tag + automatische Validierung

Middleware

Einfache Hooks

Keine

VollstΓ€ndige Kette (Logger, Auth, RateLimit, OTel…)

Tool-Gruppen

Nein

Nein

Ja (user.get, admin.delete)

Gin-Routen importieren

Nein

Nein

βœ… Eine Zeile

OpenAPI/Swagger importieren

Nein

Nein

βœ… Eine Zeile

gRPC-Dienste importieren

Nein

Nein

βœ…

Integrierte Auth

Nein

Nein

Bearer, API Key, Basic + RBAC

Inspector UI

Nein

Nein

βœ…

Test-Utilities

Einfach

Nein

mcptest Paket


πŸ› οΈ Tech-Stack

Systemanforderungen

Anforderung

Version

Go

β‰₯ 1.25

MCP-Protokoll

2024-11-05 (abwΓ€rtskompatibel mit 2025-11-25)

KernabhΓ€ngigkeiten

Technologie

Beschreibung

Go Standardbibliothek

Kern-Framework β€” keine externen AbhΓ€ngigkeiten

Gin

Nur Adapter β€” importieren Sie bestehende Gin-Routen

gRPC

Nur Adapter β€” importieren Sie gRPC-Dienste

OpenTelemetry

Optional β€” verteiltes Tracing

YAML v3

Nur Provider β€” Hot-Reload von Tool-Definitionen


🌟 Kernfunktionen

πŸ”§ Tool-Entwicklung

  • Automatische Schema-Generierung via Struct-Tags β€” definieren Sie Parameter mit Go-Structs und mcp-Tags, JSON-Schema wird automatisch generiert

  • Typisierte Handler β€” func(*Context, Input) (Output, error) β€” kein manuelles Parsen von Parametern

  • Parameter-Validierung β€” required, min/max, enum, pattern β€” wird vor AusfΓΌhrung Ihres Handlers geprΓΌft

  • Komponenten-Versionierung β€” registrieren Sie mehrere Versionen, Clients rufen name@version auf

  • Asynchrone Aufgaben β€” lang laufende Tools geben eine Task-ID zurΓΌck, inklusive Polling und Abbruch

πŸ”Œ Adapter (Kern-Differenzierungsmerkmal)

  • Gin-Adapter β€” importieren Sie bestehende Gin-Routen als MCP-Tools mit einer Zeile

  • OpenAPI-Adapter β€” generieren Sie Tools aus Swagger/OpenAPI 3.x Dokumentationen

  • gRPC-Adapter β€” importieren Sie gRPC-Servicemethoden als MCP-Tools

πŸ” Sicherheit

  • BearerAuth β€” JWT-Token-Validierung

  • APIKeyAuth β€” API-Key-Validierung ΓΌber Header

  • BasicAuth β€” HTTP Basic Authentication

  • RequireRole / RequirePermission β€” RBAC-Autorisierung fΓΌr Tool-Gruppen

🧩 Framework-Funktionen

  • Middleware-Kette β€” Logger, Recovery, RequestID, Timeout, RateLimit, OpenTelemetry

  • Tool-Gruppen β€” organisieren Sie Tools mit PrΓ€fixen und Middleware auf Gruppenebene

  • Resource & Prompt β€” vollstΓ€ndige MCP-UnterstΓΌtzung inklusive URI-Templates und parametrisierten Prompts

  • Auto-VervollstΓ€ndigung β€” schlagen Sie Werte fΓΌr Prompt-/Ressourcen-Argumente vor

πŸš€ Produktionsbereit

  • Mehrere Transports β€” stdio (Claude Desktop, Cursor, Kiro) und Streamable HTTP mit SSE

  • MCP Inspector β€” integrierte Web-Debug-UI zum Durchsuchen und Testen von Tools

  • Hot-Reload β€” laden Sie Tool-Definitionen aus YAML-Dateien mit DateiΓΌberwachung

  • mcptest Paket β€” In-Memory-Client fΓΌr Unit-Tests mit Snapshot-UnterstΓΌtzung


πŸ—οΈ Architektur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ User Code β”‚
β”‚ s.Tool() / s.ToolFunc() / s.Resource() / s.Prompt() β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Framework Core β”‚
β”‚ Router β†’ Middleware Chain β†’ Validation β†’ Handler β†’ Result β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Schema β”‚ Validator β”‚ Adapters β”‚ Observability β”‚
β”‚ Generator β”‚ Engine β”‚ Gin/OpenAPI/ β”‚ OTel / Logger β”‚
β”‚ (mcp tags) β”‚ (auto) β”‚ gRPC β”‚ / Inspector β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Protocol Layer β”‚
β”‚ JSON-RPC 2.0 / MCP / Capability Negotiation β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Transport Layer β”‚
β”‚ stdio / Streamable HTTP + SSE β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Projektstruktur

gomcp/
β”œβ”€β”€ server.go # Server core, tool/resource/prompt registration
β”œβ”€β”€ context.go # Request context with typed accessors
β”œβ”€β”€ group.go # Tool groups with prefix naming
β”œβ”€β”€ middleware.go # Middleware interface and chain execution
β”œβ”€β”€ middleware_builtin.go # Logger, Recovery, RequestID, Timeout, RateLimit
β”œβ”€β”€ middleware_auth.go # BearerAuth, APIKeyAuth, BasicAuth, RBAC
β”œβ”€β”€ middleware_otel.go # OpenTelemetry tracing
β”œβ”€β”€ schema/ # struct tag β†’ JSON Schema generator + validator
β”œβ”€β”€ transport/ # stdio + Streamable HTTP
β”œβ”€β”€ adapter/ # Gin, OpenAPI, gRPC adapters
β”œβ”€β”€ mcptest/ # Testing utilities
β”œβ”€β”€ task.go # Async task support
β”œβ”€β”€ completion.go # Auto-completions
β”œβ”€β”€ inspector.go # Web debug UI
β”œβ”€β”€ provider.go # Hot-reload from YAML
└── examples/ # Working examples

πŸ“¦ Installation

go get github.com/zhangpanda/gomcp

⚑ Schnellstart

5 Zeilen bis zum funktionierenden MCP-Server

package main

import (
 "fmt"
 "github.com/zhangpanda/gomcp"
)

type SearchInput struct {
 Query string `json:"query" mcp:"required,desc=Search keyword"`
 Limit int `json:"limit" mcp:"default=10,min=1,max=100"`
}

type SearchResult struct {
 Items []string `json:"items"`
 Total int `json:"total"`
}

func main() {
 s := gomcp.New("my-server", "1.0.0")

 s.ToolFunc("search", "Search documents by keyword", func(ctx *gomcp.Context, in SearchInput) (SearchResult, error) {
 items := []string{fmt.Sprintf("Result for %q", in.Query)}
 return SearchResult{Items: items, Total: len(items)}, nil
 })

 s.Stdio()
}

Das SearchInput-Struct generiert automatisch dieses JSON-Schema:

{
 "type": "object",
 "properties": {
 "query": { "type": "string", "description": "Search keyword" },
 "limit": { "type": "integer", "default": 10, "minimum": 1, "maximum": 100 }
 },
 "required": ["query"]
}

UngΓΌltige Parameter werden abgelehnt, bevor Ihr Handler ausgefΓΌhrt wird:

validation failed: query: required; limit: must be <= 100

πŸ“– Nutzungsanleitung

Struct-Tag Referenz

Tag

Typ

Beschreibung

Beispiel

required

Flag

Feld muss bereitgestellt werden

mcp:"required"

desc

String

Menschlich lesbare Beschreibung

mcp:"desc=Suchbegriff"

default

beliebig

Standardwert

mcp:"default=10"

min

Zahl

Minimalwert (inklusiv)

mcp:"min=0"

max

Zahl

Maximalwert (inklusiv)

mcp:"max=100"

enum

String

Pipe-separierte erlaubte Werte

mcp:"enum=asc|desc"

pattern

String

Regex-Validierung

mcp:"pattern=^[a-z]+$"

Kombination: mcp:"required,desc=Benutzer-E-Mail,pattern=^[^@]+@[^@]+$"

UnterstΓΌtzte Typen: string, int, float64, bool, []T, verschachtelte Structs.

Tools

Einfacher Handler:

s.Tool("hello", "Say hello", func(ctx *gomcp.Context) (*gomcp.CallToolResult, error) {
 return ctx.Text("Hello, " + ctx.String("name")), nil
})

Typisierter Handler (empfohlen):

type Input struct {
 Name string `json:"name" mcp:"required,desc=User name"`
 Email string `json:"email" mcp:"required,pattern=^[^@]+@[^@]+$"`
}

s.ToolFunc("create_user", "Create user", func(ctx *gomcp.Context, in Input) (User, error) {
 return db.CreateUser(in.Name, in.Email)
})

Ressourcen

// Static
s.Resource("config://app", "App config", func(ctx *gomcp.Context) (any, error) {
 return map[string]any{"version": "1.0"}, nil
})

// Dynamic URI template
s.ResourceTemplate("db://{table}/{id}", "DB record", func(ctx *gomcp.Context) (any, error) {
 return db.Find(ctx.String("table"), ctx.String("id")), nil
})

Prompts

s.Prompt("code_review", "Code review",
 []gomcp.PromptArgument{gomcp.PromptArg("language", "Language", true)},
 func(ctx *gomcp.Context) ([]gomcp.PromptMessage, error) {
 return []gomcp.PromptMessage{
 gomcp.UserMsg(fmt.Sprintf("Review this %s code for bugs.", ctx.String("language"))),
 }, nil
 },
)

Middleware

s.Use(gomcp.Logger()) // Log tool name + duration
s.Use(gomcp.Recovery()) // Recover from panics
s.Use(gomcp.RequestID()) // Unique request ID
s.Use(gomcp.Timeout(10 * time.Second)) // Deadline enforcement
s.Use(gomcp.RateLimit(100)) // 100 calls/minute
s.Use(gomcp.OpenTelemetry()) // Distributed tracing
s.Use(gomcp.BearerAuth(tokenValidator)) // JWT auth
s.Use(gomcp.APIKeyAuth("X-API-Key", keyValidator)) // API key auth

Benutzerdefinierte Middleware:

func AuditLog() gomcp.Middleware {
 return func(ctx *gomcp.Context, next func() error) error {
 start := time.Now()
 err := next()
 log.Printf("tool=%s duration=%s err=%v", ctx.String("_tool_name"), time.Since(start), err)
 return err
 }
}

Tool-Gruppen

user := s.Group("user", authMiddleware)
user.Tool("get", "Get user", getUser) // β†’ user.get
user.Tool("update", "Update user", updateUser) // β†’ user.update

admin := user.Group("admin", gomcp.RequireRole("admin"))
admin.Tool("delete", "Delete user", deleteUser) // β†’ user.admin.delete

Adapter

Gin β€” eine Zeile zum Importieren Ihrer bestehenden API:

adapter.ImportGin(s, ginRouter, adapter.ImportOptions{
 IncludePaths: []string{"/api/v1/"},
})
// GET /api/v1/users/:id β†’ Tool get_api_v1_users_by_id (id = required param)

OpenAPI β€” Generierung aus Swagger-Dokumentationen:

adapter.ImportOpenAPI(s, "./swagger.yaml", adapter.OpenAPIOptions{
 TagFilter: []string{"pets"},
 ServerURL: "https://api.example.com",
})

gRPC:

adapter.ImportGRPC(s, grpcConn, adapter.GRPCOptions{
 Services: []string{"user.UserService"},
})

Komponenten-Versionierung

s.ToolFunc("search", "v1", searchV1, gomcp.Version("1.0"))
s.ToolFunc("search", "v2 with embeddings", searchV2, gomcp.Version("2.0"))
// "search" β†’ latest, "search@1.0" β†’ exact version

Asynchrone Aufgaben

s.AsyncTool("report", "Generate report", func(ctx *gomcp.Context) (*gomcp.CallToolResult, error) {
 // long-running work
 return ctx.Text("done"), nil
})
// Client gets taskId immediately, polls tasks/get, can tasks/cancel

Hot-Reload

s.LoadDir("./tools/", gomcp.DirOptions{Watch: true})

MCP Inspector

s.Dev(":9090") // http://localhost:9090 β€” browse and test all tools

Testen

func TestSearch(t *testing.T) {
 c := mcptest.NewClient(t, setupServer())
 c.Initialize()

 result := c.CallTool("search", map[string]any{"query": "golang"})
 result.AssertNoError(t)
 result.AssertContains(t, "golang")

 mcptest.MatchSnapshot(t, "search_result", result)
}

Transports

s.Stdio() // Claude Desktop, Cursor, Kiro
s.HTTP(":8080") // Remote deployment with SSE
s.Handler() // Embed in existing HTTP server

Verwendung mit KI-Clients

{
 "mcpServers": {
 "my-server": {
 "command": "/path/to/your/binary"
 }
 }
}

Funktioniert mit Claude Desktop, Cursor, Kiro, Windsurf, VS Code Copilot und jedem MCP-kompatiblen Client.


πŸ“‹ Roadmap

  • [x] Kern: Tool, Resource, Prompt mit vollstΓ€ndiger MCP-Protokoll-UnterstΓΌtzung

  • [x] Automatische Schema-Generierung via Struct-Tags + Parameter-Validierung

  • [x] Middleware-Kette (Logger, Recovery, RateLimit, Timeout, RequestID)

  • [x] Auth-Middleware (Bearer / API Key / Basic) + RBAC-Autorisierung

  • [x] Tool-Gruppen mit PrΓ€fix-Benennung und verschachtelten Gruppen

  • [x] stdio + Streamable HTTP Transports mit SSE-Benachrichtigungen

  • [x] Gin-Adapter β€” Importieren bestehender Gin-Routen als MCP-Tools

  • [x] OpenAPI-Adapter β€” Generierung von Tools aus Swagger/OpenAPI-Dokumentationen

  • [x] gRPC-Adapter β€” Importieren von gRPC-Diensten als MCP-Tools

  • [x] OpenTelemetry-Integration

  • [x] mcptest Paket mit Snapshot-Tests

  • [x] Komponenten-Versionierung + Deprecation

  • [x] Asynchrone Aufgaben mit Polling und Abbruch

  • [x] MCP Inspector Web-Debug-UI

  • [x] Hot-Reload-Provider aus YAML

  • [x] Auto-VervollstΓ€ndigung fΓΌr Prompt-/Ressourcen-Argumente


🀝 Feedback & Support

πŸ’‘ Empfohlene LektΓΌre: How To Ask Questions The Smart Way


πŸ”’ Sicherheit

Um SicherheitslΓΌcken zu melden, siehe SECURITY.md.


βš–οΈ Copyright & Lizenz

Copyright Β© 2026 GoMCP Contributors

Lizenziert unter der Apache License 2.0.

Wichtige Hinweise

  1. Dieses Projekt ist Open Source und kostenlos fΓΌr den persΓΆnlichen sowie kommerziellen Gebrauch unter der Apache 2.0 Lizenz.

  2. Sie mΓΌssen den Copyright-Hinweis, den Lizenztext und alle Attributionshinweise in allen Kopien oder wesentlichen Teilen der Software beibehalten.

  3. Die Apache 2.0 Lizenz beinhaltet eine ausdrΓΌckliche GewΓ€hrung von Patentrechten von den Mitwirkenden an die Nutzer.

  4. BeitrΓ€ge zu diesem Projekt werden unter derselben Apache 2.0 Lizenz lizenziert.

  5. Das unbefugte Entfernen von Copyright-Hinweisen kann rechtliche Schritte nach sich ziehen.

Patent-Hinweis

Bestimmte Funktionen dieses Frameworks (Struct-Tag Schema-Generierung, HTTP-zu-MCP automatischer Adapter, OpenAPI-zu-MCP automatischer Adapter) sind Gegenstand anhΓ€ngiger Patentanmeldungen. Die Apache 2.0 Lizenz gewΓ€hrt Ihnen eine unbefristete, weltweite, lizenzgebΓΌhrenfreie Patentlizenz zur Nutzung dieser Funktionen als Teil dieser Software.


⭐ Star History

Wenn Sie GoMCP nΓΌtzlich finden, geben Sie dem Projekt bitte einen Stern! Es hilft anderen, das Projekt zu entdecken.

A
license - permissive license
A
quality
A
maintenance

Maintenance

–Maintainers
<1hResponse time
6dRelease cycle
3Releases (12mo)
Commit activity

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zhangpanda/gomcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server