Files
membank/aio-mcp/main.go
张威33321 a8fa159f0f chore: 同步本地更改
- 新增 aio-mcp 项目框架
- 新增 .trae/skills/ OCR/SKU 设计工具
- 更新 auto-check 配置和 stress 包
- 删除 fnhelp 文档目录
- 更新 Docker 压力测试脚本
2026-08-27 20:38:13 +08:00

54 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// aio-mcpaio-system 的自定义 MCP 服务器。
//
// 作为 AI Agent 的「手」,以 MCP 协议对外暴露工具。
// 默认以 stdio 传输运行(本地 Agent 直接拉起),也可切换为
// streamable HTTP 供远程客户端访问。
package main
import (
"context"
"flag"
"fmt"
"log/slog"
"net/http"
"os"
"github.com/modelcontextprotocol/go-sdk/mcp"
"aio-mcp/internal/server"
)
// version 可用 -ldflags "-X main.version=..." 在构建时覆盖。
var version = "0.1.0"
func main() {
transport := flag.String("transport", "stdio", "传输方式stdio默认供本地 Agent 拉起)或 http")
addr := flag.String("addr", "localhost:8000", "http 模式下的监听地址")
flag.Parse()
// 日志统一走 stderrstdio 模式下 stdout 是 MCP 协议通道,绝不能混入日志。
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, nil)))
svr := server.New(version)
switch *transport {
case "stdio":
slog.Info("aio-mcp starting", "transport", "stdio")
// server.Run 会阻塞,直到 stdin 关闭或出错。
if err := svr.Run(context.Background(), &mcp.StdioTransport{}); err != nil {
slog.Error("stdio server failed", "err", err)
os.Exit(1)
}
case "http":
handler := mcp.NewStreamableHTTPHandler(func(*http.Request) *mcp.Server { return svr }, nil)
slog.Info("aio-mcp starting", "transport", "http", "addr", *addr)
if err := http.ListenAndServe(*addr, handler); err != nil {
slog.Error("http server failed", "err", err)
os.Exit(1)
}
default:
fmt.Fprintf(os.Stderr, "未知 transport: %q支持: stdio, http\n", *transport)
os.Exit(2)
}
}