{
  "name": "mcp.zovo.one remote MCP endpoints",
  "protocol": "MCP streamable HTTP (2025-06-18)",
  "transport": "streamable-http",
  "auth": {
    "scheme": "Authorization: Bearer <token>",
    "oauth": "none - this endpoint deliberately has no OAuth flow; a static bearer token is all a client needs",
    "anonymous": {
      "mint": "https://mcp.zovo.one/mcp/token",
      "format": "anon_<32 hex>",
      "tier": "free",
      "data_retention_days": 30,
      "rate_limit": "600/hour",
      "mint_rate_limit": "10/hour per client IP"
    },
    "pro": {
      "buy": "https://mcp.zovo.one/buy/<product>",
      "format": "MCPL1.<payload>.<signature>",
      "verified": "Ed25519, offline",
      "rate_limit": "6000/hour"
    },
    "guide": "https://mcp.zovo.one/guides/mcp-server-free-vs-pro"
  },
  "endpoints": [
    {
      "name": "time-tracker",
      "url": "https://mcp.zovo.one/mcp/time-tracker",
      "tools": [
        "timer_start",
        "timer_stop",
        "timer_status",
        "entry_add",
        "entry_list",
        "entry_delete",
        "entry_edit",
        "project_set_rate",
        "report",
        "invoice_summary",
        "export_csv",
        "license_status",
        "license_activate"
      ],
      "free_limits": "reports cover the last 7 days, 2 rated projects",
      "notes": "export_csv returns a download link valid for one hour instead of a local file path"
    },
    {
      "name": "price-tracker",
      "url": "https://mcp.zovo.one/mcp/price-tracker",
      "tools": [
        "price_check",
        "watch_add",
        "watch_list",
        "watch_remove",
        "watch_refresh",
        "price_history",
        "price_add_manual",
        "alerts_pending",
        "license_status",
        "license_activate"
      ],
      "free_limits": "3 watches, last 30 observations per watch",
      "notes": "public http/https pages only; private, loopback, link-local and metadata addresses are refused, before and after every redirect"
    },
    {
      "name": "invoice",
      "url": "https://mcp.zovo.one/mcp/invoice",
      "tools": [
        "business_set",
        "client_add",
        "client_list",
        "invoice_create",
        "invoice_from_hours",
        "invoice_list",
        "invoice_get",
        "invoice_mark_paid",
        "invoice_pdf",
        "overdue_report",
        "license_status",
        "license_activate"
      ],
      "free_limits": "3 invoices per calendar month, footer line on the rendered document",
      "notes": "invoice_pdf renders a print-ready HTML document behind a one-hour download link"
    },
    {
      "name": "expense-tracker",
      "url": "https://mcp.zovo.one/mcp/expense-tracker",
      "tools": [
        "expense_add",
        "expense_list",
        "expense_update",
        "expense_delete",
        "receipt_attach",
        "category_rules",
        "expense_settings",
        "expense_summary",
        "mileage_add",
        "expense_export",
        "expense_to_invoice",
        "license_status",
        "license_activate"
      ],
      "free_limits": "last 30 days, 3 projects, 5 category rules, 200 export rows, 20 rebill items per call, csv/json export (xlsx is Pro)",
      "notes": "expense_export returns a download link valid for one hour (xlsx is delivered as the real binary workbook). receipt_attach is not available: this endpoint has no filesystem, so attach receipts with the stdio server"
    },
    {
      "name": "spreadsheet",
      "url": "https://mcp.zovo.one/mcp/spreadsheet",
      "tools": [
        "sheet_load",
        "sheet_files",
        "sheet_unload",
        "sheet_info",
        "sheet_read",
        "sheet_query",
        "sheet_stats",
        "sheet_find",
        "sheet_add_column",
        "sheet_convert",
        "sheet_write",
        "license_status",
        "license_activate"
      ],
      "mode": "inline data",
      "how": "There is no disk here, so you send the data instead of a path: sheet_load {name, csv} or sheet_load {name, xlsx_base64} stores it under your token, and every other tool takes that name as its `path` argument. sheet_files lists what is loaded, sheet_unload deletes one.",
      "outputs": "sheet_convert, sheet_write and sheet_add_column write into the same per-token store and return a download link valid for one hour; xlsx comes back as the real binary workbook.",
      "free_limits": "5,000 rows and 5 MB read per sheet, 500 rows written per file",
      "storage": "2 MB of loaded sheets per token"
    }
  ],
  "limits": {
    "request_body_bytes": 262144,
    "jsonrpc_batching": "not accepted - send one request object per POST",
    "stored_bytes_per_token_per_endpoint": {
      "default": 524288,
      "spreadsheet": 2097152
    },
    "download_ttl_seconds": 3600,
    "idle_data_retention_days": 35
  },
  "stdio_install": "claude mcp add <name> -- npx -y @theluckystrike/mcp-<name>",
  "remote_install": "claude mcp add --transport http <name> https://mcp.zovo.one/mcp/<name> --header \"Authorization: Bearer <token>\"",
  "source": "https://github.com/theluckystrike/mcp-servers"
}