HourProof — volunteer/service hour ledger (no AI)
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Deterministic check of logged service hours: bad dates, impossible totals, duplicates. No AI.
| Author | app.rowb.hourproof |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 1816 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"service hour ledger (no AI)": {
"url": "https://hourproof.rowb.app/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (6)
check_hoursCheck 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.
Parameters:
entries(required) — array — Entries to check. Each: {date:"YYYY-MM-DD", hours:number, activity:"what was done", organization:"where", category?:"tutoring", notes?}.as_of— string — Treat this date as "today" (YYYY-MM-DD) when rejecting future dates. Defaults to the server date.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_rulesThe 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.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_recordOpen an hour ledger for one student (returns a record id). Requires a bearer key.
Parameters:
student_name(required) — stringprogram— string — School, honor society, or program the hours are being collected for.period_end— stringperiod_start— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
add_entriesAppend logged hours to an existing record. Requires a bearer key.
Parameters:
record_id(required) — stringentries(required) — array
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_record_summaryTotals, per-category breakdown, and every issue found, for one record. Requires a bearer key.
Parameters:
record_id(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
request_signoffCreate a one-time URL a supervisor can open to confirm the recorded hours. Requires a bearer key. The token is single use.
Parameters:
record_id(required) — stringsupervisor_name— stringsupervisor_email— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.