HourProof — volunteer/service hour ledger (no AI)

Deterministic check of logged service hours: bad dates, impossible totals, duplicates. No AI.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
76%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~526Tokens (tool definitions)
~556 BTypical response size
Minimal attention impact (0.41% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "hours": {
      "url": "https://hourproof.rowb.app/mcp"
    }
  }
}

Remote endpoints

https://hourproof.rowb.app/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check_hours(entries, as_of)

Check a list of logged service/volunteer hours for internal consistency: bad dates, non-positive or impossible day totals, missing organization, and days above this service's 8-hour flag. Deterministic arithmetic only - no AI. It does NOT decide whether the hours satisfy any school or award requirement.

Input Schema

{
  "type": "object",
  "properties": {
    "entries": {
      "type": "array",
      "description": "Entries to check. Each: {date:\"YYYY-MM-DD\", hours:number, activity:\"what was done\", organization:\"where\", category?:\"tutoring\", notes?}.",
      "items": {
        "type": "object"
      }
    },
    "as_of": {
      "type": "string",
      "description": "Treat this date as \"today\" (YYYY-MM-DD) when rejecting future dates. Defaults to the server date."
    }
  },
  "required": [
    "entries"
  ]
}
🟢get_rules

The exact rule table this service checks against, with the reason each rule is checkable, plus what it explicitly does not claim. Quote it if you need to explain a result.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡create_record(student_name, program, period_start, period_end)

Open an hour ledger for one student (returns a record id). Requires a bearer key.

Input Schema

{
  "type": "object",
  "properties": {
    "student_name": {
      "type": "string"
    },
    "program": {
      "type": "string",
      "description": "School, honor society, or program the hours are being collected for."
    },
    "period_start": {
      "type": "string"
    },
    "period_end": {
      "type": "string"
    }
  },
  "required": [
    "student_name"
  ]
}
🟡add_entries(record_id, entries)

Append logged hours to an existing record. Requires a bearer key.

Input Schema

{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string"
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "required": [
    "record_id",
    "entries"
  ]
}
🟢get_record_summary(record_id)

Totals, per-category breakdown, and every issue found, for one record. Requires a bearer key.

Input Schema

{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string"
    }
  },
  "required": [
    "record_id"
  ]
}
🟡request_signoff(record_id, supervisor_name, supervisor_email)

Create a one-time URL a supervisor can open to confirm the recorded hours. Requires a bearer key. The token is single use.

Input Schema

{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string"
    },
    "supervisor_name": {
      "type": "string"
    },
    "supervisor_email": {
      "type": "string"
    }
  },
  "required": [
    "record_id"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools