# MCP Examples Examples demonstrating Model Context Protocol (MCP) integration with go-micro. ## Examples ### [hello](./hello/) - Minimal Example ⭐ Start Here The simplest possible MCP-enabled service. Perfect for learning the basics. **What it shows:** - Automatic documentation extraction from Go comments - MCP gateway setup with 3 lines - Ready for Claude Code **Run it:** ```bash cd hello go run main.go ``` ### [crud](./crud/) - CRUD Contact Book A realistic service with create, read, update, delete, list, and search operations. Shows how to document a full API for agents with `@example` tags, `description` struct tags, validation errors, and partial updates. **Run it:** ```bash cd crud go run main.go ``` ### [workflow](./workflow/) - Cross-Service Orchestration Three services (Inventory, Orders, Notifications) showing how an AI agent orchestrates multi-step workflows: search products, check stock, reserve inventory, place order, send confirmation — all from a single natural language request. **Run it:** ```bash cd workflow go run main.go ``` ### [platform](./platform/) - Agent Platform Showcase A complete platform (Users, Posts, Comments, Mail) mirroring [micro/blog](https://github.com/micro/blog). Shows how existing microservices become agent-accessible with zero code changes — agents can sign up, write posts, comment, tag, and send mail through natural language. **Run it:** ```bash cd platform go run main.go ``` ### [documented](./documented/) - Full-Featured Example Complete example showing all MCP features with a user service. **What it shows:** - Multiple endpoints (GetUser, CreateUser) - Rich documentation with examples - Per-endpoint auth scopes via `server.WithEndpointScopes()` - Pre-populated test data - Production-ready patterns **Run it:** ```bash cd documented go run main.go ``` ## Quick Start ### 1. Write Your Service Add Go doc comments to your handler methods: ```go // SayHello greets a person by name. Returns a friendly greeting message. // // @example {"name": "Alice"} func (g *Greeter) SayHello(ctx context.Context, req *HelloRequest, rsp *HelloResponse) error { rsp.Message = "Hello " + req.Name + "!" return nil } type HelloRequest struct { Name string `json:"name" description:"Person's name to greet"` } ``` ### 2. Register Handler (Auto-Extracts Docs!) ```go handler := service.Server().NewHandler(new(Greeter)) service.Server().Handle(handler) ``` ### 3. Start MCP Gateway ```go go mcp.ListenAndServe(":3000", mcp.Options{ Registry: service.Options().Registry, }) ``` ## Testing ### HTTP API ```bash # List tools curl http://localhost:3000/mcp/tools | jq # Call a tool curl -X POST http://localhost:3000/mcp/call \ -H "Content-Type: application/json" \ -d '{ "tool": "greeter.Greeter.SayHello", "input": {"name": "Alice"} }' | jq ``` ### Claude Code (Stdio) Start MCP server: ```bash micro mcp serve ``` Add to `~/.claude/claude_desktop_config.json`: ```json { "mcpServers": { "my-services": { "command": "micro", "args": ["mcp", "serve"] } } } ``` Restart Claude Code and ask Claude to use your services! ## Features ### ✅ Automatic Documentation Extraction Just write Go comments - documentation is extracted automatically: - **Go doc comments** → Tool descriptions - **@example tags** → Example inputs for AI - **Struct tags** → Parameter descriptions ### ✅ Multiple Transports - **Stdio** - For Claude Code (recommended) - **HTTP/SSE** - For web-based agents ### ✅ MCP Command Line ```bash # Start MCP server micro mcp serve # Stdio (for Claude Code) micro mcp serve --address :3000 # HTTP/SSE (for web agents) # List available tools micro mcp list # Human-readable list micro mcp list --json # JSON output # Test a tool micro mcp test '{"key": "value"}' # Generate documentation micro mcp docs # Markdown format micro mcp docs --format json # JSON format micro mcp docs --output tools.md # Save to file # Export to different formats micro mcp export langchain # Python LangChain tools micro mcp export openapi # OpenAPI 3.0 spec micro mcp export json # Raw JSON definitions ``` For detailed examples, see [CLI Examples](../../cmd/micro/mcp/EXAMPLES.md). ### ✅ Zero Configuration - No manual tool registration - No API wrappers - No code generation - Just write normal Go code! ### ✅ Per-Tool Auth Scopes Declare required scopes when registering a handler: ```go handler := service.Server().NewHandler( new(BlogService), server.WithEndpointScopes("Blog.Create", "blog:write"), server.WithEndpointScopes("Blog.Delete", "blog:admin"), ) ``` Or define scopes at the gateway layer without changing services: ```go mcp.Serve(mcp.Options{ Registry: reg, Auth: authProvider, Scopes: map[string][]string{ "blog.Blog.Create": {"blog:write"}, "blog.Blog.Delete": {"blog:admin"}, }, }) ``` ### ✅ Tracing, Rate Limiting & Audit Logging Every tool call generates a trace ID that propagates through the RPC chain. Configure rate limiting and audit logging at the gateway: ```go mcp.Serve(mcp.Options{ Registry: reg, Auth: authProvider, RateLimit: &mcp.RateLimitConfig{ RequestsPerSecond: 10, Burst: 20, }, AuditFunc: func(r mcp.AuditRecord) { log.Printf("[audit] trace=%s tool=%s account=%s allowed=%v", r.TraceID, r.Tool, r.AccountID, r.Allowed) }, }) ``` ## Documentation - [Full MCP Documentation](../../internal/website/docs/mcp.md) - [MCP Gateway Implementation](../../gateway/mcp/) - [Documentation Guide](../../gateway/mcp/DOCUMENTATION.md) - [Blog Post](../../internal/website/blog/2.md) ## Learn More - [Model Context Protocol Spec](https://modelcontextprotocol.io/) - [Go Micro Documentation](https://go-micro.dev)