╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ███████╗ █████╗ ██╗ ██╗██████╗ ██████╗ ║
║ ██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██╔═══██╗ ║
║ ███████╗███████║ ╚████╔╝ ██║ ██║██║ ██║ ║
║ ╚════██║██╔══██║ ╚██╔╝ ██║ ██║██║ ██║ ║
║ ███████║██║ ██║ ██║ ██████╔╝╚██████╔╝ ║
║ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ║
║ ║
║ does the tool do what it says ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Does the tool do what it says? Not is it safe, not is it good. A publisher declares what an MCP tool does in a signed contract; SayDo runs the tool in a sandbox, checks it against that contract, and emits a hash-chained receipt anyone can verify in a browser with no account and no trust in the issuer.
The MCP server
pip install "saydo[mcp]"
saydo-mcp
Four tools, and the first one is a refusal:
| tool | answers |
|---|---|
scope |
what SayDo cannot settle. Call it first. |
status |
whether a package has a receipt, and what that receipt establishes |
inspect_definition |
the RFC 8785 tool digest, and wording aimed at the model rather than at a reader |
check_now |
run a package in a sandbox and report what it did |
Most packages have no receipt, so the usual answer is unknown. That keeps
meaning nobody has looked. It never softens into probably fine.
What a verdict can be
pass the declared behaviour held under the run
fail the tool did something it declared it would not
not-covered the run established nothing either way
A whole run resolves to CONFORMANT, NOT CONFORMANT, or INCONCLUSIVE.
INCONCLUSIVE carries most of the weight. A server that declines every call
makes no network request the way an unplugged machine makes none, and a harness
that scores that as three passes has certified nothing at all. A negative claim
passes here only if the run observed the tool actually doing something.
What this is not
It is not a safety guarantee and no receipt should be presented as one. It says what one version of one tool did on one run, against a contract its author wrote beforehand. Drift detection and hash-chained receipts are not novel; the repository names the prior art rather than claiming otherwise.
check_now needs Docker and the repository, and refuses plainly when it does
not have them rather than running something weaker and reporting it as a
sandboxed result.
Source, specification, the browser verifier, and the seeded fixtures that exist to prove the harness can fail: https://github.com/vince-gonzalez/saydo
╔════════════════════════════════════════════════════════════╗
║ ║
║ ███████╗ ██╗ ██╗███████╗██╗ ██╗███████╗ ║
║ ██╔════╝ ██║ ██╔╝██╔════╝╚██╗ ██╔╝██╔════╝ ║
║ █████╗ █████╗█████╔╝ █████╗ ╚████╔╝ ███████╗ ║
║ ██╔══╝ ╚════╝██╔═██╗ ██╔══╝ ╚██╔╝ ╚════██║ ║
║ ██║ ██║ ██╗███████╗ ██║ ███████║ ║
║ ╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚══════╝ ║
║ ║
║ · C R E A T I V E · ║
║ ║
║ ──────────────────────────────────────── ║
║ ║
║ Vincent Gonzalez ║
║ f-keys.com ║
║ ORCID 0009-0005-3640-014X ║
║ ║
╚════════════════════════════════════════════════════════════╝
Part of F-Keys — independent hardware, software and internet products.
Metadata
Release files for saydo 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| saydo-0.1.1.tar.gz | 123.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| saydo-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 261.3 kB
Release files / saydo-0.1.1.tar.gz
| Download URL | saydo-0.1.1.tar.gz |
|---|---|
| Size | 123.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0b45b8b36a8607b96fd7ad36d762060885071e28a45f8cb468c0436a931e29b2
|
|
BLAKE2b-256 checksum How to use checksums |
e8346923a8db7f0d873f5edcad8bd6f57cd21b3a855369da97c20e5fe1f378c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / saydo-0.1.1-py3-none-any.whl
| Download URL | saydo-0.1.1-py3-none-any.whl |
|---|---|
| Size | 137.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
795b637239e58e59917258f5bcda952eab8545338f3cce1128b9add7aedb8c5d
|
|
BLAKE2b-256 checksum How to use checksums |
596660b060ffc77ba5a51e1c82b7afb1e2f3bbb988e3344cf3a9eb18883c22fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|