verae-mcp-timestamping-server/docs/api.md
George Lambert 1ca834900e feat: site WIP — downloads, explorer, hasher, TestFlight enroll
Commit restored mcp.verae.ai site pages (app, register, macos, windows,
explorer), hasher/download artifacts, index/sample/hasher updates, ledger
and global_client improvements, NATS stamp helper, and TestFlight enroll
service. Ignore debug-trace/ and editor backups. Standard Readme for
download and enroll docs.
2026-09-29 11:18:59 -04:00

99 lines
3.5 KiB
Markdown

# Tool API
Server name: `verae-timestamping`.
## stamp
| Argument | Default | Meaning |
| --- | --- | --- |
| `sha256` | required | 64 hex characters |
| `scope` | `local` | `local`, `shared`, or `global` |
| `cube_id` | empty | Stored on the local receipt. Sent only as a local field on the global receipt object; the VeraeTime POST body is the digest |
| `org_id` | empty | Local idempotency key. Ignored by the global client |
Returns `{ "receipts": [ Receipt ] }`.
Receipt fields: `receipt_id`, `hash`, `scope`, `cube_id`, `org_id`, `created_at`, `merkle`, `restamp_of`.
## verify
| Argument | Default | Meaning |
| --- | --- | --- |
| `receipt_id` | required | Local id or VeraeTime certificate / job id |
| `want_scope` | empty | `global` forces VeraeTime. A weaker scope fails closed when the stored scope ranks lower |
Returns `{ "valid": bool, "error": string or null, "receipt": Receipt or null }`.
Scope rank: local < shared < global.
## hash_report
| Argument | Default | Meaning |
| --- | --- | --- |
| `sha256` | required | Digest to list |
| `org_id` | empty | Filter when set |
| `want_scope` | empty | Drop receipts below this rank |
Returns `{ "receipts": [ ... ] }`. `want_scope=global` queries VeraeTime `GET /api/hash/{sha256}` (Carfax). Empty `want_scope` merges the local file ledger with the central history.
## login
| Argument | Default | Meaning |
| --- | --- | --- |
| `username` | required | VeraeTime account |
| `password` | required | VeraeTime password |
`POST /auth/login`. Stores `access_token`, `id_token`, `auth_token`, `expires_at`, `username`, and `password` in the auth properties file (mode `0600`) and replaces the in-memory JWT. Returns `username`, `role`, and `expires_at`. The JWT is not returned.
## session
No arguments. `GET /auth/validate` with the stored JWT.
Returns `valid`, `username`, `role`, and `expires_at`.
## signup
| Argument | Default | Meaning |
| --- | --- | --- |
| `username` | required | New account |
| `password` | required | New password |
`POST /auth/signup` with no bearer token. The timestamping service creates the account with role `user`. Returns `id`, `username`, and `role`. Does not replace the JWT stored for `stamp`. A new account calls `login` to become the stored session. `create_user` remains the admin path and can set `admin`.
## create_user
| Argument | Default | Meaning |
| --- | --- | --- |
| `username` | required | New account |
| `password` | required | New password |
| `role` | required | `user` or `admin` |
`POST /auth/users` with the stored JWT. Refuses unless `session` reports role `admin`. Returns `id`, `username`, and `role`. Public registration is `signup`. `create_user` is how an admin sets a role.
A stored login is refreshed when `stamp` or `verify` runs and `expires_at` is missing or within 5 minutes, if `username` and `password` are in the auth file.
## Environment
| Name | Default |
| --- | --- |
| `VERAE_GLOBAL_URL` | `https://api.veraetime.net` |
| `VERAE_GLOBAL_TOKEN` | empty (then auth.properties) |
| `VERAE_AUTH_PROPERTIES` | `~/.verae/auth.properties` |
| `VERAE_LEDGER_PATH` | `~/.verae/mcp-timestamp-local.json` |
| `VERAE_MCP_TRANSPORT` | `stdio` |
| `VERAE_MCP_HOST` | `127.0.0.1` |
| `VERAE_MCP_PORT` | `8000` |
| `VERAE_MCP_CORS` | unset. `1` adds CORS for the sample page |
## Client config (stdio)
```json
{
"mcpServers": {
"verae-timestamping": {
"command": "uv",
"args": ["run", "--directory", "/Users/marchon/research/modelcontextprotocol/verae-mcp-timestamping-server", "verae-mcp-timestamping-server"]
}
}
}
```