0908
This commit is contained in:
32
aio-mcp/internal/server/serve.go
Normal file
32
aio-mcp/internal/server/serve.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
|
||||
"aio-mcp/internal/config"
|
||||
)
|
||||
|
||||
// Serve 按传输方式启动服务器,阻塞直到 stdin 关闭、监听失败或出错。
|
||||
func Serve(s *mcp.Server, cfg *config.Config) error {
|
||||
switch cfg.Transport {
|
||||
case config.TransportStdio:
|
||||
slog.Info("aio-mcp starting", "transport", "stdio")
|
||||
// server.Run 会阻塞,直到 stdin 关闭或出错。
|
||||
return s.Run(context.Background(), &mcp.StdioTransport{})
|
||||
|
||||
case config.TransportHTTP:
|
||||
handler := mcp.NewStreamableHTTPHandler(func(*http.Request) *mcp.Server { return s }, nil)
|
||||
slog.Info("aio-mcp starting", "transport", "http", "addr", cfg.Addr)
|
||||
return http.ListenAndServe(cfg.Addr, handler)
|
||||
|
||||
default:
|
||||
// config.Parse 已校验过,这里仅为防御性兜底。
|
||||
return fmt.Errorf("未知 transport: %q(支持: %s, %s)",
|
||||
cfg.Transport, config.TransportStdio, config.TransportHTTP)
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,26 @@
|
||||
// Package server 负责 MCP 服务器的装配:创建 server 实例并注册全部工具。
|
||||
// Package server 负责 MCP 服务器的装配与运行。
|
||||
package server
|
||||
|
||||
import (
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
|
||||
"aio-mcp/internal/config"
|
||||
"aio-mcp/internal/deps"
|
||||
"aio-mcp/internal/tools"
|
||||
)
|
||||
|
||||
// New 创建并装配 aio-mcp 服务器。
|
||||
// version 为服务器实现版本号,随 MCP initialize 握手上报给客户端。
|
||||
func New(version string) *mcp.Server {
|
||||
//
|
||||
// version 为服务器实现版本号,随 MCP initialize 握手上报给客户端;
|
||||
// cfg 决定的共享依赖(数据目录、后续的连接池等)通过 deps 注入各工具。
|
||||
func New(version string, cfg *config.Config) *mcp.Server {
|
||||
s := mcp.NewServer(&mcp.Implementation{
|
||||
Name: "aio-mcp",
|
||||
Version: version,
|
||||
}, nil)
|
||||
|
||||
// 注册全部工具。新增工具后在 tools.RegisterAll 里追加即可。
|
||||
tools.RegisterAll(s)
|
||||
// 注册全部工具。新增工具组后在 tools.RegisterAll 里追加即可。
|
||||
tools.RegisterAll(s, deps.New(cfg))
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user