Files
2026-06-22 08:55:57 +08:00

61 lines
2.4 KiB
Go

package mcp
import (
mcpsdk "github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/yan1h/agent-coding-workflow/internal/changerequest"
"github.com/yan1h/agent-coding-workflow/internal/chat"
"github.com/yan1h/agent-coding-workflow/internal/codeindex"
"github.com/yan1h/agent-coding-workflow/internal/project"
"github.com/yan1h/agent-coding-workflow/internal/projectmemory"
"github.com/yan1h/agent-coding-workflow/internal/workspace"
)
// ServerDeps 是装配 mcp.Server 所需的下游 service 集合。
type ServerDeps struct {
Caller *CallerResolver
Projects project.ProjectService
Reqs project.RequirementService
Issues project.IssueService
Artifacts project.ArtifactService
Workspaces workspace.WorkspaceService
Worktrees workspace.WorktreeService
GitOps workspace.GitOpsService
ChangeReqs changerequest.Service
Templates chat.TemplateService
Messages chat.MessageService
Conversations chat.ConversationService
Endpoints chat.EndpointService
ACP ACPBridge // acp 服务桥接(见 tools_acp.go / acp.NewMCPBridge)
Runs RunService // *run.Service(见 tools_run.go)
Execs ExecService // *run.ExecService — 一次性 exec(run_command / run_tests)
Orchestrator OrchestratorBridge // 编排器桥接(见 tools_orchestrator.go);可为 nil(禁用时)
CodeIndex codeindex.Service // 代码索引 RAG(见 tools_codeindex.go);可为 nil(禁用时)
Memory projectmemory.Service // 项目记忆(见 tools_memory.go);可为 nil(禁用时)
}
// NewMCPServer 装配 SDK Server 实例并注册所有工具/prompts/resources。
func NewMCPServer(deps ServerDeps) *mcpsdk.Server {
srv := mcpsdk.NewServer(&mcpsdk.Implementation{
Name: "agent-coding-workflow",
Version: "0.1.0",
}, nil)
// Phase F: PM 工具(projects / requirements / issues / artifacts)
registerPMTools(srv, deps)
// Phase G: chat / prompts / resources
registerChatTools(srv, deps)
registerPrompts(srv, deps)
registerResources(srv, deps)
// Phase H: workspace / worktree / git、ACP、run profiles
registerWorkspaceTools(srv, deps)
registerChangeRequestTools(srv, deps)
registerACPTools(srv, deps)
registerRunTools(srv, deps)
registerOrchestratorTools(srv, deps)
registerCodeIndexTools(srv, deps)
registerMemoryTools(srv, deps)
return srv
}