{"name":"QuantumMan","description":"Personal AI assistant for property management, legal operations, and business administration.","url":"https://quantumman.org","version":"1.0","protocol":"a2a/1.0","capabilities":[{"name":"web_browse","description":"Fetch a web page and extract its text content. Useful for reading articles, documentation, or any web page.","input_schema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to fetch"},"extract_links":{"type":"boolean","description":"Whether to include links found on the page","default":false}},"required":["url"]}},{"name":"sys_monitor","description":"Check system health: CPU usage, memory, disk space, running processes, and uptime.","input_schema":{"type":"object","properties":{"check":{"type":"string","enum":["overview","cpu","memory","disk","processes","network"],"description":"What to check. 'overview' gives a summary of everything.","default":"overview"},"top_n":{"type":"integer","description":"Number of top processes to show (for 'processes' check)","default":10}},"required":[]}},{"name":"file_manage","description":"Read, write, list, move, copy, or delete files and directories.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["read","write","list","move","copy","delete","info"],"description":"The file operation to perform."},"path":{"type":"string","description":"File or directory path."},"content":{"type":"string","description":"Content to write (for 'write' action)."},"destination":{"type":"string","description":"Destination path (for 'move' and 'copy' actions)."}},"required":["action","path"]}},{"name":"shell_exec","description":"Execute a shell command on the server. Requires operator confirmation each time. Use for system administration, package management, build processes, etc.","input_schema":{"type":"object","properties":{"command":{"type":"string","description":"The shell command to execute."},"timeout":{"type":"integer","description":"Timeout in seconds (default 60, max 300).","default":60},"working_dir":{"type":"string","description":"Working directory for the command. Defaults to server root."}},"required":["command"]}},{"name":"search","description":"Search the web for information. Returns search results with titles, URLs, and snippets.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query."},"num_results":{"type":"integer","description":"Number of results to return (max 10).","default":5}},"required":["query"]}},{"name":"email_read","description":"Read emails from your inbox via IMAP. Can list recent emails, search, read specific messages, or view important-flagged emails. Supports multiple accounts.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","read","search","important"],"description":"'list' shows recent emails, 'read' reads a specific email by ID, 'search' finds emails matching criteria, 'important' lists emails the operator marked as important."},"count":{"type":"integer","description":"Number of recent emails to list (for 'list' action). Max 500.","default":50},"offset":{"type":"integer","description":"Skip this many recent emails (for pagination with 'list').","default":0},"email_id":{"type":"string","description":"Email ID to read (for 'read' action)."},"account_id":{"type":"string","description":"Account ID to use. Omit to use the first account."},"search_query":{"type":"string","description":"IMAP search query (for 'search' action). E.g., 'FROM boss@company.com' or 'SUBJECT meeting'."},"folder":{"type":"string","description":"Mailbox folder. Default: INBOX.","default":"INBOX"}},"required":["action"]}},{"name":"email_send","description":"Send an email via Gmail API or SMTP. Composes and sends email to specified recipients.","input_schema":{"type":"object","properties":{"to":{"type":"string","description":"Recipient email address(es), comma-separated for multiple."},"subject":{"type":"string","description":"Email subject line."},"body":{"type":"string","description":"Email body text."},"cc":{"type":"string","description":"CC recipients, comma-separated."},"reply_to":{"type":"string","description":"Reply-to address."}},"required":["to","subject","body"]}},{"name":"api_call","description":"Make HTTP requests (GET, POST, PUT, DELETE, PATCH) to any API endpoint.","input_schema":{"type":"object","properties":{"url":{"type":"string","description":"The API endpoint URL."},"method":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH"],"description":"HTTP method.","default":"GET"},"headers":{"type":"object","description":"Request headers as key-value pairs."},"body":{"type":"string","description":"Request body (JSON string for POST/PUT/PATCH)."},"params":{"type":"object","description":"Query parameters as key-value pairs."}},"required":["url"]}},{"name":"net_scan","description":"Network reconnaissance: port scan, ping, DNS lookup, discover devices on the network.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["ping","dns","port_scan","local_ips"],"description":"Network action to perform."},"host":{"type":"string","description":"Target host (IP or hostname). Required for ping, dns, port_scan."},"ports":{"type":"string","description":"Port range for scan (e.g., '80,443' or '1-1024'). Default: common ports.","default":"22,80,443,3000,3306,5432,6379,8000,8080,8443"}},"required":["action"]}},{"name":"ssh_connect","description":"Connect to a remote host via SSH and execute commands. Requires operator confirmation each time.","input_schema":{"type":"object","properties":{"host":{"type":"string","description":"Remote host (hostname or IP)."},"command":{"type":"string","description":"Command to execute on the remote host."},"user":{"type":"string","description":"SSH username. If not specified, uses the configured default."},"port":{"type":"integer","description":"SSH port.","default":22},"key_path":{"type":"string","description":"Path to SSH private key file. If not specified, uses default SSH key."}},"required":["host","command"]}},{"name":"sms_send","description":"Send an SMS text message to a phone number via Twilio. The message will be sent from the operator's Twilio number and logged as a Communication record. Use this when the operator asks you to text someone.","input_schema":{"type":"object","properties":{"to":{"type":"string","description":"Recipient phone number. Use E.164 format (+1XXXXXXXXXX) or 10-digit US number."},"message":{"type":"string","description":"The text message body to send."},"contact_name":{"type":"string","description":"Name of the recipient (optional, used for logging)."}},"required":["to","message"]}},{"name":"task_create","description":"Create a new scheduled task that runs automatically on a schedule. Tasks can run on cron schedules (daily, weekly, monthly, specific days/times). When the task fires, it executes the given prompt — which can use any tool (send SMS, check email, etc.). Use this when the operator asks you to do something repeatedly or at a future time.","input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Short descriptive name for the task (e.g., 'Monthly text to John')."},"prompt":{"type":"string","description":"Full instructions for what to do when the task fires. Include all details — phone numbers, message text, etc. This prompt is sent to Claude who will execute it using available tools."},"schedule":{"type":"string","description":"When to run. Accepts cron expressions (e.g., '0 15 1 * *') or human-readable (e.g., '1st of every month at 3pm', 'every Monday at 9am', 'daily at 8am', 'every 30 minutes', 'weekdays at 5pm')."},"enabled":{"type":"boolean","description":"Whether the task is active. Default true."}},"required":["name","prompt","schedule"]}},{"name":"contact_lookup","description":"Search the operator's contacts by name, phone number, email, or company. Returns matching contacts with all their details. Use this before sending messages or making calls to find the right phone number or email.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Search term — name, phone number, email address, or company name."},"field":{"type":"string","description":"Optional: restrict search to a specific field. One of: name, phone, email, company, all. Default: all.","enum":["name","phone","email","company","all"]},"limit":{"type":"integer","description":"Maximum number of results to return. Default: 10."}},"required":["query"]}},{"name":"communication_log","description":"Search or create communication records (calls, texts, emails, meetings, notes). Use action='search' to find past communications. Use action='create' to log a new communication.","input_schema":{"type":"object","properties":{"action":{"type":"string","description":"What to do: 'search' to find communications, 'create' to log a new one.","enum":["search","create"]},"type":{"type":"string","description":"Communication type. One of: email, phone_call, text, letter, meeting, other."},"direction":{"type":"string","description":"Direction: incoming or outgoing.","enum":["incoming","outgoing"]},"contact_name":{"type":"string","description":"Name of the person communicated with."},"phone":{"type":"string","description":"Phone number (for calls/texts)."},"body":{"type":"string","description":"Message body, transcript, or meeting notes."},"subject":{"type":"string","description":"Subject or brief description."},"query":{"type":"string","description":"Search query (for action='search'). Searches across subject, body, contact name."},"limit":{"type":"integer","description":"Max results for search. Default: 10."}},"required":["action"]}},{"name":"app_data","description":"Read data from any QuantumMan app — contacts, properties, leases, bills, transactions, tasks, communications, knowledge base entries, notes, hiring pipeline, marketing campaigns, delegations, and projects. Use this to answer questions about the operator's data.","input_schema":{"type":"object","properties":{"app":{"type":"string","description":"Which app to query.","enum":["contacts","properties","leases","bills","transactions","tasks","communications","knowledge","notes","hiring","marketing","delegations","projects","emails","observations"]},"query":{"type":"string","description":"Optional search term to filter results."},"limit":{"type":"integer","description":"Maximum results to return. Default: 20."}},"required":["app"]}},{"name":"task_manage","description":"Manage scheduled tasks — list all tasks, update a task's settings, enable or disable a task, delete a task, or run a task immediately. Use this to check on, modify, or control existing scheduled tasks.","input_schema":{"type":"object","properties":{"action":{"type":"string","description":"What to do: list, update, enable, disable, delete, or run.","enum":["list","update","enable","disable","delete","run"]},"task_id":{"type":"integer","description":"Task ID (required for update/enable/disable/delete/run)."},"updates":{"type":"object","description":"Fields to update (for action='update'). Can include: name, prompt, schedule (cron string), enabled."}},"required":["action"]}},{"name":"workflow_run","description":"Run a predefined workflow by name, or schedule it to run automatically. Available workflows: rent_collection, lease_renewal, bill_payment_check. Use action='run' to execute immediately. Use action='schedule' to create a recurring task. Use action='list' to see all available workflows.","input_schema":{"type":"object","properties":{"action":{"type":"string","description":"What to do: 'list' available workflows, 'run' one immediately, or 'schedule' one as a recurring task.","enum":["list","run","schedule"]},"workflow":{"type":"string","description":"Workflow name to run/schedule (e.g., 'rent_collection', 'lease_renewal', 'bill_payment_check'). Required for run/schedule."},"parameters":{"type":"object","description":"Optional parameter overrides for the workflow prompt (e.g., custom date, specific tenant)."}},"required":["action"]}},{"name":"improvement_create","description":"Create an improvement card when you find a bug, improvement opportunity, security issue, performance problem, or need information from the operator. Cards are reviewed by the operator before any action is taken. Also creates an operator task so it appears in the My Tasks board.","input_schema":{"type":"object","properties":{"priority":{"type":"string","description":"Priority level: P0 (critical/security), P1 (bug/broken), P2 (improvement), P3 (nice-to-have/code quality)","enum":["P0","P1","P2","P3"]},"category":{"type":"string","description":"Category of the finding.","enum":["bug","feature","performance","security","ux","code_quality","missing_info"]},"title":{"type":"string","description":"Short title describing the issue or improvement."},"description":{"type":"string","description":"Detailed description of what was found and why it matters."},"file_path":{"type":"string","description":"Which source file(s) are affected (optional)."},"suggested_fix":{"type":"string","description":"What should be done to fix or improve this (optional)."}},"required":["priority","category","title","description"]}},{"name":"activity_query","description":"Query the operator's computer-activity timeline (which apps/windows they had focused, with timestamps and idle state). Use this to answer questions like 'what was I working on yesterday at 3pm', 'how much time did I spend in VS Code today', or 'when did I last open the browser'. Modes: 'summary' for time-per-app totals, 'timeline' for the raw sequence of windows. Always prefer 'summary' unless the user wants a chronological log.","input_schema":{"type":"object","properties":{"mode":{"type":"string","enum":["summary","timeline"],"description":"'summary' = time-per-app rollup. 'timeline' = raw samples. Default: summary."},"hours":{"type":"integer","description":"Look back this many hours from now. Default: 24. Max: 2160 (90 days).","minimum":1,"maximum":2160},"since":{"type":"string","description":"Optional ISO-8601 start time. Overrides 'hours'. Example: 2026-05-22T15:00:00Z"},"until":{"type":"string","description":"Optional ISO-8601 end time (timeline mode only)."},"include_idle":{"type":"boolean","description":"Summary mode only — count idle time too. Default false."},"limit":{"type":"integer","description":"Timeline mode — max samples to return. Default 200.","minimum":1,"maximum":2000}}}}],"supported_content_types":["text/plain","application/json"],"authentication":{"type":"bearer","description":"JWT token via /api/auth/login"},"endpoints":{"tasks":"/api/a2a/tasks","task_status":"/api/a2a/tasks/{task_id}"}}