POSTFACT

MCP serverDev tools

postfact 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

Details

Available today. Use it from your connected AI after setup.

After adding it, have your AI check with postfact before it retries any action whose first result is unclear.

POSTFACTStart free

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/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=postfact&config=eyJ1cmwiOiJodHRwczovL3Bvc3RmYWN0LWFwaS1wcm9kdWN0aW9uLnVwLnJhaWx3YXkuYXBwL21jcCJ9

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://postfact-api-production.up.railway.app/mcp

    In 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:

  • DONE only when affirmative evidence establishes completion.
  • NOT_DONE only when affirmative evidence establishes non-execution.
  • UNKNOWN whenever evidence is insufficient. UNKNOWN is 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