{"id":31801090,"url":"https://github.com/brunokrugel/echo-mcp","last_synced_at":"2026-04-02T13:45:26.625Z","repository":{"id":318365902,"uuid":"1070852759","full_name":"BrunoKrugel/echo-mcp","owner":"BrunoKrugel","description":"Enable AI assistants to interact with your Echo API ","archived":false,"fork":false,"pushed_at":"2026-03-26T01:25:44.000Z","size":144,"stargazers_count":8,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T22:59:10.004Z","etag":null,"topics":["claude","echo-framework","go","golang","mcp","vscode"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BrunoKrugel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-06T14:20:30.000Z","updated_at":"2026-03-26T01:27:43.000Z","dependencies_parsed_at":"2025-10-06T20:22:13.426Z","dependency_job_id":"ac275799-c83c-4d49-8d1b-c7e458439095","html_url":"https://github.com/BrunoKrugel/echo-mcp","commit_stats":null,"previous_names":["brunokrugel/echo-mcp"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/BrunoKrugel/echo-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoKrugel%2Fecho-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoKrugel%2Fecho-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoKrugel%2Fecho-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoKrugel%2Fecho-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BrunoKrugel","download_url":"https://codeload.github.com/BrunoKrugel/echo-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoKrugel%2Fecho-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307199,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","echo-framework","go","golang","mcp","vscode"],"created_at":"2025-10-10T23:26:43.746Z","updated_at":"2026-04-02T13:45:26.613Z","avatar_url":"https://github.com/BrunoKrugel.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MCP Wrapper for Echo Framework\n\n[![Build Status](https://github.com/BrunoKrugel/echo-mcp/actions/workflows/run-test.yaml/badge.svg?branch=main)](https://github.com/features/actions)\n[![Codecov branch](https://img.shields.io/codecov/c/github/BrunoKrugel/echo-mcp/main.svg)](https://codecov.io/gh/BrunoKrugel/echo-mcp)\n[![Go Report Card](https://goreportcard.com/badge/github.com/BrunoKrugel/echo-mcp)](https://goreportcard.com/report/github.com/BrunoKrugel/echo-mcp)\n[![Release](https://img.shields.io/github/release/BrunoKrugel/echo-mcp.svg?style=flat-square)](https://github.com/BrunoKrugel/echo-mcp/releases)\n\nWrap any existing Echo API into MCP tools and enable AI agents to interact with your API through [Model Context Protocol](https://modelcontextprotocol.io/introduction).\n\nInspired by [gin-mcp](https://github.com/ckanthony/gin-mcp) but for the [Echo framework](https://echo.labstack.com/).\n\n## Key Features\n\n- **Zero Configuration**: Works with any existing Echo API\n- **Multiple Schema Sources**: Support for Swaggo, raw OpenAPI YAML/JSON, and manual schemas\n- **Filtering**: Include/exclude endpoints with wildcard patterns\n- **MCP Compatible**: Works with any agent that supports MCP.\n\n## Installation\n\n```bash\ngo get github.com/BrunoKrugel/echo-mcp\n```\n\n## Quick Start\n\n```go\npackage main\n\nimport (\n    \"net/http\"\n    server \"github.com/BrunoKrugel/echo-mcp\"\n    \"github.com/labstack/echo/v4\"\n)\n\nfunc main() {\n    e := echo.New()\n\n    // Existing API routes\n    e.GET(\"/ping\", func(c echo.Context) error {\n        return c.JSON(http.StatusOK, map[string]string{\"message\": \"pong\"})\n    })\n\n\n    // Add MCP support\n    mcp := server.New(e)\n    mcp.Mount(\"/mcp\")\n\n    e.Start(\":8080\")\n}\n```\n\nNow the API is accessible at `http://localhost:8080/mcp`\n\n## Advanced Usage\n\n### Automatic Swagger Schemas\n\nIf you already use Swaggo for Swagger documentation, enable automatic schema generation:\n\n```go\n// @Summary Get user by ID\n// @Description Retrieve detailed user information\n// @Tags users\n// @Param id path int true \"User ID\" minimum(1)\n// @Success 200 {object} User\n// @Router /users/{id} [get]\nfunc GetUser(c echo.Context) error {\n    // Your handler code\n}\n\nfunc main() {\n    e := echo.New()\n    e.GET(\"/users/:id\", GetUser)\n\n    // Enable automatic swagger schema generation\n    mcp := server.NewWithConfig(e, \u0026server.Config{\n        BaseURL:              \"http://localhost:8080\",\n        EnableSwaggerSchemas: true,\n    })\n    mcp.Mount(\"/mcp\")\n\n    e.Start(\":8080\")\n}\n```\n\n### Raw OpenAPI Schema Support\n\nIf you use other OpenAPI libraries like `swaggest/openapi-go`, you can pass a raw YAML or JSON schema string:\n\n```go\nimport (\n    \"github.com/swaggest/openapi-go/openapi3\"\n    server \"github.com/BrunoKrugel/echo-mcp\"\n)\n\nfunc main() {\n    e := echo.New()\n\n    // ... define your routes ...\n\n    // Generate OpenAPI schema\n    reflector := openapi3.Reflector{}\n    reflector.SpecEns().WithOpenapi(\"3.0.3\")\n    reflector.SpecEns().Info.WithTitle(\"My API\").WithVersion(\"1.0.0\")\n\n    // Add operations to reflector\n    // ...\n\n    // Export to YAML (or JSON)\n    schema, _ := reflector.Spec.MarshalYAML()\n\n    // Pass raw schema to MCP server\n    // ... you can also embed the schema from an exiting openapi.yaml file\n    mcp := server.NewWithConfig(e, \u0026server.Config{\n        OpenAPISchema: string(schema),\n    })\n    mcp.Mount(\"/mcp\")\n\n    e.Start(\":8080\")\n}\n```\n\nThe `OpenAPISchema` field accepts both YAML and JSON formatted strings. When provided, it automatically populates:\n- Server name from schema title\n- Description from schema description\n- Version from schema version\n- Tool schemas from operation definitions\n\n### Endpoint Filtering\n\nExpose only the necessary endpoints to MCP tools:\n\n```go\nmcp := server.New(e)\n\n// Include only specific endpoints\nmcp.RegisterEndpoints([]string{\n    \"/api/v1/users/:id\",\n    \"/api/v1/orders\",\n})\n\n// Or exclude internal endpoints\nmcp.ExcludeEndpoints([]string{\n    \"/health\",      // Exclude health checks\n})\n```\n\n### Manual Schema Registration (WIP)\n\nFor better control, register schemas manually:\n\n```go\ntype CreateUserRequest struct {\n    Name  string `json:\"name\" jsonschema:\"required,description=User full name\"`\n    Email string `json:\"email\" jsonschema:\"required,description=User email address\"`\n    Age   int    `json:\"age,omitempty\" jsonschema:\"minimum=0,maximum=150\"`\n}\n\ntype UserQuery struct {\n    Page   int    `form:\"page,default=1\" jsonschema:\"minimum=1\"`\n    Limit  int    `form:\"limit,default=10\" jsonschema:\"maximum=100\"`\n    Active bool   `form:\"active\" jsonschema:\"description=Filter by active status\"`\n}\n\nmcp := server.New(e, \u0026server.Config{BaseURL: \"http://localhost:8080\"})\n\n// Register schemas for specific routes\nmcp.RegisterSchema(\"POST\", \"/users\", nil, CreateUserRequest{})\nmcp.RegisterSchema(\"GET\", \"/users\", UserQuery{}, nil)\n```\n\n## Schema Generation Methods\n\nEcho-MCP supports four schema generation approaches, with automatic fallback:\n\n| Method | Use Case | Priority |\n|--------|----------|----------|\n| **Raw OpenAPI Schema** | Using OpenAPI libraries like swaggest/openapi-go | First (if OpenAPISchema is set) |\n| **Swagger** | Production APIs with Swaggo annotations | First (if EnableSwaggerSchemas is set) |\n| **Manual** | Fine-grained control, complex validation | Second |\n| **Automatic** | Quick prototyping, simple endpoints | Fallback |\n\n```go\n// Option 1: Using raw OpenAPI schema (swaggest/openapi-go, etc.)\nschema, _ := reflector.Spec.MarshalYAML()\nmcp := server.New(e, \u0026server.Config{\n    OpenAPISchema: string(schema), // Use raw schema\n})\n\n// Option 2: Using Swaggo\nmcp := server.New(e, \u0026server.Config{\n    EnableSwaggerSchemas: true, // Load from swaggo docs\n})\n\n// Option 3: Manual schemas for fine-grained control\nmcp.RegisterSchema(\"POST\", \"/users\", nil, CreateUserRequest{})\n\n// Option 4: Automatic inference (fallback)\n// No configuration needed - routes will use basic path/body inference\n```\n\n## MCP Client Integration\n\nOnce your server is running:\n\n### Manual configuration\n\n```json\n{\n  \"mcpServers\": {\n    \"echo-api\": {\n      \"type\": \"http\",\n      \"url\": \"http://localhost:8080/mcp\",\n      \"timeout\": 120\n    },\n  }\n}\n```\n\n## Local Testing\n\nFor local testing, use MCP Inspector:\n\n```bash\nnpx @modelcontextprotocol/inspector http://localhost:8080/mcp\n```\n\n## Acknowledgments\n\n- [Swaggo](https://github.com/swaggo/swag) - Swagger documentation generator\n- [swaggest/openapi-go](https://github.com/swaggest/openapi-go) - OpenAPI 3.0 toolkit for Go\n- [Echo Framework](https://echo.labstack.com/) - High performance Go web framework\n- [Echo Swagger](https://github.com/swaggo/echo-swagger) - Swagger UI middleware for Echo\n- [Model Context Protocol](https://modelcontextprotocol.io/) - Universal protocol for AI-tool interaction\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunokrugel%2Fecho-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrunokrugel%2Fecho-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrunokrugel%2Fecho-mcp/lists"}