{"id":"4e1ab2ee-0923-4d88-a2b7-ddb5f070425b","shortId":"HzmYEF","kind":"skill","title":"go-mcp-server-generator","tagline":"Generate a complete Go MCP server project with proper structure, dependencies, and implementation using the official github.com/modelcontextprotocol/go-sdk.","description":"# Go MCP Server Project Generator\n\nGenerate a complete, production-ready Model Context Protocol (MCP) server project in Go.\n\n## Project Requirements\n\nYou will create a Go MCP server with:\n\n1. **Project Structure**: Proper Go module layout\n2. **Dependencies**: Official MCP SDK and necessary packages\n3. **Server Setup**: Configured MCP server with transports\n4. **Tools**: At least 2-3 useful tools with typed inputs/outputs\n5. **Error Handling**: Proper error handling and context usage\n6. **Documentation**: README with setup and usage instructions\n7. **Testing**: Basic test structure\n\n## Template Structure\n\n```\nmyserver/\n├── go.mod\n├── go.sum\n├── main.go\n├── tools/\n│   ├── tool1.go\n│   └── tool2.go\n├── resources/\n│   └── resource1.go\n├── config/\n│   └── config.go\n├── README.md\n└── main_test.go\n```\n\n## go.mod Template\n\n```go\nmodule github.com/yourusername/{{PROJECT_NAME}}\n\ngo 1.23\n\nrequire (\n    github.com/modelcontextprotocol/go-sdk v1.0.0\n)\n```\n\n## main.go Template\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"log\"\n    \"os\"\n    \"os/signal\"\n    \"syscall\"\n\n    \"github.com/modelcontextprotocol/go-sdk/mcp\"\n    \"github.com/yourusername/{{PROJECT_NAME}}/config\"\n    \"github.com/yourusername/{{PROJECT_NAME}}/tools\"\n)\n\nfunc main() {\n    cfg := config.Load()\n    \n    ctx, cancel := context.WithCancel(context.Background())\n    defer cancel()\n\n    // Handle graceful shutdown\n    sigCh := make(chan os.Signal, 1)\n    signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)\n    go func() {\n        <-sigCh\n        log.Println(\"Shutting down...\")\n        cancel()\n    }()\n\n    // Create server\n    server := mcp.NewServer(\n        &mcp.Implementation{\n            Name:    cfg.ServerName,\n            Version: cfg.Version,\n        },\n        &mcp.Options{\n            Capabilities: &mcp.ServerCapabilities{\n                Tools:     &mcp.ToolsCapability{},\n                Resources: &mcp.ResourcesCapability{},\n                Prompts:   &mcp.PromptsCapability{},\n            },\n        },\n    )\n\n    // Register tools\n    tools.RegisterTools(server)\n\n    // Run server\n    transport := &mcp.StdioTransport{}\n    if err := server.Run(ctx, transport); err != nil {\n        log.Fatalf(\"Server error: %v\", err)\n    }\n}\n```\n\n## tools/tool1.go Template\n\n```go\npackage tools\n\nimport (\n    \"context\"\n    \"fmt\"\n\n    \"github.com/modelcontextprotocol/go-sdk/mcp\"\n)\n\ntype Tool1Input struct {\n    Param1 string `json:\"param1\" jsonschema:\"required,description=First parameter\"`\n    Param2 int    `json:\"param2,omitempty\" jsonschema:\"description=Optional second parameter\"`\n}\n\ntype Tool1Output struct {\n    Result string `json:\"result\" jsonschema:\"description=The result of the operation\"`\n    Status string `json:\"status\" jsonschema:\"description=Operation status\"`\n}\n\nfunc Tool1Handler(ctx context.Context, req *mcp.CallToolRequest, input Tool1Input) (\n    *mcp.CallToolResult,\n    Tool1Output,\n    error,\n) {\n    // Validate input\n    if input.Param1 == \"\" {\n        return nil, Tool1Output{}, fmt.Errorf(\"param1 is required\")\n    }\n\n    // Check context\n    if ctx.Err() != nil {\n        return nil, Tool1Output{}, ctx.Err()\n    }\n\n    // Perform operation\n    result := fmt.Sprintf(\"Processed: %s\", input.Param1)\n\n    return nil, Tool1Output{\n        Result: result,\n        Status: \"success\",\n    }, nil\n}\n\nfunc RegisterTool1(server *mcp.Server) {\n    mcp.AddTool(server,\n        &mcp.Tool{\n            Name:        \"tool1\",\n            Description: \"Description of what tool1 does\",\n        },\n        Tool1Handler,\n    )\n}\n```\n\n## tools/registry.go Template\n\n```go\npackage tools\n\nimport \"github.com/modelcontextprotocol/go-sdk/mcp\"\n\nfunc RegisterTools(server *mcp.Server) {\n    RegisterTool1(server)\n    RegisterTool2(server)\n    // Register additional tools here\n}\n```\n\n## config/config.go Template\n\n```go\npackage config\n\nimport \"os\"\n\ntype Config struct {\n    ServerName string\n    Version    string\n    LogLevel   string\n}\n\nfunc Load() *Config {\n    return &Config{\n        ServerName: getEnv(\"SERVER_NAME\", \"{{PROJECT_NAME}}\"),\n        Version:    getEnv(\"VERSION\", \"v1.0.0\"),\n        LogLevel:   getEnv(\"LOG_LEVEL\", \"info\"),\n    }\n}\n\nfunc getEnv(key, defaultValue string) string {\n    if value := os.Getenv(key); value != \"\" {\n        return value\n    }\n    return defaultValue\n}\n```\n\n## main_test.go Template\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"testing\"\n\n    \"github.com/yourusername/{{PROJECT_NAME}}/tools\"\n)\n\nfunc TestTool1Handler(t *testing.T) {\n    ctx := context.Background()\n    input := tools.Tool1Input{\n        Param1: \"test\",\n        Param2: 42,\n    }\n\n    result, output, err := tools.Tool1Handler(ctx, nil, input)\n    if err != nil {\n        t.Fatalf(\"Tool1Handler failed: %v\", err)\n    }\n\n    if output.Status != \"success\" {\n        t.Errorf(\"Expected status 'success', got '%s'\", output.Status)\n    }\n\n    if result != nil {\n        t.Error(\"Expected result to be nil\")\n    }\n}\n```\n\n## README.md Template\n\n```markdown\n# {{PROJECT_NAME}}\n\nA Model Context Protocol (MCP) server built with Go.\n\n## Description\n\n{{PROJECT_DESCRIPTION}}\n\n## Installation\n\n\\`\\`\\`bash\ngo mod download\ngo build -o {{PROJECT_NAME}}\n\\`\\`\\`\n\n## Usage\n\nRun the server with stdio transport:\n\n\\`\\`\\`bash\n./{{PROJECT_NAME}}\n\\`\\`\\`\n\n## Configuration\n\nConfigure via environment variables:\n\n- `SERVER_NAME`: Server name (default: \"{{PROJECT_NAME}}\")\n- `VERSION`: Server version (default: \"v1.0.0\")\n- `LOG_LEVEL`: Logging level (default: \"info\")\n\n## Available Tools\n\n### tool1\n{{TOOL1_DESCRIPTION}}\n\n**Input:**\n- `param1` (string, required): First parameter\n- `param2` (int, optional): Second parameter\n\n**Output:**\n- `result` (string): Operation result\n- `status` (string): Status of the operation\n\n## Development\n\nRun tests:\n\n\\`\\`\\`bash\ngo test ./...\n\\`\\`\\`\n\nBuild:\n\n\\`\\`\\`bash\ngo build -o {{PROJECT_NAME}}\n\\`\\`\\`\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\nWhen generating a Go MCP server:\n\n1. **Initialize Module**: Create `go.mod` with proper module path\n2. **Structure**: Follow the template directory structure\n3. **Type Safety**: Use structs with JSON schema tags for all inputs/outputs\n4. **Error Handling**: Validate inputs, check context, wrap errors\n5. **Documentation**: Add clear descriptions and examples\n6. **Testing**: Include at least one test per tool\n7. **Configuration**: Use environment variables for config\n8. **Logging**: Use structured logging (log/slog)\n9. **Graceful Shutdown**: Handle signals properly\n10. **Transport**: Default to stdio, document alternatives\n\n## Best Practices\n\n- Keep tools focused and single-purpose\n- Use descriptive names for types and functions\n- Include JSON schema documentation in struct tags\n- Always respect context cancellation\n- Return descriptive errors\n- Keep main.go minimal, logic in packages\n- Write tests for tool handlers\n- Document all exported functions","tags":["mcp","server","generator","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"capabilities":["skill","source-github","skill-go-mcp-server-generator","topic-agent-skills","topic-agents","topic-awesome","topic-custom-agents","topic-github-copilot","topic-hacktoberfest","topic-prompt-engineering"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/go-mcp-server-generator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add github/awesome-copilot","source_repo":"https://github.com/github/awesome-copilot","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 33270 github stars · SKILL.md body (6,823 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:13.318Z","embedding":null,"createdAt":"2026-04-18T20:26:11.451Z","updatedAt":"2026-05-18T18:52:13.318Z","lastSeenAt":"2026-05-18T18:52:13.318Z","tsv":"'-3':82 '/config':160 '/modelcontextprotocol/go-sdk':139 '/modelcontextprotocol/go-sdk.':24 '/modelcontextprotocol/go-sdk/mcp':154,244,359 '/tools':166,436 '/yourusername/':131,157,163,433 '1':54,184,593 '1.23':135 '10':665 '2':61,81,602 '3':69,609 '4':77,621 '42':448 '5':88,630 '6':97,637 '7':105,646 '8':653 '9':659 'add':632 'addit':369 'altern':671 'alway':695 'avail':543 'bash':501,517,573,577 'basic':107 'best':672 'build':506,576,579 'built':494 'cancel':172,176,195,698 'capabl':206 'cfg':169 'cfg.servername':202 'cfg.version':204 'chan':182 'check':311,626 'clear':633 'complet':8,32 'config':121,376,380,390,392,652 'config.go':122 'config.load':170 'config/config.go':372 'configur':72,520,521,647 'context':37,95,147,240,312,429,490,627,697 'context.background':174,442 'context.context':292 'context.withcancel':173 'creat':48,196,596 'ctx':171,225,291,441,453 'ctx.err':314,319 'default':529,535,541,667 'defaultvalu':411,422 'defer':175 'depend':16,62 'descript':254,263,275,286,344,345,497,499,547,634,682,700 'develop':570 'directori':607 'document':98,631,670,691,713 'download':504 'environ':523,649 'err':223,227,233,451,457,463 'error':89,92,231,299,622,629,701 'exampl':636 'expect':468,478 'export':715 'fail':461 'first':255,552 'fmt':241 'fmt.errorf':307 'fmt.sprintf':323 'focus':676 'follow':604 'func':167,190,289,335,360,388,408,437 'function':687,716 'generat':5,6,29,30,585,588 'getenv':394,400,404,409 'github.com':23,130,138,153,156,162,243,358,432 'github.com/modelcontextprotocol/go-sdk':137 'github.com/modelcontextprotocol/go-sdk.':22 'github.com/modelcontextprotocol/go-sdk/mcp':152,242,357 'github.com/yourusername/':129,155,161,431 'go':2,9,25,43,50,58,127,134,143,189,236,353,374,425,496,502,505,574,578,590 'go-mcp-server-gener':1 'go.mod':113,125,597 'go.sum':114 'got':471 'grace':178,660 'handl':90,93,177,623,662 'handler':712 'implement':18 'import':146,239,356,377,428 'includ':639,688 'info':407,542 'initi':594 'input':295,301,443,455,548,625 'input.param1':303,326 'inputs/outputs':87,620 'instal':500 'instruct':104,586 'int':258,555 'json':250,259,272,283,615,689 'jsonschema':252,262,274,285 'keep':674,702 'key':410,417 'layout':60 'least':80,641 'level':406,538,540 'licens':583 'load':389 'log':148,405,537,539,654,657 'log.fatalf':229 'log.println':192 'log/slog':658 'logic':705 'loglevel':386,403 'main':145,168,427 'main.go':115,141,703 'main_test.go':124,423 'make':181 'markdown':485 'mcp':3,10,26,39,51,64,73,492,591 'mcp.addtool':339 'mcp.calltoolrequest':294 'mcp.calltoolresult':297 'mcp.implementation':200 'mcp.newserver':199 'mcp.options':205 'mcp.promptscapability':213 'mcp.resourcescapability':211 'mcp.server':338,363 'mcp.servercapabilities':207 'mcp.stdiotransport':221 'mcp.tool':341 'mcp.toolscapability':209 'minim':704 'mit':584 'mod':503 'model':36,489 'modul':59,128,595,600 'myserv':112 'name':133,159,165,201,342,396,398,435,487,509,519,526,528,531,582,683 'necessari':67 'nil':228,305,315,317,328,334,454,458,476,482 'o':507,580 'offici':21,63 'omitempti':261 'one':642 'oper':280,287,321,562,569 'option':264,556 'os':149,378 'os.getenv':416 'os.interrupt':187 'os.signal':183 'os/signal':150 'output':450,559 'output.status':465,473 'packag':68,144,237,354,375,426,707 'param1':248,251,308,445,549 'param2':257,260,447,554 'paramet':256,266,553,558 'path':601 'per':644 'perform':320 'practic':673 'process':324 'product':34 'production-readi':33 'project':12,28,41,44,55,132,158,164,397,434,486,498,508,518,530,581 'prompt':212 'proper':14,57,91,599,664 'protocol':38,491 'purpos':680 'readi':35 'readm':99 'readme.md':123,483 'regist':214,368 'registertool':361 'registertool1':336,364 'registertool2':366 'req':293 'requir':45,136,253,310,551 'resourc':119,210 'resource1.go':120 'respect':696 'result':270,273,277,322,330,331,449,475,479,560,563 'return':304,316,327,391,419,421,699 'run':218,511,571 'safeti':611 'schema':616,690 'sdk':65 'second':265,557 'server':4,11,27,40,52,70,74,197,198,217,219,230,337,340,362,365,367,395,493,513,525,527,533,592 'server.run':224 'servernam':382,393 'setup':71,101 'shut':193 'shutdown':179,661 'sigch':180,186,191 'signal':663 'signal.notify':185 'singl':679 'single-purpos':678 'skill' 'skill-go-mcp-server-generator' 'source-github' 'status':281,284,288,332,469,564,566 'stdio':515,669 'string':249,271,282,383,385,387,412,413,550,561,565 'struct':247,269,381,613,693 'structur':15,56,109,111,603,608,656 'success':333,466,470 'syscal':151 'syscall.sigterm':188 't.error':477 't.errorf':467 't.fatalf':459 'tag':617,694 'templat':110,126,142,235,352,373,424,484,606 'test':106,108,430,446,572,575,638,643,709 'testing.t':440 'testtool1handler':438 'tool':78,84,116,208,215,238,355,370,544,645,675,711 'tool1':343,348,545,546 'tool1.go':117 'tool1handler':290,350,460 'tool1input':246,296 'tool1output':268,298,306,318,329 'tool2.go':118 'tools.registertools':216 'tools.tool1handler':452 'tools.tool1input':444 'tools/registry.go':351 'tools/tool1.go':234 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'transport':76,220,226,516,666 'type':86,245,267,379,610,685 'usag':96,103,510 'use':19,83,612,648,655,681 'v':232,462 'v1.0.0':140,402,536 'valid':300,624 'valu':415,418,420 'variabl':524,650 'version':203,384,399,401,532,534 'via':522 'wrap':628 'write':708","prices":[{"id":"fd189d54-d689-4168-b328-f2a8a01ae534","listingId":"4e1ab2ee-0923-4d88-a2b7-ddb5f070425b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:26:11.451Z"}],"sources":[{"listingId":"4e1ab2ee-0923-4d88-a2b7-ddb5f070425b","source":"github","sourceId":"github/awesome-copilot/go-mcp-server-generator","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/go-mcp-server-generator","isPrimary":false,"firstSeenAt":"2026-04-18T21:49:36.370Z","lastSeenAt":"2026-05-18T18:52:13.318Z"},{"listingId":"4e1ab2ee-0923-4d88-a2b7-ddb5f070425b","source":"skills_sh","sourceId":"github/awesome-copilot/go-mcp-server-generator","sourceUrl":"https://skills.sh/github/awesome-copilot/go-mcp-server-generator","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:11.451Z","lastSeenAt":"2026-05-07T22:40:18.798Z"}],"details":{"listingId":"4e1ab2ee-0923-4d88-a2b7-ddb5f070425b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"go-mcp-server-generator","github":{"repo":"github/awesome-copilot","stars":33270,"topics":["agent-skills","agents","ai","awesome","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"license":"mit","html_url":"https://github.com/github/awesome-copilot","pushed_at":"2026-05-18T01:26:59Z","description":"Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.","skill_md_sha":"c47670ac62827e8011dcd7a183b4c90f0ec95676","skill_md_path":"skills/go-mcp-server-generator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/go-mcp-server-generator"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"go-mcp-server-generator","description":"Generate a complete Go MCP server project with proper structure, dependencies, and implementation using the official github.com/modelcontextprotocol/go-sdk."},"skills_sh_url":"https://skills.sh/github/awesome-copilot/go-mcp-server-generator"},"updatedAt":"2026-05-18T18:52:13.318Z"}}