Compare commits

..
Author SHA1 Message Date
2eb9ec72c6 feat(mcp): oauth_start / oauth_complete for social login
Some checks failed
test-and-deploy / test (push) Failing after 10m46s
test-and-deploy / deploy-138 (push) Has been cancelled
Browser OAuth via customer.verae.ai portal (authentik at auth.verae.ai).
oauth_start returns authorize_url+state; oauth_complete polls until xVerae-
access_token. Open without bearer on public MCP; welcome/register copy updated.
2026-10-20 16:40:50 -04:00
3ec1f0516b feat(mcp): optional receipt_format on stamp/verify (text/PDF/JSON/MD/CSV/TSV)
Some checks failed
test-and-deploy / test (push) Failing after 12m55s
test-and-deploy / deploy-138 (push) Has been cancelled
Add receipt_format to stamp and verify. Omitted → text; receipt|PDF-Receipt → PDF;
JSON-Receipt → JSON; MD|MD-Receipt; CSV|CSV-Receipt; TSV|TSV-Receipt.

Stamp always returns receipts[] and adds artifacts[] in the chosen format.
Stdio writes ~/.verae/receipts (0600); public MCP returns content_text/content_base64 only.
Verify accepts inline receipt or receipt_path (stdio), parses id, and re-emits an artifact.

Vendors pdfcert (+ slim statuslang, gofpdf) for CERT-01 PDF. Also lands welcome tool
and email-username helpers already wired into register/public paths.
2026-10-20 16:02:20 -04:00
13d1c5851b fix(mcp): require xVerae- commercial key when EDGE_URL set; batch via edge 2026-10-17 00:26:50 -04:00
93c2548450 docs: Standard Readme update for production board pack
Some checks failed
test-and-deploy / test (push) Failing after 12m6s
test-and-deploy / deploy-138 (push) Has been cancelled
2026-10-12 19:24:32 -04:00
d49c51c349 feat: single-billing edge path for MCP + open public signup
Some checks failed
test-and-deploy / test (push) Successful in 14s
test-and-deploy / deploy-138 (push) Failing after 15m9s
- Public signup no longer requires a caller bearer (POST /auth/signup)
- create_user remains admin-only (POST /auth/users)
- Optional VERAE_MCP_EDGE_URL bills global stamps via zap.verae.ai
- Clearer public auth errors and instructions for Grok/clients
2026-10-12 14:59:31 -04:00
369f9210bd fix(auth): clear public write errors and Grok client path
Some checks failed
test-and-deploy / test (push) Failing after 12m11s
test-and-deploy / deploy-138 (push) Has been cancelled
Public DEC-654 still requires a caller bearer; anonymous session now
returns that guidance as a tool error instead of silent valid:false.
Error text names JWT and API key, Grok bearer_token_file, and local
stdio. BearerFromRequest also accepts X-Api-Key / X-Verae-Key.
Document Grok stdio vs public URL; add scripts/sync-mcp-bearer.sh.
2026-10-12 14:09:22 -04:00
Cursor Agent
dc39095694
Add an ns1 test-and-deploy workflow for the Go MCP server.
All checks were successful
test-and-deploy / test (push) Successful in 13s
test-and-deploy / deploy-138 (push) Successful in 13s
scripts/deploy-138.sh tests with Go 1.26.9, swaps the live binary, and rolls back if port 8000 stops answering. Port 0 in the embedded NATS listener now picks an ephemeral port so the test can run while 4222 is already taken.
2026-10-11 05:52:17 +00:00
Cursor Agent
deb0e251de
Send global stamps as a verae-meta-git/1 history.
Optional metadata or restamp builds the same commit history as node-red. A call that omits both stays digest-only with restamp false. Local and shared stamps reject metadata.
2026-10-11 05:37:24 +00:00
Grok Bot
ec899f5e11 Public server: anonymous verify/hash_report never rate limited (DEC-660); stamp_batch tool charged per item with the caller's key (DEC-659); 402 balance message passed through (DEC-658) 2026-10-10 15:26:37 -04:00
Grok Bot
e24d466f2b Merge d-write-lockdown (DEC-655): live on mcp.verae.ai since 2026-10-10 13:08 ET (binary built from 10c8634) 2026-10-10 13:37:43 -04:00
f021ee46b4 docs: L5/L7 PASS after laptop VeraeTime login refresh
Refreshed ~/.verae/auth.properties via verae-timestamp login; retested
ApplicationClient global hash_report and transaction_log_test (unique 1).
2026-09-29 12:33:19 -04:00
16609f5259 docs: full Go MCP cutover test report (2026-09-29)
15 cases: 13 pass, 2 fail (laptop VeraeTime auth only). Includes unit,
public MCP, 20x global idempotent stamp, ApplicationClient, tsnats,
site pages, and sibling hostnames.
2026-09-29 12:29:12 -04:00
59 changed files with 3985 additions and 281 deletions

