Verae

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).

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

Logical paths such as /stamp document SDK methods; they are not HTTP routes on mcp.verae.ai in this phase.

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())

Install: uv add verae-mcp-timestamping-client or pip install verae-mcp-timestamping-client.

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" });

Install: npm install @verae/timestamping-client.

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}"

On 200 with certificate / existing, reuse that CID. Otherwise poll GET /api/status/{jobId}.

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

Keys typically include access_token, expires_at, and username. Directory ~/.verae is mode 700.