From c3e0cd3abb196fadabc1b108fe29c0f984fb2b77 Mon Sep 17 00:00:00 2001 From: George Lambert Date: Wed, 23 Sep 2026 12:04:15 -0400 Subject: [PATCH] feat: add setup, browser login, and an install homepage setup registers or logs in and writes ~/.verae/auth.properties without printing the JWT. A caller bearer is used for stamp and verify instead of the host login. VERAE_MCP_OAUTH=1 serves the browser account page. site/index.html is the public install guide. --- README.md | 35 ++- docs/api.md | 2 +- docs/html/api.html | 6 +- docs/html/operator-guide.html | 18 +- docs/operator-guide.md | 6 +- docs/pdf/api.pdf | Bin 118139 -> 118146 bytes docs/pdf/architecture.pdf | Bin 109896 -> 109896 bytes docs/pdf/operator-guide.pdf | Bin 129425 -> 130804 bytes docs/pdf/standards.pdf | Bin 119169 -> 119169 bytes site/assets/VeraeFullLogo.png | Bin 0 -> 27484 bytes site/index.html | 286 +++++++++++++----- site/sample.html | 91 ++++++ .../global_client.py | 65 +++- .../oauth_login.py | 251 +++++++++++++++ src/verae_mcp_timestamping_server/server.py | 82 ++++- .../setup_cmd.py | 96 ++++++ tests/test_oauth_login.py | 102 +++++++ tests/test_setup.py | 39 +++ 18 files changed, 974 insertions(+), 105 deletions(-) create mode 100644 site/assets/VeraeFullLogo.png create mode 100644 site/sample.html create mode 100644 src/verae_mcp_timestamping_server/oauth_login.py create mode 100644 src/verae_mcp_timestamping_server/setup_cmd.py create mode 100644 tests/test_oauth_login.py create mode 100644 tests/test_setup.py diff --git a/README.md b/README.md index 1c840df..4df2516 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,40 @@ Verae MCP timestamping server. Hash-only stamps via leaf locald/NATS. The MCP process never hashes content. Clients send a SHA-256 hex digest. `scope=local` writes `~/.verae/mcp-timestamp-local.json`. `scope=global` POSTs to `https://api.veraetime.net/api/timestamp` (same wire as `verae-timestamp/global.Client`). `want_scope=global` verifies against that API as the central source of truth. `signup` creates a `user` account with no existing session. `login` stores the VeraeTime JWT on this host. `session` checks it. `create_user` adds an account when that JWT is an admin. +## Table of Contents + +- [Install](#install) +- [Usage](#usage) +- [Contributing](#contributing) +- [License](#license) + ## Install +On the machine that will run the server: + +```sh +uvx verae-mcp-timestamping-server setup +``` + +`setup` asks whether this is a new account or an existing one, then writes `~/.verae/auth.properties` (mode 600). It prints the username, role, and expiry. It does not print the token. `uvx verae-mcp-timestamping-server session` prints the same check. + +Assistant config names the command or the public URL. It does not contain the token: + +```json +{ + "mcpServers": { + "verae-timestamping": { + "command": "uvx", + "args": ["verae-mcp-timestamping-server"] + } + } +} +``` + +For the public server, set `url` to `https://mcp.veraetime.net/mcp`. With `VERAE_MCP_OAUTH=1` and `VERAE_MCP_PUBLIC_URL=https://mcp.veraetime.net`, the first connection opens a browser page to create an account or log in. The assistant stores that token in its own OAuth file. + +Development checkout: + ```sh cd /Users/marchon/research/modelcontextprotocol/verae-mcp-timestamping-server uv sync --group dev @@ -59,10 +91,11 @@ open docs/html/index.html Sources: `docs/operator-guide.md`, `docs/architecture.md`, `docs/api.md`, `docs/standards.md`. -Sample page (talks to Streamable HTTP on this machine): +Install page and stamp sample: ```sh open site/index.html +open site/sample.html ``` Public copy of the page and the docs: `https://mcp.georgelambert.org/`. diff --git a/docs/api.md b/docs/api.md index 097fee5..13bc57e 100644 --- a/docs/api.md +++ b/docs/api.md @@ -68,7 +68,7 @@ Returns `valid`, `username`, `role`, and `expires_at`. | `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`. There is no public signup; the first admin already exists on the timestamping service. +`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. diff --git a/docs/html/api.html b/docs/html/api.html index 61836ce..d076c29 100644 --- a/docs/html/api.html +++ b/docs/html/api.html @@ -292,9 +292,9 @@ replace the JWT stored for stamp. A new account calls

POST /auth/users with the stored JWT. Refuses unless session reports role admin. Returns -id, username, and role. There is -no public signup; the first admin already exists on the timestamping -service.

+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 diff --git a/docs/html/operator-guide.html b/docs/html/operator-guide.html index 148073b..48f62e0 100644 --- a/docs/html/operator-guide.html +++ b/docs/html/operator-guide.html @@ -112,12 +112,20 @@ site/index.html on the same machine, or put TLS and an access control in front of a non-loopback bind you choose yourself.

