1 · Start here
+AI MCP
+Point Claude.ai, ChatGPT, Grok, Claude Desktop, or Cursor at https://mcp.verae.ai/mcp. The assistant calls stamp / verify / hash_report. First connect may open Verae browser login.
diff --git a/site/developers.html b/site/developers.html new file mode 100644 index 0000000..6b3a305 --- /dev/null +++ b/site/developers.html @@ -0,0 +1,268 @@ + + +
+ + +
+
+Application Client · OpenAPI
+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.
+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).
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) |
+ |
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+ + +
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())
+
+ 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" });
+
+ 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}"
+
+ 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"}}}'
+ 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+ +
+
+Same MCP · many clients
+Hash locally; stamp digests only against the public Streamable HTTP endpoint. Start with AI MCP, then choose a browser, Mac/Windows UI, CLI, JS, or curl client. File bytes never upload.
+1 · Start here
+Point Claude.ai, ChatGPT, Grok, Claude Desktop, or Cursor at https://mcp.verae.ai/mcp. The assistant calls stamp / verify / hash_report. First connect may open Verae browser login.
2 · Browser
+Full Register / Verify client in the browser (WASM hash, auth defaults, CSV / JSON / PDF / text). Digests only.
+ +2 · Explorer
+Public lookup: paste a receipt CID, SHA-256, or drop a file (hashed in-browser). On-chain merkle opens in the blockchain explorer.
+ +3 · UI · Mac
+Native SwiftUI Verae Timestamping — Developer ID signed, Apple-notarized universal zip. No TestFlight. Download → unzip → Open.
+ + +3 · UI · Windows
+Frozen amd64 EXEs — PySide6 GUI, CLI, optional hasher. SmartScreen warns (not code-signed); verify SHA-256 first.
+4 · CLI
+Official Python client: hash locally, stamp via MCP, write receipts under ~/.verae/receipts/. On Windows use verae-timestamp.exe.
uvx verae-mcp-timestamping-client \ + --url https://mcp.verae.ai/mcp \ + --scope global \ + ./document.pdf+
5 · JavaScript
+Any web app: WASM/WebCrypto hash in-page, then POST Streamable HTTP JSON-RPC to /mcp (CORS *). Session id from Mcp-Session-Id.
6 · curl
+initialize → notifications/initialized → tools/call (stamp, verify, hash_report). Include Accept: application/json, text/event-stream.
7 · Application Client
+Non-AI apps: Python & TypeScript SDKs, digests-only OpenAPI, curl to VeraeTime (global) or MCP (local/shared). Logical SDK paths — not REST routes on this host.
+Also
+Download verae-sha256 for your OS, or hash in-browser with WASM. Optional local MCP: uvx verae-mcp-timestamping-server and … setup for machine login.
Stable artifact URLs on this host. macOS zip is Developer ID + notarized (not MAS).
+ +Universal Verae Timestamping.app (v0.2.1 / build 7), signed Developer ID Application: FlightLookup Inc. and Apple-notarized with staple. Gatekeeper accepts as Notarized Developer ID.
+VeraeTimestamping-macos-universal.zip (~546 KiB)./Applications (optional).xattr -dr com.apple.quarantine "/Applications/Verae Timestamping.app".https://mcp.verae.ai/mcp).Optional App Store–style beta. Prefer the direct notarized zip if you do not want TestFlight. External testing still requires Apple Beta App Review — until that lands, invites are added manually for your Apple ID.
+When external Beta Review is approved, open:
+ + + +Submit the Apple ID email you use for TestFlight. The server adds you to the external testers group via App Store Connect and resends the invitation.
+ + + +