main.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "context"
  4. "errors"
  5. "flag"
  6. "log"
  7. "github.com/labring/aiproxy/openapi-mcp/convert"
  8. "github.com/mark3labs/mcp-go/server"
  9. )
  10. var (
  11. sse string
  12. file string
  13. v2 bool
  14. )
  15. func init() {
  16. flag.StringVar(&sse, "sse", "", "it will use sse protocol, example: :3000")
  17. flag.StringVar(&file, "file", "", "openapi file path")
  18. flag.BoolVar(&v2, "v2", false, "openapi v2 version")
  19. }
  20. func newServer() (*server.MCPServer, error) {
  21. parser := convert.NewParser()
  22. var err error
  23. if v2 {
  24. err = parser.ParseFileV2(file)
  25. } else {
  26. err = parser.ParseFile(file)
  27. }
  28. if err != nil {
  29. return nil, err
  30. }
  31. converter := convert.NewConverter(parser, convert.Options{
  32. OpenAPIFrom: file,
  33. })
  34. return converter.Convert()
  35. }
  36. func main() {
  37. flag.Parse()
  38. if file == "" {
  39. log.Fatal("Not provied openapi file")
  40. }
  41. s, err := newServer()
  42. if err != nil {
  43. log.Fatalf("Failed to new mcp server: %v", err)
  44. }
  45. if sse != "" {
  46. log.Printf("SSE MCP Server Starting")
  47. err = server.NewSSEServer(s).Start(sse)
  48. } else {
  49. err = server.ServeStdio(s)
  50. }
  51. if err != nil && !errors.Is(err, context.Canceled) {
  52. log.Fatalf("Failed to serve MCP: %v", err)
  53. }
  54. }