Global token

+

A new machine runs +uvx verae-mcp-timestamping-server setup. That creates an +account or logs in and writes ~/.verae/auth.properties +(mode 600). It prints username, role, and expiry, not the JWT. +session checks that file. Starting the server with no login +prints the setup command on stderr.

signup creates a role user account with no -bearer token. Call login with that username and password to -store the JWT in ~/.verae/auth.properties (mode 600). The -server uses it for scope=global without a restart. -session checks that JWT. create_user adds an -account when the stored role is admin.

+bearer token. create_user adds an account when the stored +role is admin.

+

Set VERAE_MCP_OAUTH=1 and +VERAE_MCP_PUBLIC_URL to the public HTTPS origin to require +a browser login on the HTTP MCP endpoint. That login’s JWT is the +caller’s bearer for stamp and is not written over the host +file.

# or skip the tool and export a token yourself:
 export VERAE_GLOBAL_TOKEN=...

Tests

diff --git a/docs/operator-guide.md b/docs/operator-guide.md index 7a47a93..f5b8abd 100644 --- a/docs/operator-guide.md +++ b/docs/operator-guide.md @@ -31,7 +31,11 @@ A page served from the public internet still cannot call `127.0.0.1` from curren ## Global token -`signup` creates a role `user` account with no bearer token. Call `login` with that username and password to store the JWT in `~/.verae/auth.properties` (mode 600). The server uses it for `scope=global` without a restart. `session` checks that JWT. `create_user` adds an account when the stored role is `admin`. +A new machine runs `uvx verae-mcp-timestamping-server setup`. That creates an account or logs in and writes `~/.verae/auth.properties` (mode 600). It prints username, role, and expiry, not the JWT. `session` checks that file. Starting the server with no login prints the setup command on stderr. + +`signup` creates a role `user` account with no bearer token. `create_user` adds an account when the stored role is `admin`. + +Set `VERAE_MCP_OAUTH=1` and `VERAE_MCP_PUBLIC_URL` to the public HTTPS origin to require a browser login on the HTTP MCP endpoint. That login's JWT is the caller's bearer for `stamp` and is not written over the host file. ```sh # or skip the tool and export a token yourself: diff --git a/docs/pdf/api.pdf b/docs/pdf/api.pdf index 84eac758c5386ed8e036b30af5676ceac29d3381..110c7169dcc88f8d3be875a0713ff90c97099e6c 100644 GIT binary patch delta 2128 zcmV-W2(S11ng@cL2e9l30yQ9$!0ji0tyoKM+eQ$+>sJstQ9!ibC%K!Olc-Kp$983< zJ-C6vNNbs`L@Fc|Hz?5G-q{CbktV4)D0C3HXkqL?T9%iD14AZo)EMWn)Id-FEzG{(dx_kG_luXutspD5Xe$3KB$| zB7#Y<*oYVMr+F+OE_^ zmTa^!-P+2{gfK@a4>OcahA48Sw7^& z@`o&0VPnWE=#G+50x2e*oxz6NHGTxV8FA^Hzq-7hk0*kP@Fdw)_a_EV4oj`A5QOR8 zs|Yd19u;js(L-9@!ZH(xTd4BC#%3i$V3E;qey{x>gLI?ID%ore zRO|{Q?`yj7j~9hbDqR|g9kLMxcHrf4aGzVrdu?6mc52jk$1V z%OR_Aj3Ppsl8aDrkc5782T zMdAD3=kB7c@V99tN} zlSQ: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 diff --git a/docs/pdf/architecture.pdf b/docs/pdf/architecture.pdf index ed2f271ff4b56d45ebee51435da992b2277320f9..a3b1fb49b5d748deaa702daad0efc90d4fa4adfc 100644 GIT binary patch delta 108 zcmX?ci|xcMwuUW?#fw;t42+E}rdKRtl!Gw0&tAls!s+a4Ze(HMV(4mUVPIhBV&r6Q eU}k7&Y+-0_YVK@c>SAH1U_(gBcBeIrY>WW4&Kx-a delta 108 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 JrXUXce*kFen=1eS delta 61365 zcmV(-K-|Cd{Rffr2aqEJGdVPuvEKnGf7Mq@bK5o$zWY~jrWb0agzz9h(la?Y8OLp! z#u=Gy4{papQ?SG_MQ}hUjxYV~T|DH9tSqN#F1?5gkh}Qy!@h*0RfMC96a2#Sb$K#> zoAQWch!UPgWxZzuR3T_>FKc>c>E^)TO5x?ZbpuH_)DINzwH zY-`mS`PuYZ8C9!x{t29r$)@fTf75IvVB7Rfw@SbQys_5Zk@=RJX14>mSPUW1xk&TP!>sj+W8RvzNO&=hySa+4;@Se{VkCl#8XlRIm{2<=V2s zSll*)k)70j)eHx2?HXRCu?2KGpA+C4m_p<<#~9B6#eoyAW8?#L@8FQ#Z)Z7+RXEP< zPz>Nh8|1!PIVp`*=Xa`3f5DeQN9ktObf^F2Cii&w`zGI9F0Q`GC6X_O7830L6-^iw zIfo-~L?XhNt$2(uL~T{xz^P~Unu@1eEMjYEM)O!M{rXPNNUS!nNHIhJEW(HV_O@+m zFE^c4F;aKZ1T&_A;_Sq_>L4O^vMl&b;QWRx_H#54Hy&AfFemUBMPudENzzq4Eeawly?H z&YNy2KcltTvE!pecIG}|;Z46aUMSyR zd7yK`5pRqM083E2(=`!^xq@BHh^FFVyGtpe5n zRDTP>el;64av0G_dn(YhAii>85?kr8?H^*}`1$HTB<8xaD z)%`f$lxHZLz;)<+%PER!7E(qKA%*|atSc8;!ZFkNpof(YWDxpl7#>_~=&)mye-1EH zhOa~C67jp=e@ZVj$8wl)8&+hDap?E3{Zx&$Ujqq)mm1@rcS;|NF{mX3=AhB>Lk-wpt$czU zMbEgf)8|Or-ksWp(<}ebwiDS#VbHM%N-@esHUR@Af2L90;o4rXX>4E{gyBYfosjNv z@9GqPiWhFL`WP4re@-Z86N@g3Z=OlQeLythFd$6StK~AlsJieBc^T>>j~~{u+aZ-+ zaB;fyvMU)*Iyl=sG0CAt5IQ}5)4arEnhB^m=~xkk5s2mRtzh;ij6kCuKb@rq;OuS( zA`Q_@e|W3k`GLjuBKJ4vz6mppbKD8aHWMqkY_@{@+$(Lu=I*O|8HS(7Q2$RS1J_sm z``h~~7ET=-{g(sb#rwn{{C$tegj z^WE;pBYLpSbb5>f?P3ml_~A}50uW7c#yKcTpEA8gNHPh>sS98@yQ-hDy*6TFU%s>Y z=<2?Ee`)&Di!;{Y;T+hd0F>fPN;cE86f30y{nJ!8WrTPtp{tBF0hYbDeoRwqy2t}( zFH|dXT^y!~|3n5xzu=|k>+|YPHwtr=g>naNt3Wkh2iPwfIb7tRvOiiJ5^qL!Gn{Ra zfA&f_hmGz^dw~Mh-JPlK5f=nrh~vt&&HZ)wEQ=6Az%T1fV0tIz|0NyD*MD&?+NDW` zc_IN4slTO^g+ACK>0`0_1Gt#faOl59obZ9alGB_|WlMrbY1u{7^ zI5(G}rU55^w7O+foLka1jJuQI(h%I;U4y&3H16&e+}$-ma19dN-8DdPcX$2BIWv

