Spaces:
Build error
Build error
| import logging | |
| from mcp.server.fastmcp import FastMCP | |
| from services.mcp_server.core.config import load_config | |
| from services.mcp_server.core.actions import perform_voice_notify | |
| # Configure logging | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger("agentbell.mcp") | |
| # Create FastMCP server | |
| mcp = FastMCP("AgentBell") | |
| def voice_notify(text: str) -> str: | |
| """ | |
| Speak a message to the user via local audio. | |
| Use this tool to act as a "Voice Companion" for the user. | |
| You should narrate your key steps, status, and requests for attention. | |
| USAGE PROTOCOL: | |
| 1. WHEN TO SPEAK: | |
| - **Before Actions**: BEFORE running terminal commands, editing files, or calling other tools, speak a concise summary of what you are about to do. | |
| - **Start of Task**: When receiving a new request, briefly acknowledge the plan. | |
| - **End of Task**: When a task is complete, summarize the result. | |
| - **Blocks/Confirmations**: If an action might require user approval (e.g. `rm`, `install`), you MUST speak BEFORE calling that tool. | |
| 2. CONTENT GUIDELINES: | |
| - **Language**: ALWAYS match the language of the user's last message/prompt. | |
| - **Style**: Human-like, concise (5-15 words), intelligent summary. | |
| - **Forbidden**: Do NOT read raw filenames, paths, URLs, or code blocks. Use general terms. | |
| 3. CRITICAL TIMING (PREVENT DEADLOCKS): | |
| - You MUST call `voice_notify`, **WAIT** for it to return, and ONLY THEN call the subsequent action tool. | |
| - **NEVER** call `voice_notify` and a blocking tool (like `run_terminal_cmd`) in the same parallel execution block. | |
| """ | |
| logger.info(f"AgentBell triggered: {text}") | |
| config = load_config() | |
| try: | |
| return perform_voice_notify(text, config) | |
| except RuntimeError as e: | |
| return f"Error: {e}" | |
| except Exception as e: | |
| return f"Error playing voice: {e}" | |
| if __name__ == "__main__": | |
| mcp.run() | |