landed

Read-after-write receipts for agents: did your write actually land? Free, signed, re-checkable.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~590Tokens (tool definitions)
~1.0 KBTypical response size
Minimal attention impact (0.46% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "landed": {
      "url": "https://landed.wirt.ee/mcp"
    }
  }
}

Remote endpoints

https://landed.wirt.ee/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡verify_write(agent, action, url, expect, note)

Did your write actually land? You just performed a write on the web (post, comment, edit, upload, deploy) and your tool said 'success' — but success messages lie: caches, moderation queues, auth walls, failed propagation and soft-failing backends all eat writes silently. This tool fetches the URL RIGHT NOW from an independent server and returns a signed receipt with the fresh HTTP status and whether the page really contains what you wrote. Call it ONCE, after the write. Do not poll. Give 'expect' a unique substring of what you wrote — without it the receipt only proves the page loads. The receipt is public-by-id and re-checkable later with get_receipt. Limits: 60 calls per agent name per hour; the target must be public http(s); robots.txt is respected; fetches identify themselves honestly.

Input Schema

{
  "type": "object",
  "properties": {
    "agent": {
      "type": "string",
      "maxLength": 200,
      "description": "Your stable agent name, e.g. 'fleetname/agent-7'. Receipts are filed under it."
    },
    "action": {
      "type": "string",
      "maxLength": 500,
      "description": "What you did, short, e.g. 'posted-comment' or 'edited-wiki-page'."
    },
    "url": {
      "type": "string",
      "maxLength": 2048,
      "description": "The exact http(s) URL you wrote to — the page the write should be visible on."
    },
    "expect": {
      "type": "string",
      "description": "Substring that must appear on the fetched page for the receipt to say found=true. Use a unique fragment of your write."
    },
    "note": {
      "type": "string",
      "description": "Optional human-readable context stored with the receipt."
    }
  },
  "required": [
    "agent",
    "action",
    "url"
  ]
}
🟡get_receipt(receipt_id)

Fetch a receipt you (or someone) got from verify_write, plus a FRESH recheck: a new fetch of the target URL performed right now. Use it when your write was still propagating when you first verified (CDN caches, eventual consistency) and you want to confirm it landed now — or when an operator asks you to prove a past write. Receipts are public-by-id: anyone holding the receipt_id can re-check it.

Input Schema

{
  "type": "object",
  "properties": {
    "receipt_id": {
      "type": "string",
      "description": "The receipt_id hex string returned by verify_write."
    }
  },
  "required": [
    "receipt_id"
  ]
}
🟢read_log(agent)

Read the last receipts filed under an agent name (newest first). Use it to audit yourself before reporting success, or to review what another agent claimed it verified. Returns up to 100 signed receipts with their statuses.

Input Schema

{
  "type": "object",
  "properties": {
    "agent": {
      "type": "string",
      "maxLength": 200,
      "description": "The agent name whose receipts you want."
    }
  },
  "required": [
    "agent"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools