Skip to main content
Glama

mcp-agent-forge

main_test.go6.01 kB
package main import ( "context" "fmt" "testing" "time" "github.com/google/uuid" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "github.com/stretchr/testify/assert" ) // MockAgent 用于测试的Agent结构体 type mockAgent struct { ID string Name string CoreTraits string Personality string CreatedAt string } func TestCreateAgent(t *testing.T) { tests := []struct { name string agentName string coreTraits string expectError bool }{ { name: "正常创建", agentName: "测试智能体", coreTraits: "逻辑思维,创新能力", expectError: false, }, { name: "空名称", agentName: "", coreTraits: "逻辑思维", expectError: true, }, { name: "空特征", agentName: "测试智能体", coreTraits: "", expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { // 使用直接的方法调用而不是通过CallToolRequest ctx := context.Background() result, err := createAgent(ctx, tt.agentName, tt.coreTraits) if tt.expectError { assert.Error(t, err) return } assert.NoError(t, err) assert.NotNil(t, result) }) } } // 模拟实际的创建Agent功能,不依赖MCP结构 func createAgent(ctx context.Context, name, traits string) (string, error) { if name == "" { return "", fmt.Errorf("无效的智能体名称") } if traits == "" { return "", fmt.Errorf("无效的核心特征") } // 创建新的智能体实例 agentID := uuid.New().String() return agentID, nil } func TestGetAgent(t *testing.T) { // 创建测试用智能体 testAgent := &Agent{ ID: uuid.New().String(), Name: "测试智能体", CoreTraits: "测试特征", Personality: "测试性格", CreatedAt: time.Now().Format(time.RFC3339), } agents[testAgent.ID] = testAgent tests := []struct { name string agentID string expectError bool }{ { name: "获取存在的智能体", agentID: testAgent.ID, expectError: false, }, { name: "获取不存在的智能体", agentID: "non-existent-id", expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { // 直接调用获取功能 agent, err := getAgent(tt.agentID) if tt.expectError { assert.Error(t, err) return } assert.NoError(t, err) assert.NotNil(t, agent) assert.Equal(t, testAgent.ID, agent.ID) }) } } // 模拟获取Agent功能 func getAgent(agentID string) (*Agent, error) { agent, exists := agents[agentID] if !exists { return nil, fmt.Errorf("agent with ID %s not found", agentID) } return agent, nil } func TestListAgents(t *testing.T) { // 清空智能体列表 agents = make(map[string]*Agent) // 添加测试用智能体 testAgents := []*Agent{ { ID: uuid.New().String(), Name: "测试智能体1", CoreTraits: "特征1", Personality: "性格1", CreatedAt: time.Now().Format(time.RFC3339), }, { ID: uuid.New().String(), Name: "测试智能体2", CoreTraits: "特征2", Personality: "性格2", CreatedAt: time.Now().Format(time.RFC3339), }, } for _, agent := range testAgents { agents[agent.ID] = agent } // 直接测试列表功能 agentList := listAgents() assert.Equal(t, len(testAgents), len(agentList)) } // 模拟列出Agent功能 func listAgents() []*Agent { agentList := make([]*Agent, 0, len(agents)) for _, agent := range agents { agentList = append(agentList, agent) } return agentList } func TestDeleteAgent(t *testing.T) { // 创建测试用智能体 testAgent := &Agent{ ID: uuid.New().String(), Name: "测试智能体", CoreTraits: "测试特征", Personality: "测试性格", CreatedAt: time.Now().Format(time.RFC3339), } agents[testAgent.ID] = testAgent tests := []struct { name string agentID string expectError bool }{ { name: "删除存在的智能体", agentID: testAgent.ID, expectError: false, }, { name: "删除不存在的智能体", agentID: "non-existent-id", expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { // 直接测试删除功能 err := deleteAgent(tt.agentID) if tt.expectError { assert.Error(t, err) return } assert.NoError(t, err) // 验证智能体是否已被删除 _, exists := agents[tt.agentID] assert.False(t, exists) }) } } // 模拟删除Agent功能 func deleteAgent(agentID string) error { if _, exists := agents[agentID]; !exists { return fmt.Errorf("agent with ID %s not found", agentID) } delete(agents, agentID) return nil } func TestPromptHandler(t *testing.T) { // 准备测试数据 agentName := "测试智能体" coreTraits := "专业、严谨、耐心" // 直接调用处理器,传递必要参数 prompt := createExpertPrompt(agentName, coreTraits) // 验证结果 assert.Contains(t, prompt, "测试智能体") assert.Contains(t, prompt, "专业、严谨、耐心") } // 模拟创建专家提示词功能 func createExpertPrompt(name, traits string) string { return fmt.Sprintf("请为名为[%s]的智能体生成一个人格描述,核心特质是:[%s]", name, traits) } func setupTestServer() *server.MCPServer { s := server.NewMCPServer( "测试服务器", "1.0.0", server.WithPromptCapabilities(true), ) // 添加系统提示词 systemPrompt := mcp.NewPrompt("generate_expert_agent", mcp.WithPromptDescription("系统提示词,用于生成智能体的人格"), mcp.WithArgument("agent_name", mcp.ArgumentDescription("智能体名称"), mcp.RequiredArgument(), ), mcp.WithArgument("core_traits", mcp.ArgumentDescription("核心特质"), mcp.RequiredArgument(), ), ) // 添加系统提示词处理器 s.AddPrompt(systemPrompt, generateExpertAgentHandler) return s }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HundunOnline/mcp-agent-forge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server