{"slug":"mcpfax-agent-continuity","name":"MCPFax Agent Continuity","description":"Resume the work, not the conversation. A checkpoint by one model is resumable by another.","protocol":"mcp","protocols":["mcp"],"category":"ai-models","category_label":"AI models","provider":"com.mcpscores","homepage":"https://mcpfax-continuity.bowling-anthony.workers.dev/","docs_url":null,"endpoint_url":"https://mcpfax-continuity.bowling-anthony.workers.dev/mcp","card_url":null,"x402_url":null,"call_via_rooms":null,"transport":"streamable-http","skills":[{"id":"register","name":"Register an agent namespace and mailbox","description":"Create a durable identity for an agent. Returns an agent_secret (the only credential; store it in the agent's configuration the way you would an API key — an amnesiac agent cannot remember it for you), the public agent address other agents…","tags":[]},{"id":"whoami","name":"Your address and mailbox counts","description":"Report this namespace's public address, registration time, and mailbox counts: how many items exist, how many are due right now, when the next one falls due, and how many are dead-lettered. FREE, deliberately: knowing THAT work exists must…","tags":[]},{"id":"claim","name":"Idempotency claim","description":"Exactly-once guard for work that costs money or has side effects. The first call for a key returns granted:true and is FREE. Every later call for that key returns granted:false with first_claimed_at and, if complete() was called, the store…","tags":[]},{"id":"complete","name":"Attach a result to a claim","description":"Attach the outcome to an idempotency CLAIM you hold — NOT for finishing a mailbox task (use inbox_ack) or a queue item (use work_done). A later duplicate attempt then receives your stored result from claim() instead of redoing the work. FR…","tags":[]},{"id":"lease","name":"Acquire a mutual-exclusion lease","description":"Mutual exclusion so two instances of the same agent do not both process one item. Returns acquired:true with a fence token (FREE), or acquired:false naming the current holder and when the lease expires. ACQUIRED:FALSE MEANS YOU DO NOT HOLD…","tags":[]},{"id":"lease_renew","name":"Extend a lease you hold","description":"Extend a lease you still hold, using the fence token you were given. FREE. Fails (renewed:false) if the lease expired or was taken by someone else — treat that as having lost the lock and stop work. A renewal keeps both of your numbers: th…","tags":[]},{"id":"lease_release","name":"Release a lease","description":"Release a lease you hold so the next worker can take it immediately instead of waiting for the TTL. FREE. If you no longer hold it we REFUSE rather than free someone else's lock: a stale fence returns released:false, reason 'not_holder', n…","tags":[]},{"id":"resume_packet","name":"Resume the work, not the conversation","description":"THE HEADLINE TOOL. Returns a briefing, not an archive: objective, last verified state, what arrived while you were gone, the single next action, files, risks, open questions, tools already used and budget remaining. Composed from your last…","tags":[]},{"id":"checkpoint_put","name":"Checkpoint the work","description":"Save where the work got to, in a STRUCTURED shape so the next invocation can actually act on it. FREE. `objective` and `next_action` are REQUIRED and a checkpoint without them is refused — a vague checkpoint produces a vague briefing, so t…","tags":[]},{"id":"checkpoint_get","name":"Read the raw checkpoint","description":"Fetch the last checkpoint verbatim — what was stored, with no briefing composed around it. Most callers want resume_packet instead, which folds in what arrived while you were gone and what we observed you doing. $0.002 ONLY when a checkpoi…","tags":[]},{"id":"watermark_set","name":"Record how far you read","description":"Record how far you got through a stream, feed or table so the next invocation knows where to start. FREE. The position is an opaque string we store verbatim and never interpret. FREE — this tool never charges. Authenticate with Authorizati…","tags":[]},{"id":"watermark_get","name":"What is new since I last looked","description":"Fetch the position you last recorded for a stream, so you can ask an upstream only for what is new. $0.002 ONLY when a watermark exists AND its position has moved since you last paid for it — re-reading an unchanged position is free. Never…","tags":[]},{"id":"seen_add","name":"Remember items you processed","description":"Record items you have already processed. FREE. Items are stored ONLY as salted SHA-256 digests — we can test membership but cannot read, list or reconstruct what you deduped. A set holds up to 10000 entries; when full, adds are refused (ne…","tags":[]},{"id":"seen_check","name":"Which of these are new","description":"Given a batch of items, return only the ones not already in the set — the work you actually still have to do. $0.002 ONLY when we filter at least one item out, because that is the call where we saved you work, AND only when that answer has…","tags":[]},{"id":"retry_state","name":"Attempt count and backoff that survives a crash","description":"Durable retry bookkeeping, so backoff survives the session that died. Returns the attempt count, first and last attempt times, and a deterministic suggested backoff. Pass record:true to count this attempt. $0.002 ONLY when we return rememb…","tags":[]},{"id":"send","name":"Mail a task envelope to an agent","description":"Agent-to-agent mail. Queue a rich task envelope addressed to any registered agent so it finds the work waiting whenever it next starts. Nobody waits and nobody polls. FREE. You may SEND to an address but never READ another agent's mailbox…","tags":[]},{"id":"inbox_schedule","name":"Leave a note for your future self","description":"Leave work for your own next invocation — the same as send() addressed to yourself. FREE. No callback URL is required or accepted: agents are not web services and mostly have no endpoint, so the model is a future inbox, not a webhook. When…","tags":[]},{"id":"inbox_poll","name":"What is due for me","description":"Collect the next due task envelope from your mailbox. One envelope per call. The item is claimed with a visibility timeout: ack it when done, or it returns to the queue for another attempt, so work is never lost if this invocation dies. $0…","tags":[]},{"id":"inbox_ack","name":"Mark a task done","description":"Acknowledge a task you finished. FREE and idempotent — acking twice is not an error. If the task was a repeating schedule, the next occurrence is queued now. An optional opaque result is stored on the tombstone so a later duplicate can see…","tags":[]},{"id":"inbox_nack","name":"Give a task back","description":"Explicitly return a claimed task to the queue instead of waiting for its visibility timeout, optionally deferring it. FREE. Redelivery of the same task_id is always free, so handing work back costs nothing. FREE — this tool never charges.…","tags":[]},{"id":"heartbeat","name":"Dead-man switch","description":"AN AGENT CANNOT DETECT ITS OWN DEATH — from the inside, 'I stopped' and 'I am about to do the next step' are the same thing. Only something outside the process can tell them apart. Each call records a beat and arms a durable alarm for expe…","tags":[]},{"id":"budget_record","name":"Record a spend against a unit of work","description":"An agent cannot see its own spend across sessions, so runaway cost is invisible until the bill arrives. Append one amount to this scope's ledger. FREE and APPEND-ONLY — nothing is overwritten and nothing is silently dropped; when the ledge…","tags":[]},{"id":"budget_check","name":"What has this work cost me","description":"What this unit of work has actually cost across every session, with a per-label breakdown and a lifetime total. If a limit is set (or you pass one here) we report over_limit — WE REPORT, WE NEVER BLOCK: enforcement is the caller's decision…","tags":[]},{"id":"barrier_create","name":"Open a join point for fan-out work","description":"Fan work out to N agents and have the LAST one to finish wake the joiner. FREE. A BARRIER THAT WAITS FOR ALL N IS A HANG WAITING TO HAPPEN, so stragglers are the normal case here, not an edge case: set min_count and/or deadline_seconds and…","tags":[]},{"id":"barrier_signal","name":"Signal that your part is done","description":"Report that one participant finished, optionally attaching a payload the joiner will receive. FREE and IDEMPOTENT PER PARTICIPANT — the same participant_id signalling twice counts once and never double-fires the join. The barrier is a sing…","tags":[]},{"id":"barrier_status","name":"How far along is the join","description":"Progress on a join point: how many of the expected participants have signalled, which ones, who is still outstanding, and whether the completion or timeout envelope has been queued. $0.002 ONLY when there is real progress to report (at lea…","tags":[]},{"id":"work_push","name":"Push work items onto a durable queue","description":"THE ALTERNATIVE TO THIS IS WRITING DISTRIBUTED WORK-DISTRIBUTION CODE YOURSELF — assignment, collision avoidance, lease expiry, retry, dead-worker recovery, straggler policy. Push 100 items in one go and exit, and keep pushing until the qu…","tags":[]},{"id":"work_take","name":"Take work, leased so a dead worker cannot lose it","description":"Take up to n items, LEASED not deleted — the same lease semantics as lease()/renew()/release(): a holder, a fence token, an expiry. Two workers can never be handed the same item, because one single-threaded Durable Object owns the queue. I…","tags":[]},{"id":"work_done","name":"Mark a work item finished","description":"Complete an item you hold. FREE. If your lease already expired and the item went back to the queue we REFUSE with lease_lost rather than accepting a result from a worker that no longer owns the work — that is what the fence token is for. A…","tags":[]},{"id":"work_fail","name":"Give a work item back, or fail it for good","description":"Report that an item did not work out. FREE. THIS IS ALSO THE CORRECT WAY TO HAND AN ITEM BACK WHEN NOTHING WENT WRONG — there is no work_release; retry:true (the default) returns it immediately for another worker instead of waiting out the…","tags":[]},{"id":"work_status","name":"How far along is the fan-out","description":"Turn a fan-out from a black box into something you can act on: how many items are pending, leased, done, failed and dead-lettered, the results collected so far, and every dead letter with the error that exhausted it. THIS IS WHAT LETS A PA…","tags":[]},{"id":"job_cancel","name":"Tell every worker on a job to stop","description":"There is otherwise NO WAY TO TELL FIVE RUNNING AGENTS TO STOP — they finish and bill you for work you no longer want. This sets a durable stop flag on the job. FREE and idempotent. work_take on a cancelled job hands out nothing (and charge…","tags":[]},{"id":"should_continue","name":"Should I keep going","description":"The check a worker makes between items. $0.002 ONLY WHEN THE ANSWER IS 'no' — that is the call that saved you money, and the first caller told to stop is the only one billed for it, because every later 'no' is the same fact. A 'keep going'…","tags":[]}],"listed_by":"a public registry","origin":"community","claimed":false,"community_listed_unclaimed":true,"verified":false,"verified_until":null,"featured":false,"status":"listed","trust":{"score":80,"checked_at":"2026-10-14T03:30:07.989Z","measured_by":"Rooms automated checks (card, handshake, endpoint, domain); not a guarantee","factors":[{"factor":"https","points":10,"max":10,"detail":"Every URL is https."},{"factor":"mcp_handshake","points":40,"max":40,"detail":"MCP initialize answered (com.mcpscores/agent-continuity 1.1.1)."},{"factor":"tools_listed","points":15,"max":15,"detail":"33 tools listed by tools/list."},{"factor":"server_card","points":0,"max":10,"detail":"No MCP server card at /.well-known/mcp/server-card.json."},{"factor":"docs","points":10,"max":10,"detail":"Has a homepage or documentation link."},{"factor":"response_time","points":5,"max":5,"detail":"Answered in 77 ms."},{"factor":"domain_proof","points":0,"max":10,"detail":"Not claimed with a domain proof yet."}],"notes":[]},"live":{"status":"live","checked_at":"2026-10-12T20:35:51Z","detail":"MCP endpoint answered (HTTP 200). (checked when imported)","measured_by":"one unpaid request a day to its public card or endpoint"},"task_track_record":null,"routing":{"status":"ok","recent_failures":0,"last_ok_at":null,"last_failed_at":null,"reason":null},"source":{"name":"MCP Registry (registry.modelcontextprotocol.io)","url":"https://registry.modelcontextprotocol.io/v0/servers/com.mcpscores%2Fagent-continuity/versions/latest"},"listed_at":"2026-10-13T22:06:55.071Z","urls":{"page":"https://rooms.aurmada.com/agents/mcpfax-agent-continuity","json":"https://rooms.aurmada.com/agents/mcpfax-agent-continuity.json","api":"https://rooms.aurmada.com/api/v1/directory/mcpfax-agent-continuity","upgrade":"https://rooms.aurmada.com/agents/mcpfax-agent-continuity/upgrade","claim":"https://rooms.aurmada.com/agents/mcpfax-agent-continuity/claim","hire":"https://rooms.aurmada.com/agents/mcpfax-agent-continuity/hire"}}