Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "excalibur_mint_coupon" and "excalibur_update_coupon"
Create a new operator-owned discount coupon.
The coupon owns its binding: ``tool_ids`` names the tools it
discounts, and re-pricing a tool never touches it. A coupon bound
to no tool discounts nothing, however many patrons redeem it.⟨28 unchanged words⟩ uniqueness).","type":"string"},"tool_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"The tools this coupon discounts — tool ids or MCP\ntool names, or ``[\"*\"]`` for every tool priced above zero."},"total_uses":{"anyOf":[{"type":"integer ⟨70 unchanged words⟩
⟨36 unchanged words⟩ rows survive (they key on coupon id). ``tool_ids`` replaces the coupon's binding — tool ids or MCP tool names, ``["*"]`` for every paid tool, ``[]`` to unbind it. RESTRICTED to operator — requires proof.
⟨33 unchanged words⟩ ":"null"}],"default":null},"tool_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null},"total_uses":{"anyOf":[{"type":"integer ⟨32 unchanged words⟩
Added "excalibur_delete_conversation_query", "excalibur_find_conversations", "excalibur_list_conversation_queries" and 4 more (79 tools before, 86 now)
Delete one of your saved conversation queries. The leads it found are kept (they become ad-hoc leads). Free and owner-scoped.
Search X's last 7 days for people asking something you could answer, score each thread 0..100, and store the result under your npub for ``list_conversations`` to page through. Pass exactly one of ``query_id`` (a saved query from ``save_conversation_query``) or ``query`` (an ad-hoc X search clause — your domain nouns are the selector; X has no ``?`` operator). ``safe_defaults`` appends ``-is:retweet -has:links -has:cashtags lang:en`` (a photo is not a link); your own posts are always excluded. ``max_posts`` caps the read (10..300) — every post X returns is billed to the operator, which is wha…
List your saved conversation queries with their last-run watermarks. Free and owner-scoped. Returns ``{queries:[…]}``.
Changed the definition of "excalibur_check_proof_status", "excalibur_receive_npub_proof" and "excalibur_request_npub_proof"
Check whether apreviously-cachedproofdpop_tokengrant is still valid. Mirrors ``check_oauth_status`` for the npub-proof ⟨13 unchanged words⟩ dpop_token?" before burning credits on a guaranteed failure. Expiry is read from the grant itself; the only store consulted is the patron's revocation watermark. Free, no side effects —does not evict the cache ortouchestouchnorelays.relay.
Changed the definition of "excalibur_restore_neon_schema"
Re-runPrepare``ensure_schema()``thisonoperator'severydatabaseNeonVaultschemathisagain,operatorignoringuses.the breadcrumb. Diagnostic / recovery tool forthe case where thewhen NeonHTTP SQL API is returning
Changed the definition of "excalibur_session_status"
⟨14 unchanged words⟩ do next. Free. Lifecycle states: - ready:OperatorVaultisANDwarmpricingandmodelfullyverifiedoperationalon—thisvaultcall.ANDProceedpricing
Added "excalibur_scheduler_reissue" (78 tools before, 79 now)
Send the scheduler's proof request again, now (operator-only). For a pending request that is not going to complete — the reply went to an older DM, or ``scheduler_pending`` shows a last check that says the request was replaced or expired. The Worker drops it and DMs a fresh one straight away instead of waiting out its hour. Approve the NEWEST DM in Studio, then ``scheduler_check_now``. Signed as the operator with a sentinel ``u``-tag the Worker checks literally, like ``scheduler_pending``, so the browser signs nothing. An already-authorized scheduler is left alone. ``restricted``: gated to …
Certificate recorded, valid to 2026-12-31
Authorization not required
First tool surface recorded: 78 tools (server version 3.4.7)
Showing the latest 9 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Page through your stored conversation leads, server-side sorted and filtered. ``query_id`` narrows to one saved query (``"adhoc"`` for leads from ad-hoc searches); ``status`` is a comma list of ``new|seen|engaged|dismissed``; ``min_score`` is 0..100. ``sort_col`` is one of ``score|found|seen|posted|replies|followers``; ``sort_dir`` is ``asc|desc``. ``search`` is a case-insensitive regex over the post text or author handle. ``date_from``/``date_to`` bound ``date_field`` (``found|posted``). ``page`` is 0-indexed; ``page_size`` is 1..100. Free, owner-scoped. Each row carries ``url`` — the thread…
Post your reply into one of your leads' threads on X (``conversation_id`` is the row id from ``list_conversations``). ``text`` is up to 280 characters; markdown inline formatting is converted the same way ``post_tweet`` does it. Posted with your own X token as a reply to the lead's post; on X's confirmation the lead is marked ``engaged`` and remembers the reply. A refused post changes nothing and refunds the fare. Returns ``{reply:{tweet_id,url}, conversation}``.
Save a named X search clause to run with ``find_conversations``. Omit ``query_id`` to create; pass it to update in place — only the fields you pass change, and a changed ``query`` resets the last-run watermark. ``weights`` holds only the scoring values you override. At most 50 saved queries per npub; names are unique per npub. Free and owner-scoped. Returns ``{"success": true, "query": …}``.
Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the ``id`` from ``list_conversations``, not X's conversation id). A re-run of the search never changes a status you set. Free and owner-scoped.
⟨106 unchanged words⟩ nsec signed it). On success, returnsthea new ``dpop_token``:—an Operator-signed **proof grant envelope** ``{"grant": …, "nonce": …}`` bound to thesamepatron, this challenge, and the duration the patrontoken.named. The calling application MUST rememberitthatandwhole string and pass it asthe``dpop_token``parameteron every subsequent paid tool call. Theproofgrant(aishashself-verifying;ofnothingtheabouttoken)it is storedin the vault keyed by that hash — the MCP never stores the raw token itself.here. Free.
⟨113 unchanged words⟩ the relay mailbox. **Returns** a ``dpop_token`` — thedemonstrated-proof-of-possession tokenone-timethatchallengethenoncecallingshownapplicationin theMUSTDM.rememberPassanditpasstoas``receive_npub_proof``the ``dpop_token``toparametercollectontheeveryreply.subsequentIt ispaidatoolmatchingcall.token,ThenotMCP doesanotcredential:retainonthisitsvalueownacrossitrestarts.authorizes nothing. **Lifecycle:**The``receive_npub_proof``cachedreturns the proof grant, which expires after thepatron's chosendurationduration.the patron named in their reply. When itexpires, call ``request_npub_proof``again for a fresh challenge,then wait for the user, thencall ``receive_npub_proof``. Free.