Application Client · OpenAPI
Build without an AI host
Stamp, verify, and look up digests from Python, TypeScript, or raw HTTP. Paths in the OpenAPI file are logical SDK operations — not deployed REST routes on this host. File bytes never leave the client; only SHA-256 digests are sent.
Overview
The Application Client routes by scope: global hits VeraeTime directly; local / shared use MCP Streamable HTTP at /mcp. SDKs refuse content-byte argument names (content, bytes, file, data, path, body, payload, blob, archive).
Defaults: MCP https://mcp.verae.ai/mcp · VeraeTime https://api.veraetime.net. Global stamp sends restamp: false (reuse an existing certificate when present).
Transport split
One Application API surface; two backends. Auth ops always use VeraeTime with a caller-held JWT.
| Operation | local / shared | global |
|---|---|---|
stamp |
MCP tool stamp |
VeraeTime POST /api/timestamp |
verify |
MCP tool verify |
VeraeTime POST /api/verify |
hash_report |
MCP tool hash_report |
VeraeTime GET /api/hash/{sha256} |
| signup / login / session / create_user | VeraeTime /auth/* (direct; apps do not rely on MCP account tools) |
|
OpenAPI
Normative digests-only contract for the Application Client SDKs (OpenAPI 3.1). Download or fetch from this site:
https://mcp.verae.ai/openapi/application-client.yaml
Python
Package verae-mcp-timestamping-client — ApplicationClient routes by scope.
import asyncio
from verae_mcp_timestamping_client import ApplicationClient
async def main():
client = ApplicationClient()
print(await client.stamp("<64-hex>", scope="global"))
print(await client.stamp("<64-hex>", scope="local"))
asyncio.run(main())
TypeScript
Package @verae/timestamping-client. Method names are camelCase (hashReport); OpenAPI stays snake_case.
import { ApplicationClient } from "@verae/timestamping-client";
const client = new ApplicationClient({ token: process.env.VERAE_GLOBAL_TOKEN });
// Global → VeraeTime POST /api/timestamp (restamp: false)
const global = await client.stamp("a".repeat(64), { scope: "global" });
// Local → MCP tools/call stamp
const local = await client.stamp("a".repeat(64), { scope: "local" });
curl · global (VeraeTime)
Direct HTTPS to api.veraetime.net. Bearer token from env or ~/.verae/auth.properties.
# TOKEN from VERAE_GLOBAL_TOKEN or access_token in ~/.verae/auth.properties
DIGEST=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
curl -sS -X POST https://api.veraetime.net/api/timestamp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d "{\"data\":\"$DIGEST\",\"digest\":\"$DIGEST\",\"hashAlg\":\"SHA256\",\"restamp\":false}"
curl · MCP local
Streamable HTTP at /mcp. Capture Mcp-Session-Id from initialize, then notifications/initialized, then tools/call.
# 1) initialize — note Mcp-Session-Id in response headers
curl -sS -D - -X POST https://mcp.verae.ai/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"dev-curl","version":"1.0.0"}}}'
# 2) notifications/initialized (same session)
curl -sS -X POST https://mcp.verae.ai/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'Mcp-Session-Id: SESSION' \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
# 3) tools/call stamp (local scope)
curl -sS -X POST https://mcp.verae.ai/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'Mcp-Session-Id: SESSION' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"stamp","arguments":{"sha256":"DIGEST_HEX","scope":"local"}}}'
Auth
Machine login writes a JWT under ~/.verae/auth.properties (mode 600). Do not paste tokens into chat or commit the file.
Resolve order (Application Client / VeraeTime transport): constructor token → VERAE_GLOBAL_TOKEN → access_token / auth_token / id_token in auth.properties (VERAE_AUTH_PROPERTIES overrides the path).
uvx verae-mcp-timestamping-server setup # writes ~/.verae/auth.properties (mode 600); does not print the token uvx verae-mcp-timestamping-server session