Skip to main content
Glama

Peekaboo MCP

by steipete
AgentShellCommandTests.swiftβ€’6.58 kB
import Foundation import Testing @testable import peekaboo // TODO: These tests need to be updated for the new agent architecture /* @Suite("Agent Shell Command Tests") struct AgentShellCommandTests { @Test("Shell function is included in agent tools") func shellFunctionExists() { // Verify shell tool is created with correct parameters let shellTool = OpenAIAgent.makePeekabooTool( "shell", "Execute shell commands (use for opening URLs with 'open', running CLI tools, etc)" ) #expect(shellTool.type == "function") #expect(shellTool.function.name == "peekaboo_shell") #expect(shellTool.function .description == "Execute shell commands (use for opening URLs with 'open', running CLI tools, etc)" ) // Check parameters let params = shellTool.function.parameters.dictionary #expect(params["type"] as? String == "object") let properties = params["properties"] as? [String: Any] #expect(properties != nil) let commandParam = properties?["command"] as? [String: Any] #expect(commandParam?["type"] as? String == "string") #expect(commandParam?["description"] as? String == "Shell command to execute (e.g., 'open https://google.com', 'ls -la', 'echo Hello')" ) let required = params["required"] as? [String] #expect(required == ["command"]) } @Test("Agent executor handles shell commands") @available(macOS 14.0, *) func executorHandlesShellCommand() async throws { let executor = AgentExecutor(verbose: false) // Test echo command let result = try await executor.executeFunction( name: "peekaboo_shell", arguments: """ {"command": "echo 'Hello from shell'"} """ ) // Parse result let data = result.data(using: .utf8)! let json = try JSONSerialization.jsonObject(with: data) as! [String: Any] #expect(json["success"] as? Bool == true) let resultData = json["data"] as? [String: Any] #expect(resultData != nil) #expect(resultData?["exit_code"] as? Int == 0) #expect((resultData?["output"] as? String)?.contains("Hello from shell") == true) } @Test("Shell command handles errors correctly") @available(macOS 14.0, *) func shellCommandErrorHandling() async throws { let executor = AgentExecutor(verbose: false) // Test command that should fail let result = try await executor.executeFunction( name: "peekaboo_shell", arguments: """ {"command": "false"} """ ) // Parse result let data = result.data(using: .utf8)! let json = try JSONSerialization.jsonObject(with: data) as! [String: Any] #expect(json["success"] as? Bool == false) let error = json["error"] as? [String: Any] #expect(error != nil) #expect(error?["code"] as? String == "SHELL_COMMAND_FAILED") #expect((error?["message"] as? String)?.contains("exited with code") == true) } @Test("Shell command respects timeout") @available(macOS 14.0, *) func shellCommandTimeout() async throws { let executor = AgentExecutor(verbose: false) // Test command that would hang without timeout let result = try await executor.executeFunction( name: "peekaboo_shell", arguments: """ {"command": "sleep 5", "timeout": 1} """ ) // Parse result let data = result.data(using: .utf8)! let json = try JSONSerialization.jsonObject(with: data) as! [String: Any] // Should fail due to timeout #expect(json["success"] as? Bool == false) let error = json["error"] as? [String: Any] #expect(error?["code"] as? String == "COMMAND_FAILED") #expect((error?["message"] as? String)?.contains("timed out") == true) } @Test("Shell command uses zsh") @available(macOS 14.0, *) func shellCommandUsesZsh() async throws { let executor = AgentExecutor(verbose: false) // Test zsh-specific syntax let result = try await executor.executeFunction( name: "peekaboo_shell", arguments: """ {"command": "echo $ZSH_VERSION"} """ ) // Parse result let data = result.data(using: .utf8)! let json = try JSONSerialization.jsonObject(with: data) as! [String: Any] #expect(json["success"] as? Bool == true) let resultData = json["data"] as? [String: Any] let output = resultData?["output"] as? String ?? "" // Should have zsh version in output (not empty) #expect(!output.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) } @Test("Shell command handles complex commands") @available(macOS 14.0, *) func shellCommandComplexCommands() async throws { let executor = AgentExecutor(verbose: false) // Test piping and multiple commands let result = try await executor.executeFunction( name: "peekaboo_shell", arguments: """ {"command": "echo 'test' | tr 'a-z' 'A-Z'"} """ ) // Parse result let data = result.data(using: .utf8)! let json = try JSONSerialization.jsonObject(with: data) as! [String: Any] #expect(json["success"] as? Bool == true) let resultData = json["data"] as? [String: Any] let output = resultData?["output"] as? String ?? "" #expect(output.trimmingCharacters(in: .whitespacesAndNewlines) == "TEST") } @Test("Shell command validates required parameters") @available(macOS 14.0, *) func shellCommandParameterValidation() async throws { let executor = AgentExecutor(verbose: false) // Test missing command parameter let result = try await executor.executeFunction( name: "peekaboo_shell", arguments: """ {} """ ) // Parse result let data = result.data(using: .utf8)! let json = try JSONSerialization.jsonObject(with: data) as! [String: Any] #expect(json["success"] as? Bool == false) let error = json["error"] as? [String: Any] #expect(error?["code"] as? String == "INVALID_ARGUMENTS") #expect((error?["message"] as? String)?.contains("Shell command requires") == true) } } */

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/steipete/Peekaboo'

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