+9Rn9YT1L^<+Q5d9fmRV{>TG4; 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

Verae timestamping MCP sample

-

This page calls a Model Context Protocol (MCP) server. The three letters are MCP. The server name is verae-timestamping. It stamps a SHA-256 digest. It does not upload a file.

-

Start the server on this machine, then submit. A page on the public internet cannot reach 127.0.0.1.

-
VERAE_MCP_CORS=1 VERAE_MCP_TRANSPORT=streamable-http uv run verae-mcp-timestamping-server
-
- - - - - - -
-

Result

-
Waiting.
-

Docs in this repo: HTML · standards PDF

-

Same files on the public host: HTML · standards PDF

- +} +

Use the public server

+

No local program. The assistant connects to this host. When per-user sign-in is on, the first connection opens a browser page at /account to create an account or log in. That token stays in the assistant’s OAuth store, not in this file.

+
{
+  "mcpServers": {
+    "verae-timestamping": {
+      "url": "https://mcp.veraetime.net/mcp"
+    }
+  }
+}
+ + +
+

Where the token lives

+
+
+

Your machine

+

~/.verae/auth.properties

+

Mode 600, owned by you. Holds the JWT, its expiry, your username, and your password so a stamp can log in again before the 24-hour token expires. Do not commit this file.

+
+
+

Your assistant

+

OAuth file

+

A browser login on the public server gives the assistant a VeraeTime JWT and a refresh token. The Python client stores that under ~/.verae/oauth/mcp-tokens.json, also mode 600.

+
+
+

Never

+

Chat or mcp.json

+

Do not paste the token into a conversation or into the client config. session shows the username and expiry if you need to confirm the login.

+
+
+
+ + + diff --git a/site/sample.html b/site/sample.html new file mode 100644 index 0000000..b596b3b --- /dev/null +++ b/site/sample.html @@ -0,0 +1,91 @@ + + + + + +Verae timestamping MCP sample + + + +

Verae timestamping MCP sample

+

This page calls a Model Context Protocol (MCP) server. The three letters are MCP. The server name is verae-timestamping. It stamps a SHA-256 digest. It does not upload a file.

+

Start the server on this machine, then submit. A page on the public internet cannot reach 127.0.0.1.

+
VERAE_MCP_CORS=1 VERAE_MCP_TRANSPORT=streamable-http uv run verae-mcp-timestamping-server
+
+ + + + + + +
+