View file

@ -0,0 +1,24 @@
name: test-and-deploy
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
jobs:
test:
runs-on: 138
steps:
- uses: actions/checkout@v4
- name: Unit tests
run: bash scripts/test-138.sh
deploy-138:
needs: test
if: success() && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
runs-on: 138
steps:
- uses: actions/checkout@v4
- name: Deploy with automatic health rollback
run: bash scripts/deploy-138.sh

1
.gitignore vendored
View file

@ -3,3 +3,4 @@
bin/
*.exe
.venv/
Verae-Secret-Credentials.MD

View file

@ -2,106 +2,46 @@
[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
Go MCP timestamping server for Verae. Digests only; sibling to the Python server.
Implements the same tools as https://mcp.verae.ai/mcp (`stamp`, `verify`, `hash_report`, auth tools) using the official MCP Go SDK. Designed for shadow deploy beside Python, then cutover.
AI assistants use MCP. Bulk app workers can import `pkg/tsnats` for core NATS request/reply on `verae.ts.*` (job-complete stays ephemeral; no JetStream for those events). Cutover steps: [`docs/cutover.md`](docs/cutover.md).
MCP server for digests-only timestamping (public HTTP and local stdio).
## Table of Contents
- [Background](#background)
- [Install](#install)
- [Usage](#usage)
- [Contributing](#contributing)
- [License](#license)
## Background
Public writes require caller Bearer (DEC-654). Optional VERAE_MCP_EDGE_URL bills via zap.verae.ai.
Account and auth are required for use. On connect, instructions tell the AI to welcome the user and call tool `welcome`, then `signup` / `login`.
Only `welcome`, `signup`, and `login` work without a bearer. `signup` / `login` return `access_token` (public HTTP never writes the host credential).
Grok: bearer_token_file or local stdio. Job-complete is core NATS only.
**Co-contributors:** Grok (xAI), George Lambert, Scott "R00tPiG Security" Lindsey — Verae Inc. ([verae.com](https://verae.com)).
## Install
```sh
cd verae-mcp-timestamping-server-go
go build -o bin/verae-mcp-timestamping-server ./cmd/verae-mcp-timestamping-server
```
Requires Go 1.26+. Design: `docs/superpowers/specs/2026-09-29-go-mcp-timestamping-server-design.md`. Shadow systemd unit (not installed by this build): `deploy/verae-mcp-timestamping-go.service`.
## Usage
Shadow beside Python (`:8000` stays live):
```sh
VERAE_MCP_TRANSPORT=streamable-http \
VERAE_MCP_HOST=127.0.0.1 \
VERAE_MCP_PORT=8001 \
VERAE_NATS_LISTEN=127.0.0.1:4223 \
VERAE_MCP_REQUIRE_BEARER=0 \
./bin/verae-mcp-timestamping-server
./bin/verae-mcp-timestamping-server -transport http -addr :8000
# or -transport stdio for laptop host auth
```
Point MCP clients at `http://127.0.0.1:8001/mcp`. For stdio: `-transport stdio` or `VERAE_MCP_TRANSPORT=stdio`.
| Variable | Default | Notes |
| --- | --- | --- |
| `VERAE_MCP_TRANSPORT` | `streamable-http` | or `stdio` |
| `VERAE_MCP_HOST` | `127.0.0.1` | HTTP bind |
| `VERAE_MCP_PORT` | `8000` | shadow examples use `8001` |
| `VERAE_NATS_LISTEN` | `127.0.0.1:4223` | embedded NATS; set empty to disable |
| `VERAE_MCP_REQUIRE_BEARER` | `0` | `0` = host-token keeper when no caller bearer; `1` = require caller bearer |
| `VERAE_GLOBAL_URL` | `https://api.veraetime.net` | |
| `VERAE_AUTH_PROPERTIES` | `$HOME/.verae/auth.properties` | |
| `VERAE_GLOBAL_TOKEN` | empty | optional static host bearer |
| `VERAE_LEDGER_PATH` | `$HOME/.verae/mcp-timestamp-local.json` | |
| `VERAE_MCP_CORS` | off | set `1` for browser CORS |
Global stamps use VeraeTime with auth from `auth.properties` (or caller Bearer). Embedded NATS serves `verae.ts.*`; job-complete is core `verae.ts.completed` only.
Parity smoke when Python `:8000` and Go `:8001` are both up:
```sh
./scripts/parity_smoke.sh
```
### pkg/tsnats
Bulk workers talk to the embedded (or any) NATS URL. Digests only; `SubscribeCompleted` is core NATS, not JetStream.
```go
package main
import (
"context"
"log"
"os"
"git.georgelambert.org/marchon/verae-mcp-timestamping-server-go/pkg/tsnats"
)
func main() {
url := os.Getenv("NATS_URL")
if url == "" {
url = "nats://127.0.0.1:4223"
}
client, err := tsnats.Connect(url)
if err != nil {
log.Fatal(err)
}
defer client.Close()
ctx := context.Background()
digest := "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
receipts, err := client.Stamp(ctx, digest, tsnats.StampOptions{Scope: "global"})
if err != nil {
log.Fatal(err)
}
log.Printf("receipts: %+v", receipts)
}
```
Runnable sketch: `examples/tsnats-bulk/main.go`.
Optional `receipt_format` on `stamp` / `verify`: omit → text; `receipt` / `PDF-Receipt` → PDF; `JSON-Receipt` → JSON; `MD` / `MD-Receipt`; `CSV` / `CSV-Receipt`; `TSV` / `TSV-Receipt`. Stdio writes under `~/.verae/receipts`; public MCP returns `content_text` / `content_base64` only.
## Contributing
Questions: this research workspace / marchon@gmail.com. PRs coordinated in-workspace first. Protocol questions: https://github.com/modelcontextprotocol.
Questions: open an issue on the project Forgejo/GitHub remote, or contact Verae engineering.
PRs are accepted when they include tests and do not leak secrets.
## License
UNLICENSED © George Lambert
UNLICENSED © Verae Inc. (verae.com)

View file

@ -10,6 +10,7 @@ import (
"os/signal"
"syscall"
"git.georgelambert.org/marchon/verae-mcp-timestamping-server-go/internal/edgebill"
"git.georgelambert.org/marchon/verae-mcp-timestamping-server-go/internal/embednats"
"git.georgelambert.org/marchon/verae-mcp-timestamping-server-go/internal/ledger"
"git.georgelambert.org/marchon/verae-mcp-timestamping-server-go/internal/server"
@ -32,6 +33,10 @@ func main() {
}
global := veraetime.NewClient(cfg.GlobalURL, veraetime.WithAuthPath(cfg.AuthPath))
keeper := veraetime.NewKeeper(global, cfg.AuthPath)
edge := edgebill.FromEnv()
if edge != nil {
log.Printf("MCP global stamps bill via edge %s (channel=%s)", edge.BaseURL, edge.Channel)
}
emb, err := embednats.Start(embednats.Options{
Listen: cfg.NATSListen,
@ -54,6 +59,7 @@ func main() {
Ledger: led,
Global: global,
Keeper: keeper,
Edge: edge,
AuthPath: cfg.AuthPath,
GlobalURL: cfg.GlobalURL,
RequireBearer: cfg.RequireBearer,
@ -82,6 +88,7 @@ func main() {
Ledger: led,
Global: global,
Keeper: keeper,
Edge: edge,
RequireBearer: cfg.RequireBearer,
})
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)

View file

@ -0,0 +1,145 @@
# Go MCP cutover — full test report
**Run ID:** `2026-09-29T162528Z-go-mcp-cutover`
**Finished (UTC):** 2026-09-29T16:28:00Z (approx)
**Subject under test:** Go `verae-mcp-timestamping-server` on ns1 replacing Python
**Binary:** `/opt/verae/verae-mcp-timestamping-server-go/bin/verae-mcp-timestamping-server`
**Git (local):** `a249564` (+ Caddy fix for `mcp.georgelambert.org` during this run)
**Forgejo:** https://git.georgelambert.org/marchon/verae-mcp-timestamping-server-go
## Executive summary
| Metric | Value |
| --- | --- |
| Cases run | **15** |
| Passed | **15** (after L5/L7 retest) |
| Failed | **0** |
| Go MCP live path | **Healthy** (`127.0.0.1:8000`, embedded NATS `127.0.0.1:4229`) |
Initial run had 2 laptop-auth failures (expired `~/.verae/auth.properties`). After `verae-timestamp login` (expires_at → 2026-09-30T07:32:28-09:00), **L5 and L7 retested PASS**.
## Deploy snapshot
| Setting | Value |
| --- | --- |
| systemd unit | `verae-mcp-timestamping.service` |
| Drop-ins | `go-cutover.conf`, `verae-ai.conf` |
| `VERAE_MCP_PORT` | `8000` |
| `VERAE_NATS_LISTEN` | `127.0.0.1:4229` |
| `VERAE_MCP_REQUIRE_BEARER` | `0` (host-token fallback) |
| `VERAE_AUTH_PROPERTIES` | `/var/lib/verae-mcp/auth.properties` |
| Public hosts | `mcp.verae.ai`, `mcp.veraetime.net`, `mcp.georgelambert.org` → `127.0.0.1:8000` |
**During this run:** `mcp.georgelambert.org` Caddy upstream was corrected from `10.1.10.128:8000` (502) to `127.0.0.1:8000`. A `.bak` file that caused “ambiguous site definition” was moved out of `/etc/caddy/sites/`.
## Results matrix
| ID | Case | Status | Notes |
| --- | --- | --- | --- |
| U1 | Go unit tests (`go test ./...`) | **PASS** | authctx, embednats, ledger, server, tools, veraetime, digest, tsnats |
| U2 | Python client unit tests | **PASS** | 47 passed |
| U3 | Python server unit tests | **PASS** | 34 passed |
| L1 | Public MCP suite (`mcp.verae.ai`) | **PASS** | tools/list (7 tools), global hash_report, local stamp+verify, session valid admin |
| L2 | MCP global stamp (unique digest) | **PASS** | host-token fallback |
| L3 | MCP 20× same digest global stamp | **PASS** | unique=1, same=True, ~3.92s, CID `QmXgqQn8…` |
| L4 | Python `ApplicationClient` via MCP | **PASS** | local stamp, verify, hash_report |
| L5 | `ApplicationClient` direct VeraeTime | **PASS** (retest) | After `verae-timestamp login`; hash_report global ≥1 receipt |
| L6 | CLI `verae-timestamp hash` | **PASS** | 64-hex digest |
| L7 | `transaction_log_test.py` (laptop → API) | **PASS** (retest) | unique 1 / same True; `debug-trace/2026-09-29T163256Z-verae-debug-test/` |
| L8 | `mcp.veraetime.net` tools/list | **PASS** | same Go process |
| L9 | `mcp.georgelambert.org` MCP | **PASS** | after Caddy upstream fix; session OK |
| L10 | `pkg/tsnats` → embedded NATS `:4229` | **PASS** | local stamp via SSH tunnel |
| L11 | Static site pages on `mcp.verae.ai` | **PASS** | `/`, developers, ways, openapi, app, explorer |
| L12 | ns1 loopback 5× global idempotent | **PASS** | unique=1, same CID `QmXgqQn8…` |
## Case details
### U1 — Go unit tests
All packages green. No FAIL lines in `logs/u1-go-unit.txt`.
### U2 / U3 — Python suites
Client 47 passed; server 34 passed. Confirms Application Client and Python GlobalClient libraries still build/test while Go owns production MCP.
### L1 — Public MCP suite (`https://mcp.verae.ai/mcp`)
1. `initialize` → `Mcp-Session-Id` present (stateful).
2. `tools/list` → `create_user`, `hash_report`, `login`, `session`, `signup`, `stamp`, `verify`.
3. `hash_report` global on Verae-Debug-Test digest → receipt `QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ`.
4. `stamp` scope=local → receipt issued; `verify` OK.
5. `session` → `valid: true`, `username: admin`, `role: admin` (host-token keeper).
### L2 / L3 — Global stamp paths
- L2: fresh digest stamped globally without client Bearer (`REQUIRE_BEARER=0`).
- L3: 20 sequential global stamps of digest `469e6159…` all returned the same CID; elapsed ~3.92s.
### L4 — ApplicationClient (MCP transport)
Local stamp → verify → hash_report through `https://mcp.verae.ai/mcp` succeeded.
### L5 / L7 — Laptop direct VeraeTime
**Initial fail:** expired laptop JWT (`expires_at=2026-09-29T06:20:17-09:00`).
**Fix:** `uv run verae-timestamp login` → new `expires_at=2026-09-30T07:32:28-09:00`, then `check-auth` OK.
**Retest:**
- L5: `ApplicationClient.hash_report(DIGEST, want_scope="global")` → receipts ≥ 1 → **PASS**
- L7: `uv run python scripts/transaction_log_test.py` → unique 1, same True → **PASS**
Output: `debug-trace/2026-09-29T163256Z-verae-debug-test/`
### L6 — CLI hash
`verae-timestamp hash` produced a valid SHA-256.
### L8 / L9 — Sibling public hostnames
- `mcp.veraetime.net`: PASS.
- `mcp.georgelambert.org`: initially 502 (wrong upstream); after Caddy fix → PASS.
### L10 — Embedded NATS client
`pkg/tsnats.Connect(nats://127.0.0.1:14229)` (tunnel to ns1 `:4229`) → `Stamp` scope=local → receipt ID returned.
### L11 — Static docs site
HTTP 200 for index, developers, ways, OpenAPI YAML, app, explorer.
### L12 — On-host MCP idempotency
From ns1 to `127.0.0.1:8000` with `Host: mcp.verae.ai`, 5× global stamp of Verae-Debug-Test → one CID.
## Failures — root cause and remediation
| ID | Root cause | Remediation | Status |
| --- | --- | --- | --- |
| L5 | Expired laptop JWT | `verae-timestamp login` then retest | **Fixed** |
| L7 | Same expired laptop JWT (20× 401) | Same login; retest wrote new debug-trace | **Fixed** |
## Artifacts
| Path | Contents |
| --- | --- |
| `results.csv` | Machine-readable PASS/FAIL |
| `logs/` | Per-case stdout/stderr |
| `logs/deploy-state.txt` | systemd drop-in snapshot |
| `logs/l3-20stamp.txt` | 20× CID list |
| `logs/l7-txlog.txt` | Laptop transaction_log output (401) |
Laptop `transaction_log_test` also wrote:
`verae-mcp-timestamping-server/debug-trace/2026-09-29T162648Z-verae-debug-test/`
## Conclusion
The Go MCP service on ns1 is **production-viable** for AI MCP clients and NATS bulk clients under the tested cases. Public tool parity, local ledger, global VeraeTime via host-token fallback, embedded NATS, and static docs all passed. Remaining fails are local developer credentials for direct API scripts.
## Rollback (reference)
```sh
sudo rm /etc/systemd/system/verae-mcp-timestamping.service.d/go-cutover.conf
sudo systemctl daemon-reload
sudo systemctl restart verae-mcp-timestamping.service
```

View file

@ -0,0 +1,15 @@
MainPID=799038
ActiveState=active
FragmentPath=/etc/systemd/system/verae-mcp-timestamping.service
DropInPaths=/etc/systemd/system/verae-mcp-timestamping.service.d/go-cutover.conf /etc/systemd/system/verae-mcp-timestamping.service.d/verae-ai.conf
[Service]
WorkingDirectory=/opt/verae/verae-mcp-timestamping-server-go
Environment=VERAE_MCP_PORT=8000
Environment=VERAE_NATS_LISTEN=127.0.0.1:4229
Environment=VERAE_MCP_REQUIRE_BEARER=0
Environment=VERAE_LEDGER_PATH=/var/lib/verae-mcp/mcp-timestamp-local.json
Environment=VERAE_AUTH_PROPERTIES=/var/lib/verae-mcp/auth.properties
Environment=VERAE_GLOBAL_URL=https://api.veraetime.net
# Clear Python ExecStart then set Go
ExecStart=
ExecStart=/opt/verae/verae-mcp-timestamping-server-go/bin/verae-mcp-timestamping-server

View file

@ -0,0 +1 @@
2026-09-29T16:28:26Z

View file

@ -0,0 +1,6 @@
TOOLS ['create_user', 'hash_report', 'login', 'session', 'signup', 'stamp', 'verify']
HASH_REPORT {"content": [{"type": "text", "text": "{\"receipts\":[{\"created_at\":\"2026-09-29T15:19:05.570331728Z\",\"hash\":\"469e615923b69c6b7291d8333699b5ad678b88d1afdc8d412c45a6d244fee0ec\",\"merkle\":\"113079\",\"receipt_id\":\"QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ\",\"scope\":\"global\"}]}"}], "structuredContent": {"receipts": [{"created_at": "2026-09-29T15:19:05.570331728Z", "hash": "469e615923b69c6b7291d8333699b5ad678b88d1afdc8d412c45a6d244fee0ec", "merkle": "113079", "receipt_id": "QmXgqQ
LOCAL_RECEIPT 14a344189150d80dd23880461751382d3228981484032f8e69f0ee5135645030
VERIFY None
SESSION {'expires_at': '2026-09-30T06:10:30-09:00', 'role': 'admin', 'username': 'admin', 'valid': True}
L1_OK

View file

@ -0,0 +1 @@
TSNATS_OK 1 56d0209cda360ab2210419699ca75acc2525ee0cf151fa79fe39737cef8f2bdf

View file

@ -0,0 +1,7 @@
200 https://mcp.verae.ai/
200 https://mcp.verae.ai/developers.html
200 https://mcp.verae.ai/ways.html
200 https://mcp.verae.ai/openapi/application-client.yaml
200 https://mcp.verae.ai/app.html
200 https://mcp.verae.ai/explorer.html
L11_OK

View file

@ -0,0 +1,7 @@
0 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
1 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
2 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
3 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
4 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
unique 1 same True
L12_OK

View file

@ -0,0 +1,2 @@
{"content": [{"type": "text", "text": "{\"receipts\":[{\"created_at\":\"2026-09-29T16:26:07.301696399Z\",\"hash\":\"14b7f33a56e1323382a60f6f00909b4ba9c3ef798cb8d7fb45c694eab874b426\",\"merkle\":\"\",\"receipt_id\":\"QmfQPVSAaYCTckDrv9jhf4BicQKiDvF1su2zcmKC2encve\",\"scope\":\"global\"}]}"}], "structuredContent": {"receipts": [{"created_at": "2026-09-29T16:26:07.301696399Z", "hash": "14b7f33a56e1323382a60f6f00909b4ba9c3ef798cb8d7fb45c694eab874b426", "merkle": "", "receipt_id": "QmfQPVSAaYCTckDrv9
L2_OK

View file

@ -0,0 +1,22 @@
0 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
1 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
2 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
3 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
4 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
5 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
6 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
7 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
8 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
9 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
10 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
11 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
12 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
13 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
14 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
15 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
16 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
17 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
18 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
19 QmXgqQn8eu6bpBmJ1Fm8xKUePfLREJdghsUkYijStGjVMQ
unique 1 same True elapsed_s 3.92
L3_OK

View file

@ -0,0 +1,2 @@
verify {'valid': True, 'error': None, 'receipt': {'receipt_id': '09c1697d2ab14b72f790fa9fd113cb875caa2f9105f2a12eeecc7b83cbc948d8', 'hash': '8b9ece235e6d6173b1bf192f32d3e5ef008e8303a3aab42b849cea50247d122b', 'scope': 'local', 'created_at': '2026-09-29T16:26:40Z', 'merkle': 'sha256:38d32058951e4c0288bce8ce1dfe99c2c515984da711a64ba198aeb398f77191', 'cube_id': '', 'org_id': '', 'restamp_of': ''}}
L4_OK 09c1697d2ab14b72f790fa9fd113cb875caa2f9105f2a12eeecc7b83cbc948d8

View file

@ -0,0 +1,23 @@
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
File "/Users/marchon/.local/share/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/Users/marchon/.local/share/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/Users/marchon/.local/share/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "<stdin>", line 6, in main
File "/Users/marchon/research/modelcontextprotocol/verae-mcp-timestamping-client/src/verae_mcp_timestamping_client/application_client.py", line 97, in hash_report
receipts = await asyncio.to_thread(self.veraetime.hash_report, digest)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/marchon/.local/share/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/asyncio/threads.py", line 25, in to_thread
return await loop.run_in_executor(None, func_call)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/marchon/.local/share/uv/python/cpython-3.13.7-macos-aarch64-none/lib/python3.13/concurrent/futures/thread.py", line 59, in run
result = self.fn(*self.args, **self.kwargs)
File "/Users/marchon/research/modelcontextprotocol/verae-mcp-timestamping-client/src/verae_mcp_timestamping_client/veraetime_transport.py", line 359, in hash_report
raise _http_error(status, detail, what="hash report")
verae_mcp_timestamping_client.veraetime_transport.AuthError: hash report HTTP 401: auth required — call login or set VERAE_GLOBAL_TOKEN / ~/.verae/auth.properties

View file

@ -0,0 +1 @@
0f9e6d5df4b10c0e07ee45484c14008fb50afc7276d292a3bfa2a2fd442f95ca /tmp/verae-full-report-cli.txt

View file

@ -0,0 +1,4 @@
wrote /Users/marchon/research/modelcontextprotocol/verae-mcp-timestamping-server/debug-trace/2026-09-29T162648Z-verae-debug-test/transaction-log-test.html
source Verae-Debug-Test digest 469e615923b69c6b7291d8333699b5ad678b88d1afdc8d412c45a6d244fee0ec
unique 0 same False
txdir=debug-trace/2026-09-29T162648Z-verae-debug-test

View file

@ -0,0 +1,2 @@
['create_user', 'hash_report', 'login', 'session', 'signup', 'stamp', 'verify']
L8_OK

View file

@ -0,0 +1,5 @@
HTTP/2 502
alt-svc: h3=":443"; ma=2592000
server: Caddy
date: Tue, 29 Sep 2026 16:27:43 GMT

View file

@ -0,0 +1,2 @@
{"jsonrpc":"2.0","id":2,"result":{"content":[{"type":"text","text":"{\"expires_at\":\"2026-09-30T06:10:30-09:00\",\"role\":\"admin\",\"username\":\"admin\",\"valid\":true}"}],"structuredContent":{"expires_at":"2026-09-30T06:10:30-09:00","role":"admin","username":"admin","valid":true}}}
L9_OK

Some files were not shown because too many files have changed in this diff Show more