POSTFACT
MCP serverDev toolspostfact resolves whether an action with an uncertain result actually completed, so retries do not run it a second time. Once added, your AI can check the outcome of a previous attempt before repeating an action that changes something. This keeps automated retries from causing duplicate work.
Use POSTFACT in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add POSTFACT and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use POSTFACT to resolve outcome
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
Details
Available today. Use it from your connected AI after setup.
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
After adding it, have your AI check with postfact before it retries any action whose first result is unclear.
What your AI can do with it
- Check whether an earlier action actually completed
- Decide if a retry is needed before running an action again
- Avoid performing the same action twice
- Get a definite answer when an action's result is unknown
Install POSTFACT
The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http --scope user postfact 'https://postfact-api-production.up.railway.app/mcp'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://postfact-api-production.up.railway.app/mcpAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=postfact&config=eyJ1cmwiOiJodHRwczovL3Bvc3RmYWN0LWFwaS1wcm9kdWN0aW9uLnVwLnJhaWx3YXkuYXBwL21jcCJ9Open the link and Cursor adds the server at that address.
ChatGPT
https://postfact-api-production.up.railway.app/mcpIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add postfact --url 'https://postfact-api-production.up.railway.app/mcp'Run it once, then sign in with codex mcp login postfact if the server asks for an account.
From the project's README
As published by gsterlingpress/postfact-api in README.md.
Did the call actually happen?
POSTFACT is a tiny ambiguous-outcome resolver for autonomous software. Use it after a side-effecting API/tool action fails ambiguously and before retrying.
Production: https://postfact-api-production.up.railway.app
It is intentionally strict:
DONEonly when affirmative evidence establishes completion.NOT_DONEonly when affirmative evidence establishes non-execution.UNKNOWNwhenever evidence is insufficient.UNKNOWNis the safe default.
POSTFACT does not execute the underlying action, move money, or pretend a timeout means failure.
REST
Production endpoint: POST https://postfact-api-production.up.railway.app/v1/resolve
Input accepts method/status/failure, side-effect and idempotency context, durable references, and optional affirmative evidence. Output is state, retry_safe, confidence, evidence, and next.
MCP
Remote endpoint: POST https://postfact-api-production.up.railway.app/mcp
Tool: resolve_outcome
The tool description explicitly tells agents to invoke POSTFACT after an ambiguous side-effect failure and before retry.
Middleware-shaped contract
const outcome = await postfact.resolve(failureContext)
if (outcome.state === 'DONE') return completed
if (outcome.state === 'NOT_DONE' && outcome.retry_safe) return retry()
return verifyOrHold()
Future SDKs can wrap retry middleware without changing the wire contract.
POSTFACT + RECOVER
POSTFACT answers what can we establish happened? RECOVER answers what is the safest next action? A future retry stack can call POSTFACT first, then RECOVER when the outcome remains uncertain.
Safe discovery and demo
- Health:
GET https://postfact-api-production.up.railway.app/health - Demo:
GET https://postfact-api-production.up.railway.app/demo - Activity:
GET https://postfact-api-production.up.railway.app/activity - Machine-readable activity:
GET https://postfact-api-production.up.railway.app/activity.json
GET /demo is deliberately excluded from real-use analytics.
Real-use scoreboard
GET /activity shows the permanent FIRST 10 TRUE STRANGERS scoreboard. GET /activity.json exposes its machine-readable summary. Demo/internal traffic is excluded. Production persistent storage is mounted at /data.
Run
npm test
npm start
Default port: 8080.
Tools it offers (1)
What this server listed when Ahel dialed its public endpoint in Sep 2026, with no key and no account of yours. The names are the server’s own.
resolve_outcome
Signals
- Last commit
- Sep 2026
Advanced
- Delivery
- postfact MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
- Item type
- mcp-server
- Key
io-github-gsterlingpress-postfact- Source
- github.com/gsterlingpress/postfact-api
- Hosted endpoint
https://postfact-api-production.up.railway.app/mcp
github.com/gsterlingpress/postfact-api