Result

+
Waiting.
+

Docs in this repo: HTML · standards PDF

+

Same files on the public host: HTML · standards PDF

+ + + diff --git a/src/verae_mcp_timestamping_server/global_client.py b/src/verae_mcp_timestamping_server/global_client.py index bd5508c..af399d8 100644 --- a/src/verae_mcp_timestamping_server/global_client.py +++ b/src/verae_mcp_timestamping_server/global_client.py @@ -13,6 +13,7 @@ import re import time import urllib.error import urllib.request +from contextvars import ContextVar from datetime import datetime, timedelta, timezone from pathlib import Path from typing import Any, Protocol @@ -28,6 +29,9 @@ from verae_mcp_timestamping_server.ledger import ( DEFAULT_GLOBAL_URL = "https://api.veraetime.net" # Refresh a stored login this long before expires_at. TOKEN_REFRESH_SKEW = timedelta(minutes=5) +# Bearer for this MCP request. When set, stamp and verify use it and do not +# refresh the host login. +request_token: ContextVar[str | None] = ContextVar("verae_request_token", default=None) class HttpTransport(Protocol): @@ -223,7 +227,8 @@ class GlobalClient: if self.needs_refresh(): self.login(self._username, self._password) - def login(self, username: str, password: str) -> LoginResult: + def authenticate(self, username: str, password: str) -> tuple[LoginResult, str]: + """Check a username and password. Does not store the JWT.""" if not username or not password: raise ValueError("username and password are required") res = self.http.request( @@ -243,10 +248,21 @@ class GlobalClient: raise ValueError("login response missing token") user = parsed.get("user") if isinstance(parsed.get("user"), dict) else {} expires_at = str(parsed.get("expiresAt") or "") + return ( + LoginResult( + username=str(user.get("username") or username), + role=str(user.get("role") or ""), + expires_at=expires_at, + ), + token, + ) + + def login(self, username: str, password: str) -> LoginResult: + result, token = self.authenticate(username, password) self.token = token self._username = username self._password = password - self.expires_at = parse_expiry(expires_at) + self.expires_at = parse_expiry(result.expires_at) path = self.auth_path or default_auth_path() self.auth_path = path write_properties( @@ -255,16 +271,21 @@ class GlobalClient: "access_token": token, "id_token": token, "auth_token": token, - "expires_at": expires_at, + "expires_at": result.expires_at, "username": username, "password": password, }, ) - return LoginResult( - username=str(user.get("username") or username), - role=str(user.get("role") or ""), - expires_at=expires_at, - ) + return result + + def validate_bearer(self, token: str) -> SessionResult: + """Check a caller-supplied JWT without replacing the host login.""" + saved = self.token + self.token = token + try: + return self.session() + finally: + self.token = saved def session(self) -> SessionResult: if not self.token: @@ -340,7 +361,19 @@ class GlobalClient: return headers def submit(self, digest: str, cube_id: str = "") -> Receipt: - self.ensure_token() + override = request_token.get() + saved = self.token + if override: + self.token = override + else: + self.ensure_token() + try: + return self._submit(digest, cube_id) + finally: + if override: + self.token = saved + + def _submit(self, digest: str, cube_id: str = "") -> Receipt: url = f"{self.base_url}/api/timestamp" res = self.http.request( "POST", @@ -416,7 +449,19 @@ class GlobalClient: ) def verify_certificate(self, receipt_id: str) -> VerifyResult: - self.ensure_token() + override = request_token.get() + saved = self.token + if override: + self.token = override + else: + self.ensure_token() + try: + return self._verify_certificate(receipt_id) + finally: + if override: + self.token = saved + + def _verify_certificate(self, receipt_id: str) -> VerifyResult: url = f"{self.base_url}/api/verify" res = self.http.request( "POST", diff --git a/src/verae_mcp_timestamping_server/oauth_login.py b/src/verae_mcp_timestamping_server/oauth_login.py new file mode 100644 index 0000000..70f9a3a --- /dev/null +++ b/src/verae_mcp_timestamping_server/oauth_login.py @@ -0,0 +1,251 @@ +"""Browser signup and login for assistants that connect to this MCP server. + +The access token issued here is the VeraeTime JWT. The assistant stores it +in its own OAuth file. This process does not put that JWT in mcp.json. +""" + +from __future__ import annotations + +import asyncio +import html +import secrets +import time +from dataclasses import dataclass +from urllib.parse import parse_qs + +from mcp.server.auth.provider import ( + AccessToken, + AuthorizationCode, + AuthorizationParams, + RefreshToken, + TokenError, + construct_redirect_uri, +) +from mcp.shared.auth import OAuthClientInformationFull, OAuthToken +from starlette.requests import Request +from starlette.responses import HTMLResponse, RedirectResponse, Response + +from verae_mcp_timestamping_server.global_client import GlobalClient, parse_expiry + +_PAGE = """ + + + +VeraeTime account + + + +

VeraeTime

+

Create an account or log in. The token stays in your assistant. It is not shown here.

+{error} +
+ + + + + +
+ + +""" + + +@dataclass +class _Pending: + client_id: str + params: AuthorizationParams + created: float + + +@dataclass +class _Code: + code: str + client_id: str + params: AuthorizationParams + api_token: str + expires_at: int | None + subject: str + + +@dataclass +class _Refresh: + token: str + client_id: str + scopes: list[str] + api_token: str + expires_at: int | None + subject: str + + +class VeraeOAuthProvider: + """OAuth authorization server whose access token is a VeraeTime JWT.""" + + def __init__(self, api: GlobalClient, issuer: str) -> None: + self.api = api + self.issuer = issuer.rstrip("/") + self.clients: dict[str, OAuthClientInformationFull] = {} + self.pending: dict[str, _Pending] = {} + self.codes: dict[str, _Code] = {} + self.refresh: dict[str, _Refresh] = {} + + async def get_client(self, client_id: str) -> OAuthClientInformationFull | None: + return self.clients.get(client_id) + + async def register_client(self, client_info: OAuthClientInformationFull) -> None: + if not client_info.client_id: + client_info.client_id = secrets.token_urlsafe(24) + self.clients[client_info.client_id] = client_info + + async def authorize(self, client: OAuthClientInformationFull, params: AuthorizationParams) -> str: + txn = secrets.token_urlsafe(32) + self.pending[txn] = _Pending(client_id=client.client_id, params=params, created=time.time()) + return f"{self.issuer}/account?txn={txn}" + + async def load_authorization_code( + self, client: OAuthClientInformationFull, authorization_code: str + ) -> AuthorizationCode | None: + found = self.codes.get(authorization_code) + if found is None or found.client_id != client.client_id: + return None + return AuthorizationCode( + code=found.code, + scopes=["stamp"], + expires_at=time.time() + 300, + client_id=found.client_id, + code_challenge=found.params.code_challenge, + redirect_uri=found.params.redirect_uri, + redirect_uri_provided_explicitly=found.params.redirect_uri_provided_explicitly, + resource=found.params.resource, + subject=found.subject, + ) + + async def exchange_authorization_code( + self, client: OAuthClientInformationFull, authorization_code: AuthorizationCode + ) -> OAuthToken: + found = self.codes.pop(authorization_code.code, None) + if found is None or found.client_id != client.client_id: + raise TokenError("invalid_grant", "unknown authorization code") + return self._issue(found.client_id, found.api_token, found.expires_at, found.subject) + + async def load_refresh_token( + self, client: OAuthClientInformationFull, refresh_token: str + ) -> RefreshToken | None: + found = self.refresh.get(refresh_token) + if found is None or found.client_id != client.client_id: + return None + return RefreshToken( + token=found.token, + client_id=found.client_id, + scopes=list(found.scopes), + expires_at=found.expires_at, + subject=found.subject, + ) + + async def exchange_refresh_token( + self, + client: OAuthClientInformationFull, + refresh_token: RefreshToken, + scopes: list[str], + ) -> OAuthToken: + del scopes + found = self.refresh.get(refresh_token.token) + if found is None or found.client_id != client.client_id: + raise TokenError("invalid_grant", "unknown refresh token") + if found.expires_at is not None and found.expires_at <= int(time.time()): + self.refresh.pop(refresh_token.token, None) + raise TokenError("invalid_grant", "login expired; sign in again") + self.refresh.pop(refresh_token.token, None) + return self._issue(found.client_id, found.api_token, found.expires_at, found.subject) + + async def load_access_token(self, token: str) -> AccessToken | None: + seen = await asyncio.to_thread(self.api.validate_bearer, token) + if not seen.valid: + return None + expires = parse_expiry(seen.expires_at) + return AccessToken( + token=token, + client_id="verae", + scopes=["stamp"], + expires_at=int(expires.timestamp()) if expires else None, + subject=seen.username, + ) + + async def revoke_token(self, token: AccessToken | RefreshToken) -> None: + self.refresh.pop(getattr(token, "token", ""), None) + + def _issue(self, client_id: str, api_token: str, expires_at: int | None, subject: str) -> OAuthToken: + refresh = secrets.token_urlsafe(32) + self.refresh[refresh] = _Refresh( + token=refresh, + client_id=client_id, + scopes=["stamp"], + api_token=api_token, + expires_at=expires_at, + subject=subject, + ) + expires_in = None + if expires_at is not None: + expires_in = max(0, expires_at - int(time.time())) + return OAuthToken( + access_token=api_token, + expires_in=expires_in, + scope="stamp", + refresh_token=refresh, + ) + + def _drop_old_pending(self) -> None: + cutoff = time.time() - 600 + for key, item in list(self.pending.items()): + if item.created < cutoff: + del self.pending[key] + + async def handle_account(self, request: Request) -> Response: + self._drop_old_pending() + if request.method == "GET": + txn = request.query_params.get("txn", "") + error = request.query_params.get("error", "") + return self._page(txn, error) + form = parse_qs((await request.body()).decode()) + txn = (form.get("txn") or [""])[0] + username = (form.get("username") or [""])[0].strip() + password = (form.get("password") or [""])[0] + mode = (form.get("mode") or ["login"])[0] + pending = self.pending.get(txn) + if pending is None: + return self._page(txn, "This login page expired. Start the connection again.") + if not username or not password: + return self._page(txn, "Username and password are required.") + try: + if mode == "signup": + await asyncio.to_thread(self.api.signup, username, password) + logged, api_token = await asyncio.to_thread(self.api.authenticate, username, password) + except ValueError as exc: + return self._page(txn, str(exc)) + self.pending.pop(txn, None) + code = secrets.token_urlsafe(32) + expires = parse_expiry(logged.expires_at) + self.codes[code] = _Code( + code=code, + client_id=pending.client_id, + params=pending.params, + api_token=api_token, + expires_at=int(expires.timestamp()) if expires else None, + subject=logged.username, + ) + target = construct_redirect_uri( + str(pending.params.redirect_uri), + code=code, + state=pending.params.state, + ) + return RedirectResponse(target, status_code=302) + + def _page(self, txn: str, error: str) -> HTMLResponse: + block = f'

{html.escape(error)}

' if error else "" + body = _PAGE.format(error=block, txn=html.escape(txn)) + return HTMLResponse(body) diff --git a/src/verae_mcp_timestamping_server/server.py b/src/verae_mcp_timestamping_server/server.py index 00afa25..2a486fa 100644 --- a/src/verae_mcp_timestamping_server/server.py +++ b/src/verae_mcp_timestamping_server/server.py @@ -4,9 +4,16 @@ from __future__ import annotations import asyncio import os +import sys +from contextlib import contextmanager from mcp.server import MCPServer +from mcp.server.auth.middleware.auth_context import get_access_token +from mcp.server.auth.settings import AuthSettings, ClientRegistrationOptions from mcp.server.mcpserver.exceptions import ToolError +from pydantic import AnyHttpUrl +from starlette.requests import Request +from starlette.responses import Response from verae_mcp_timestamping_server.global_client import ( CreateUserResult, @@ -14,7 +21,10 @@ from verae_mcp_timestamping_server.global_client import ( GlobalLedger, LoginResult, SessionResult, + request_token, ) +from verae_mcp_timestamping_server.oauth_login import VeraeOAuthProvider +from verae_mcp_timestamping_server.setup_cmd import print_login_hint, run_session, run_setup from verae_mcp_timestamping_server.guard import reject_content_keys, strict_arg_model from verae_mcp_timestamping_server.ledger import ( FileLedger, @@ -25,9 +35,41 @@ from verae_mcp_timestamping_server.ledger import ( VerifyResult, ) -mcp = MCPServer("verae-timestamping") +mcp = MCPServer( + "verae-timestamping", + instructions=( + "Global stamps need a VeraeTime login on the machine that runs this server, " + "or a bearer token from the browser signup on the public server. " + "If session is not valid, ask the user to run " + "`uvx verae-mcp-timestamping-server setup`. " + "Do not ask them to paste a token into the chat or into mcp.json. " + "The token file is ~/.verae/auth.properties, mode 600." + ), +) _ledger: Ledger = MemoryLedger() _global_client: GlobalClient = GlobalClient() +_oauth: VeraeOAuthProvider | None = None + + +@contextmanager +def _caller_token(): + access = get_access_token() + if access is None or not access.token: + yield + return + reset = request_token.set(access.token) + try: + yield + finally: + request_token.reset(reset) + + +@mcp.custom_route("/account", methods=["GET", "POST"]) +async def account_page(request: Request) -> Response: + """Browser signup and login. The JWT is handed to the assistant, not printed.""" + if _oauth is None: + return Response("OAuth is not enabled on this server.", status_code=404) + return await _oauth.handle_account(request) def default_ledger(client: GlobalClient | None = None) -> Ledger: @@ -100,9 +142,10 @@ async def stamp( ) -> Receipts: """Commit a SHA-256. scope=local is the leaf file ledger; scope=global posts digest and restamp=false to api.veraetime.net and reuses the first CID.""" try: - receipts = await _ledger.stamp( - sha256, scope=scope, cube_id=cube_id, org_id=org_id - ) + with _caller_token(): + receipts = await _ledger.stamp( + sha256, scope=scope, cube_id=cube_id, org_id=org_id + ) except ValueError as exc: raise _tool_error(exc) from exc return Receipts(receipts=receipts) @@ -111,7 +154,8 @@ async def stamp( @mcp.tool() async def verify(receipt_id: str, want_scope: str = "") -> VerifyResult: """Check a receipt. want_scope=global asks api.veraetime.net (central source of truth).""" - return await _ledger.verify(receipt_id, want_scope=want_scope) + with _caller_token(): + return await _ledger.verify(receipt_id, want_scope=want_scope) @mcp.tool() @@ -163,9 +207,37 @@ async def hash_report( return Receipts(receipts=receipts) +def enable_oauth(public_url: str) -> VeraeOAuthProvider: + """Turn on browser signup for the HTTP server. Stdio stays open unless this runs.""" + global _oauth + issuer = public_url.rstrip("/") + provider = VeraeOAuthProvider(api=_global_client, issuer=issuer) + mcp.settings.auth = AuthSettings( + issuer_url=AnyHttpUrl(issuer), + resource_server_url=AnyHttpUrl(issuer + "/mcp"), + client_registration_options=ClientRegistrationOptions(enabled=True, valid_scopes=["stamp"]), + required_scopes=["stamp"], + validate_token_resource=False, + ) + mcp._auth_server_provider = provider + from mcp.server.auth.provider import ProviderTokenVerifier + + mcp._token_verifier = ProviderTokenVerifier(provider) + _oauth = provider + return provider + + def main() -> None: + if len(sys.argv) > 1 and sys.argv[1] == "setup": + raise SystemExit(run_setup(sys.argv[2:])) + if len(sys.argv) > 1 and sys.argv[1] == "session": + raise SystemExit(run_session()) client = GlobalClient.from_env() build_mcp(default_ledger(client), global_client=client) + print_login_hint(client) + if os.environ.get("VERAE_MCP_OAUTH") == "1": + public = os.environ.get("VERAE_MCP_PUBLIC_URL", "http://127.0.0.1:8000") + enable_oauth(public) transport = os.environ.get("VERAE_MCP_TRANSPORT", "stdio") if transport == "streamable-http": host = os.environ.get("VERAE_MCP_HOST", "127.0.0.1") diff --git a/src/verae_mcp_timestamping_server/setup_cmd.py b/src/verae_mcp_timestamping_server/setup_cmd.py new file mode 100644 index 0000000..bccb532 --- /dev/null +++ b/src/verae_mcp_timestamping_server/setup_cmd.py @@ -0,0 +1,96 @@ +"""First-run registration for a machine that runs this MCP server.""" + +from __future__ import annotations + +import argparse +import getpass +import sys +from collections.abc import Callable + +from verae_mcp_timestamping_server.global_client import ( + GlobalClient, + default_auth_path, +) + + +def login_hint(client: GlobalClient) -> str | None: + """Text for a machine with no stored VeraeTime login. None when one exists.""" + if client.token or client._username: + return None + path = client.auth_path or default_auth_path() + return ( + "No VeraeTime login on this machine.\n" + " uvx verae-mcp-timestamping-server setup\n" + f"Token file: {path} (mode 600)" + ) + + +def print_login_hint(client: GlobalClient) -> None: + text = login_hint(client) + if text: + print(text, file=sys.stderr) + + +def _print_session(client: GlobalClient) -> int: + seen = client.session() + path = client.auth_path or default_auth_path() + print(f"Wrote {path} (mode 600)") + print(f"username={seen.username}") + print(f"role={seen.role}") + print(f"expires_at={seen.expires_at}") + print(f"valid={str(seen.valid).lower()}") + return 0 if seen.valid else 1 + + +def run_session(client: GlobalClient | None = None) -> int: + held = client or GlobalClient.from_env() + seen = held.session() + print(f"valid={str(seen.valid).lower()}") + print(f"username={seen.username}") + print(f"role={seen.role}") + print(f"expires_at={seen.expires_at}") + return 0 if seen.valid else 1 + + +def run_setup( + argv: list[str] | None = None, + *, + client: GlobalClient | None = None, + input_fn: Callable[[str], str] = input, + password_fn: Callable[[str], str] = getpass.getpass, +) -> int: + parser = argparse.ArgumentParser( + prog="verae-mcp-timestamping-server setup", + description="Create a VeraeTime account or log in, and store the token on this machine.", + ) + parser.add_argument("--username", default="") + parser.add_argument("--password", default="") + parser.add_argument( + "--signup", + action="store_true", + help="Create a new user account, then log in.", + ) + args = parser.parse_args(argv) + username = args.username.strip() + password = args.password + signup = args.signup + if not username or not password: + choice = input_fn("Account [new/existing] (new): ").strip().lower() + signup = choice in ("", "new", "signup", "register") + if not username: + username = input_fn("Username: ").strip() + if not password: + password = password_fn("Password: ") + if not username or not password: + print("username and password are required", file=sys.stderr) + return 2 + held = client or GlobalClient.from_env() + try: + if signup: + created = held.signup(username, password) + print(f"created username={created.username} role={created.role}") + held.login(username, password) + except ValueError as exc: + print(str(exc), file=sys.stderr) + return 1 + return _print_session(held) diff --git a/tests/test_oauth_login.py b/tests/test_oauth_login.py new file mode 100644 index 0000000..f340d8b --- /dev/null +++ b/tests/test_oauth_login.py @@ -0,0 +1,102 @@ +"""Browser account page issues a VeraeTime JWT without storing it on the host.""" + +import pytest +from mcp.server.auth.provider import AuthorizationParams +from mcp.shared.auth import OAuthClientInformationFull +from pydantic import AnyUrl +from starlette.requests import Request + +from verae_mcp_timestamping_server.global_client import GlobalClient, request_token +from verae_mcp_timestamping_server.ledger import SHA256_EMPTY +from verae_mcp_timestamping_server.oauth_login import VeraeOAuthProvider + +from test_global_client import _auth_http + +pytestmark = pytest.mark.anyio + + +def _request(method: str, body: bytes = b"", query: bytes = b"") -> Request: + async def receive(): + return {"type": "http.request", "body": body, "more_body": False} + + scope = { + "type": "http", + "http_version": "1.1", + "method": method, + "scheme": "http", + "path": "/account", + "raw_path": b"/account", + "query_string": query, + "headers": [(b"content-type", b"application/x-www-form-urlencoded")], + "client": ("127.0.0.1", 1234), + "server": ("127.0.0.1", 8000), + } + return Request(scope, receive) + + +async def test_account_form_issues_code_and_leaves_host_token(tmp_path): + http = _auth_http() + api = GlobalClient( + "https://api.veraetime.net", + token="host-token", + http=http, + auth_path=tmp_path / "auth.properties", + ) + provider = VeraeOAuthProvider(api, "http://127.0.0.1:8000") + client = OAuthClientInformationFull( + client_id="assistant", + redirect_uris=[AnyUrl("http://127.0.0.1/callback")], + ) + await provider.register_client(client) + params = AuthorizationParams( + state="st", + scopes=["stamp"], + code_challenge="challenge", + redirect_uri=AnyUrl("http://127.0.0.1/callback"), + redirect_uri_provided_explicitly=True, + ) + url = await provider.authorize(client, params) + txn = url.split("txn=", 1)[1] + response = await provider.handle_account( + _request( + "POST", + body=f"txn={txn}&username=newcomer&password=secret-pass&mode=signup".encode(), + ) + ) + assert response.status_code == 302 + location = response.headers["location"] + assert location.startswith("http://127.0.0.1/callback?") + assert "code=" in location + assert "fresh-token" not in location + assert api.token == "host-token" + assert not (tmp_path / "auth.properties").exists() + code = location.split("code=", 1)[1].split("&", 1)[0] + loaded = await provider.load_authorization_code(client, code) + assert loaded is not None + issued = await provider.exchange_authorization_code(client, loaded) + assert issued.access_token == "fresh-token" + assert issued.refresh_token + seen = await provider.load_access_token("fresh-token") + assert seen is not None + assert seen.subject == "admin" + + +async def test_request_token_does_not_refresh_host_login(tmp_path): + path = tmp_path / "auth.properties" + path.write_text( + "access_token=old-token\n" + "expires_at=2020-01-01T00:00:00Z\n" + "username=admin\n" + "password=secret-pass\n" + ) + http = _auth_http() + client = GlobalClient("https://api.veraetime.net", http=http, auth_path=path) + reset = request_token.set("caller-token") + try: + rec = client.submit(SHA256_EMPTY) + finally: + request_token.reset(reset) + assert rec.receipt_id == "QmFresh" + assert http.calls[0][1].endswith("/api/timestamp") + assert http.calls[0][3]["Authorization"] == "Bearer caller-token" + assert client.token == "old-token" diff --git a/tests/test_setup.py b/tests/test_setup.py new file mode 100644 index 0000000..874d387 --- /dev/null +++ b/tests/test_setup.py @@ -0,0 +1,39 @@ +"""First-run setup stores a login and does not print the JWT.""" + +from verae_mcp_timestamping_server.global_client import GlobalClient +from verae_mcp_timestamping_server.setup_cmd import login_hint, run_setup + +from test_global_client import FakeHttp, _auth_http + + +def test_setup_signup_writes_token_file_without_printing_it(tmp_path, capsys): + path = tmp_path / "auth.properties" + http = _auth_http() + client = GlobalClient("https://api.veraetime.net", http=http, auth_path=path) + code = run_setup( + ["--signup", "--username", "newcomer", "--password", "secret-pass"], + client=client, + ) + assert code == 0 + text = capsys.readouterr().out + assert "fresh-token" not in text + assert "username=admin" in text + assert "role=admin" in text + assert f"Wrote {path}" in text + stored = path.read_text() + assert "access_token=fresh-token" in stored + assert path.stat().st_mode & 0o777 == 0o600 + assert any(url.endswith("/auth/signup") for _, url, _, _ in http.calls) + assert any(url.endswith("/auth/login") for _, url, _, _ in http.calls) + + +def test_login_hint_only_when_missing(tmp_path): + empty = GlobalClient("https://api.veraetime.net", http=FakeHttp(), auth_path=tmp_path / "missing.properties") + assert "uvx verae-mcp-timestamping-server setup" in (login_hint(empty) or "") + signed = GlobalClient( + "https://api.veraetime.net", + token="secret", + http=FakeHttp(), + auth_path=tmp_path / "auth.properties", + ) + assert login_hint(signed) is None

pfUcdZa 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 delta 107 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 literal 0 HcmV?d00001 diff --git a/site/index.html b/site/index.html index b596b3b..4e3724d 100644 --- a/site/index.html +++ b/site/index.html @@ -3,89 +3,217 @@ -Verae timestamping MCP sample +Install Verae timestamping + + + + + -