Go-Mcp-Server
Go-Mcp-Server is an code AI skill with a core value of Best practices and patterns for building Model Context Protocol (MCP) servers in Go using the official github. It
helps developers solve real-world problems in the code domain, boosting
efficiency, automating repetitive tasks, and optimizing workflows.
Best practices and patterns for building Model Context Protocol (MCP) servers in Go using the official github.com/modelcontextprotocol/go-sdk package.
Quick Facts
mkdir -p ./skills/go-mcp-server && curl -sfL https://raw.githubusercontent.com/github/awesome-copilot/main/skills/go-mcp-server/SKILL.md -o ./skills/go-mcp-server/SKILL.md Run in terminal / PowerShell. Requires curl (Unix) or PowerShell 5+ (Windows).
Skill Content
# Go MCP Server Development Guidelines
When building MCP servers in Go, follow these best practices and patterns using the official Go SDK.
Server Setup
Create an MCP server using `mcp.NewServer`:
import "github.com/modelcontextprotocol/go-sdk/mcp"
server := mcp.NewServer(
&mcp.Implementation{
Name: "my-server",
Version: "v1.0.0",
},
nil, // or provide mcp.Options
)Adding Tools
Use `mcp.AddTool` with struct-based input and output for type safety:
type ToolInput struct {
Query string `json:"query" jsonschema:"the search query"`
Limit int `json:"limit,omitempty" jsonschema:"maximum results to return"`
}
type ToolOutput struct {
Results []string `json:"results" jsonschema:"list of search results"`
Count int `json:"count" jsonschema:"number of results found"`
}
func SearchTool(ctx context.Context, req *mcp.CallToolRequest, input ToolInput) (
*mcp.CallToolResult,
ToolOutput,
error,
) {
// Implement tool logic
results := performSearch(ctx, input.Query, input.Limit)
return nil, ToolOutput{
Results: results,
Count: len(results),
}, nil
}
// Register the tool
mcp.AddTool(server,
&mcp.Tool{
Name: "search",
Description: "Search for information",
},
SearchTool,
)Adding Resources
Use `mcp.AddResource` for providing accessible data:
func GetResource(ctx context.Context, req *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) {
content, err := loadResourceContent(ctx, req.URI)
if err != nil {
return nil, err
}
return &mcp.ReadResourceResult{
Contents: []any{
&mcp.TextResourceContents{
ResourceContents: mcp.ResourceContents{
URI: req.URI,
MIMEType: "text/plain",
},
Text: content,
},
},
}, nil
}
mcp.AddResource(server,
&mcp.Resource{
URI: "file:///data/example.txt",
Name: "Example Data",
Description: "Example resource data",
MIMEType: "text/plain",
},
GetResource,
)Adding Prompts
Use `mcp.AddPrompt` for reusable prompt templates:
type PromptInput struct {
Topic string `json:"topic" jsonschema:"the topic to analyze"`
}
func AnalyzePrompt(ctx context.Context, req *mcp.GetPromptRequest, input PromptInput) (
*mcp.GetPromptResult,
error,
) {
return &mcp.GetPromptResult{
Description: "Analyze the given topic",
Messages: []mcp.PromptMessage{
{
Role: mcp.RoleUser,
Content: mcp.TextContent{
Text: fmt.Sprintf("Analyze this topic: %s", input.Topic),
},
},
},
}, nil
}
mcp.AddPrompt(server,
&mcp.Prompt{
Name: "analyze",
Description: "Analyze a topic",
Arguments: []mcp.PromptArgument{
{
Name: "topic",
Description: "The topic to analyze",
Required: true,
},
},
},
AnalyzePrompt,
)Transport Configuration
Stdio Transport
For communication over stdin/stdout (most common for desktop integrations):
if err := server.Run(ctx, &mcp.StdioTransport{}); err != nil {
log.Fatal(err)
}HTTP Transport
For HTTP-based communication:
import "github.com/modelcontextprotocol/go-sdk/mcp"
transport := &mcp.HTTPTransport{
Addr: ":8080",
// Optional: configure TLS, timeouts, etc.
}
if err := server.Run(ctx, transport); err != nil {
log.Fatal(err)
}Error Handling
Always return proper errors and use context for cancellation:
func MyTool(ctx context.Context, req *mcp.CallToolRequest, input MyInput) (
*mcp.CallToolResult,
MyOutput,
error,
) {
// Check context cancellation
if ctx.Err() != n🎯 Best For
- UI designers
- Product designers
- Claude users
- GitHub Copilot users
- Software engineers
💡 Use Cases
- Generating component mockups
- Creating design system tokens
- Code quality improvement
- Best practice enforcement
📖 How to Use This Skill
- 1
Install the Skill
Copy the install command from the Terminal tab and run it. The SKILL.md file downloads to your local skills directory.
- 2
Load into Your AI Assistant
Open Claude or GitHub Copilot and reference the skill. Paste the SKILL.md content or use the system prompt tab.
- 3
Apply Go-Mcp-Server to Your Work
Open your project in the AI assistant and ask it to apply the skill. Start with a small module to verify the output quality.
- 4
Review and Refine
Review AI suggestions before committing. Run tests, check for regressions, and iterate on the skill output.
❓ Frequently Asked Questions
Does this work with Figma?
Some design skills integrate with Figma plugins. Check the Works With section for supported tools.
Is Go-Mcp-Server compatible with Cursor and VS Code?
Yes — this skill works with any AI coding assistant including Cursor, VS Code with Copilot, and JetBrains IDEs.
Do I need specific dependencies for Go-Mcp-Server?
Check the install command and Works With section. Most code skills only require the AI assistant and your codebase.
How do I install Go-Mcp-Server?
Copy the install command from the Terminal tab and run it. The skill downloads to ./skills/go-mcp-server/SKILL.md, ready to use.
Can I customize this skill for my team?
Absolutely. Edit the SKILL.md file to add team-specific instructions, examples, or workflows.
⚠️ Common Mistakes to Avoid
Skipping usability testing
AI-generated designs should be validated with real users before development.
Skipping validation
Always test AI-generated code changes, even for simple refactors.
Missing dependency updates
Check if the skill requires updated dependencies or new packages.