Self-hosted MCP server for SSH, API proxying, browser automation, and persistent AI memory
Server has 6 tools with explicit schemas and descriptions. Naming follows verb_noun convention (fetch_external, browser, gist_kb, github_search, ssh_exec, tailscale_status). Descriptions are present and substantive (100-200 chars typical). However, several parameters lack descriptions, output schemas are not documented, and error handling guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. fetch_external and ssh_exec are high-risk tools with minimal validation guidance in descriptions.
Control a headless browser by running agent-browser CLI commands. Connects to a running Lightpanda (or any CDP-compatible browser) via CDP. agent-browser maintains its own daemon session between calls.
Fetch data from external URLs with domain whitelisting and automatic authentication token injection. Only allowed domains can be accessed. Authentication tokens are injected automatically based on domain.
Manage a private personal knowledge base backed by GitHub Gists. All entries are namespaced with the cc-- filename prefix automatically. Supports list, get, create, update, and delete operations. Remember to include the extension in the title (e.g. "cc--notes.md") for proper formatting.
Search GitHub for pull requests or commits. Returns clean minimal output with only essential fields.
Execute a shell command on a remote device via Tailscale SSH. Uses Tailscale hostnames — no manual SSH key setup required.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite explicit risk levels. ssh_exec (IRREVERSIBLE), browser (WRITE), and gist_kb (WRITE) lack destructiveHint annotations that would guide agent planning.
Output schemas not documented. Tools return JSON but LLMs cannot infer field names, types, or pagination structure. fetch_external's 'pick' parameter suggests structured output but response schema is not declared.
ssh_exec description lacks validation guidance. No mention of hostname format, command injection risks, or expected error modes. Description is 60 chars but should explain prerequisites (Tailscale setup, SSH key config).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Get all devices in your Tailscale network with their online/offline status, IP addresses, OS, and last-seen time. Note: the Tailscale API sometimes returns devices as offline.
browser tool description vague about state management. 'agent-browser maintains its own daemon session' is unclear, does each call share state? Can agents run concurrent commands? No guidance on expected command syntax or error recovery.
fetch_external 'pick' parameter lacks format examples. Description says 'dot-notation field paths' but no example of nested array extraction (labels[].name) is shown in parameter description itself, only in tool description.