feat: wire explicit msglib receive source

This commit is contained in:
zhaoyilun
2026-07-10 09:11:22 +08:00
parent 3f270b454f
commit 5a1b85906b
8 changed files with 250 additions and 25 deletions

View File

@@ -24,6 +24,15 @@ const (
EnvMsgLibDBKey = "ISPHERE_MSGLIB_DB"
)
type msgLibClient interface {
tools.DisplayEntitySource
isphere.MsgLibMessageLister
}
var newMsgLibClient = func(cfg msglib.Config) msgLibClient {
return msglib.NewClient(cfg)
}
func NewServer() *mcp.Server {
return NewServerWithReceiveSource(isphere.EncryptedPacketLogSource{})
}
@@ -48,14 +57,14 @@ func NewServerFromEnv() (*mcp.Server, error) {
}
source = loaded
}
displaySource, err := msgLibDisplayEntitySourceFromEnv()
displaySource, msglibReceiveSource, err := msgLibSourcesFromEnv()
if err != nil {
return nil, err
}
return NewServerWithSources(source, displaySource), nil
return NewServerWithSourcesAndMsgLibReceive(source, displaySource, msglibReceiveSource), nil
}
func msgLibDisplayEntitySourceFromEnv() (tools.DisplayEntitySource, error) {
func msgLibSourcesFromEnv() (tools.DisplayEntitySource, tools.ReceiveMessagesSource, error) {
sidecarExe := strings.TrimSpace(os.Getenv(EnvMsgLibSidecarExeKey))
sqliteDLL := strings.TrimSpace(os.Getenv(EnvMsgLibSQLiteDLLKey))
dbPath := strings.TrimSpace(os.Getenv(EnvMsgLibDBKey))
@@ -66,16 +75,21 @@ func msgLibDisplayEntitySourceFromEnv() (tools.DisplayEntitySource, error) {
}
}
if configured == 0 {
return nil, nil
return nil, nil, nil
}
if configured != 3 {
return nil, fmt.Errorf("configure MsgLib source: set all of %s, %s, and %s, or set none", EnvMsgLibSidecarExeKey, EnvMsgLibSQLiteDLLKey, EnvMsgLibDBKey)
return nil, nil, fmt.Errorf("configure MsgLib source: set all of %s, %s, and %s, or set none", EnvMsgLibSidecarExeKey, EnvMsgLibSQLiteDLLKey, EnvMsgLibDBKey)
}
cfg, err := msglib.ConfigFromEnv()
if err != nil {
return nil, fmt.Errorf("configure MsgLib source: %w", err)
return nil, nil, fmt.Errorf("configure MsgLib source: %w", err)
}
return msglib.NewClient(cfg), nil
client := newMsgLibClient(cfg)
return client, isphere.MsgLibMessageSource{
Lister: client,
IncludeBody: true,
IncludeAttachmentMetadata: true,
}, nil
}
func NewServerWithReceiveSource(source tools.ReceiveMessagesSource) *mcp.Server {
@@ -83,13 +97,17 @@ func NewServerWithReceiveSource(source tools.ReceiveMessagesSource) *mcp.Server
}
func NewServerWithSources(source tools.ReceiveMessagesSource, displaySource tools.DisplayEntitySource) *mcp.Server {
return NewServerWithSourcesAndMsgLibReceive(source, displaySource, nil)
}
func NewServerWithSourcesAndMsgLibReceive(source tools.ReceiveMessagesSource, displaySource tools.DisplayEntitySource, msglibReceiveSource tools.ReceiveMessagesSource) *mcp.Server {
server := mcp.NewServer(&mcp.Implementation{
Name: ServerName,
Title: ServerTitle,
Version: ServerVersion,
}, nil)
tools.RegisterWinHelperTools(server, helperclient.Client{})
tools.RegisterISphereReadToolsWithDisplayEntities(server, source, displaySource)
tools.RegisterISphereReadToolsWithReceiveSources(server, source, msglibReceiveSource, displaySource)
tools.RegisterISphereContactToolsWithDisplayEntities(server, source, displaySource)
tools.RegisterISphereGroupToolsWithDisplayEntities(server, source, displaySource)
tools.RegisterISphereFileTools(server, source)