{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_amyy224btr97","handle":"excalibur-mcp","url":"https://wellknown.network/agents/excalibur-mcp","links":{"self":"https://wellknown.network/agents/excalibur-mcp/record.json","html":"https://wellknown.network/agents/excalibur-mcp","markdown":"https://wellknown.network/agents/excalibur-mcp/record.md","api":"https://wellknown.network/api/v1/agents/excalibur-mcp","status":"https://wellknown.network/api/v1/agents/excalibur-mcp/status","claim":"https://wellknown.network/agents/excalibur-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/excalibur-mcp/claim.json","badge":"https://wellknown.network/agents/excalibur-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/excalibur-mcp/history","tools":"https://wellknown.network/api/v1/agents/excalibur-mcp/tools"},"ard":{"identifier":"urn:air:excalibur-mcp.fastmcp.app:server:excalibur-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"excalibur-mcp","summary":"FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native","description":"FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native","publisher":{"name":"lonniev","url":null},"homepage":null,"repository":"https://github.com/lonniev/excalibur-mcp","version":"0.40.2","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://excalibur-mcp.fastmcp.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-29T22:12:23.875246Z","publishedAt":"2026-08-29T22:12:23.875246Z","registryName":"io.github.lonniev/excalibur-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"content.social","name":"Social Media","confidence":1,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":1,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":1,"provenance":"derived"},{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":1,"provenance":"derived"},{"slug":"finance.accounting","name":"Accounting","confidence":0.948,"provenance":"derived"}],"categories":["automation","commerce","content","data","finance","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-10-09T21:27:23.659Z","lastProbedAt":"2026-10-09T21:27:23.659Z","statusComputedAt":"2026-10-09T21:28:10.723Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":413,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":109,"ok":109,"authBoundaryOk":0,"serviceOk":109,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-09T21:27:23.659Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":381,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T15:32:34.968Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":500,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T09:28:18.570Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":353,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T03:22:31.159Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":495,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T20:24:15.927Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":337,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T13:22:46.494Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":328,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:23:26.419Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":354,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"65d003b1c0495d5ed1a36feddfa2995c1db722e998a8cbcadcfb18fae629196c","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T00:26:52.676Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":324,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"65d003b1c0495d5ed1a36feddfa2995c1db722e998a8cbcadcfb18fae629196c","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T17:30:29.083Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":353,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"65d003b1c0495d5ed1a36feddfa2995c1db722e998a8cbcadcfb18fae629196c","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T11:26:20.775Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":339,"error":null,"detail":{"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"toolCount":86,"toolsHash":"65d003b1c0495d5ed1a36feddfa2995c1db722e998a8cbcadcfb18fae629196c","serverName":"eXcalibur","capabilities":["experimental","logging","prompts","resources","tools","extensions"],"serverVersion":"3.4.7","protocolVersion":"2025-06-18"}}],"tools":[{"name":"excalibur_check_balance","description":"Check a patron's credit balance at this operator.\n\nThis is the patron's spending balance — credits purchased via\nLightning for tool calls at this operator. For "},{"name":"excalibur_purchase_credits","description":"Buy credits via Bitcoin Lightning.\n\nCreates a Lightning invoice. Pay it with any Lightning wallet,\nthen call check_payment to confirm. Proof of npub ownership i"},{"name":"excalibur_check_payment","description":"Check the payment status of a Lightning invoice.\n\nCall after paying the invoice from purchase_credits.\nFree — no credits required. Proof of npub ownership is re"},{"name":"excalibur_restore_credits","description":"Credit a patron's ledger from a BTCPay-settled invoice.\n\n**RESTRICTED to the operator** — the operator owns the books and is\nthe only party who can issue a manu"},{"name":"excalibur_account_statement","description":"Generate a patron's account statement at this operator.\n\nReturns the patron's purchase history, active credit tranches,\nper-tool usage breakdown, and recent dai"},{"name":"excalibur_account_statement_infographic","description":"Generate a visual SVG infographic of your account statement.\n\nReturns the same data as account_statement, rendered as a dark-themed\nSVG graphic with balance her"},{"name":"excalibur_report_issue","description":"File a field report about this service as a GitHub issue on the operator's repo.\n\nFound a tool's metadata or response wrong or confusing? Report it where the to"},{"name":"excalibur_service_status","description":"Check the health and configuration of this service. Free."},{"name":"excalibur_get_operator_onboarding_status","description":"Report this operator's configuration readiness.\n\nShows which operator settings are configured, which are missing,\nand how to deliver each missing value. For pat"},{"name":"excalibur_get_patron_onboarding_status","description":"Report a patron's credential readiness for this operator.\n\nFor set-once services (eXcalibur, TheBrain), shows which patron\nsecrets are configured and which are "},{"name":"excalibur_session_status","description":"Check operator readiness. Returns the operator lifecycle\nstate and clear guidance on what to do next. Free.\n\nLifecycle states:\n- ready: Vault AND pricing model "},{"name":"excalibur_request_credential_channel","description":"Open a Secure Courier channel for credential delivery.\n\nThis is the CREDENTIAL-DELIVERY flow — use it to hand over a service\nsecret (API keys, tokens). To merel"},{"name":"excalibur_receive_credentials","description":"Pick up credentials from the Secure Courier.\n\nCompletes the CREDENTIAL-DELIVERY flow (the ownership-proof\ncounterpart is ``receive_npub_proof``).\n\n**Call this o"},{"name":"excalibur_forget_credentials","description":"Delete vaulted credentials for a specific service and npub.\n\nFor operator credentials, pass the operator's own npub. For patron\ncredentials, pass the patron's n"},{"name":"excalibur_update_patron_credential","description":"Add or update a single patron credential field.\n\nMerges into existing stored credentials without affecting\nother fields. Useful for setting an account identifie"},{"name":"excalibur_update_operator_credential","description":"Add or update a single operator secret field.\n\nMerges into the operator's stored credentials without touching the\nothers — the field-level counterpart to re-del"},{"name":"excalibur_delete_patron_credential","description":"Remove a single patron credential field.\n\nDeletes one field from stored credentials without affecting\nother fields. Free. Proof of npub ownership is required —\n"},{"name":"excalibur_delete_operator_credential","description":"Remove a single operator secret field.\n\nDeletes one key from the operator's encrypted credential blob without\ntouching the others — the field-level counterpart "},{"name":"excalibur_get_patron_credential_fields","description":"List stored patron credential field names (not values).\n\nReturns the names of fields stored for a patron, plus each\nfield's ``delivered_at`` ISO-8601 timestamp "},{"name":"excalibur_begin_oauth","description":"Start the OAuth2 authorization flow.\n\nReturns an authorization URL. Open it in a browser to log in\nand authorize. Then call ``check_oauth_status`` with the\nsame"},{"name":"excalibur_check_oauth_status","description":"Check whether the OAuth2 authorization flow has completed.\n\nCall after opening the authorization URL from ``begin_oauth``\nand completing the login in your brows"},{"name":"excalibur_request_npub_proof","description":"Request npub ownership proof from a patron via Nostr DM.\n\nThis is the npub-OWNERSHIP-PROOF flow — use it when a call returns\n``proof_required``. It proves the c"},{"name":"excalibur_receive_npub_proof","description":"Receive npub ownership confirmation from a patron.\n\nCompletes the npub-OWNERSHIP-PROOF flow (the credential-delivery\ncounterpart is ``receive_credentials``).\n\n*"},{"name":"excalibur_check_proof_status","description":"Check whether a proof grant is still valid.\n\nMirrors ``check_oauth_status`` for the npub-proof flow: a calling\nagent can ask \"will my next paid call accept this"},{"name":"excalibur_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"excalibur_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"excalibur_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"excalibur_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"excalibur_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"excalibur_check_authority_balance","description":"Check this operator's tax balance at the Authority.\n\nReturns the sats available for certifying patron credit purchases.\nWhen this balance reaches zero, patron t"},{"name":"excalibur_get_pricing_model","description":"Get the active pricing model for this operator. Free.\n\nIf no model exists, self-initializes a scaffold with all\nregistered tools at 0 sats.  No economic data fr"},{"name":"excalibur_set_pricing_model","description":"Set the active pricing model. RESTRICTED to operator.\n\nRequires a valid proof (Schnorr-signed kind-27235 event)\nproving the caller holds the operator's nsec."},{"name":"excalibur_reset_pricing_model","description":"Erase all pricing models and restore a viable default.\n\nDeletes every stored model, then self-initializes a fresh one\nfrom the tool registry — all tools at 0 sa"},{"name":"excalibur_request_adoption","description":"Ask a chosen Authority to adopt this operator (deferred courtship).\n\nRESTRICTED to the operator — requires proof the caller controls this\noperator's npub. Resol"},{"name":"excalibur_adoption_status","description":"Check this operator's adoption-request status at a chosen Authority.\n\nFree. Polls the Authority MCP-to-MCP for the status of this operator's\nrequest (pending / "},{"name":"excalibur_restore_neon_schema","description":"Prepare this operator's database schema again, ignoring the breadcrumb.\n\nDiagnostic / recovery tool for when Neon keeps answering 4xx and the\noperator suspects "},{"name":"excalibur_list_canonical_identities","description":"Return canonical (tool_id, mcp_name, …) for every tool the wheel exposes.\n\nThe authoritative source for any client (Studio, agents, FE)\nthat needs to know how t"},{"name":"excalibur_get_nostr_profile","description":"Read an npub's public Nostr profile (NIP-01 kind-0 metadata).\n\nFree, no proof — the data is already public on relays. Returns the\nlatest metadata fields (name, "},{"name":"excalibur_publish_nostr_profile","description":"Publish a CLIENT-SIGNED kind-0 profile to relays for an npub.\n\nThe wheel never holds a patron nsec. The frontend signs the kind-0\nmetadata event with the patron"},{"name":"excalibur_check_price","description":"Preview the effective cost of a tool call.\n\nShows the base cost and any constraint effects (discounts, free\ntrials, surge pricing). Free — no credits required."},{"name":"excalibur_list_constraint_types","description":"List all available constraint types and their parameter schemas.\n\nReturns the type, category, description, and parameter specs for\nevery constraint that can be "},{"name":"excalibur_mint_coupon","description":"Create a new operator-owned discount coupon.\n\nThe coupon owns its binding: ``tool_ids`` names the tools it\ndiscounts, and re-pricing a tool never touches it. A "},{"name":"excalibur_list_coupons","description":"List every coupon this operator has minted (newest first).\n\nEach row carries the current ``times_redeemed`` counter — the\nStudio renders a progress bar from thi"},{"name":"excalibur_update_coupon","description":"Patch a coupon's editable fields.\n\nPass only the fields you want to change.  To set a cap to\nunlimited (NULL in the schema), pass ``clear_uses_per_patron=true``"},{"name":"excalibur_delete_coupon","description":"Delete a coupon.  Cascades to all patron redemptions.\n\nAny chain step referencing the deleted coupon_id becomes a\nno-op (the constraint returns neutral on unkno"},{"name":"excalibur_redeem_coupon","description":"Claim a coupon by its name (the code the operator shared).\n\nLooks up the operator's coupon by ``code``, validates the window\nand total cap, and records a per-pa"},{"name":"excalibur_list_my_coupons","description":"List the coupons this patron has redeemed on this operator.\n\nReturns both active and exhausted redemptions with a per-row\n``status`` (``active`` / ``window_clos"},{"name":"excalibur_forget_coupon","description":"Remove a coupon from this patron's redemption list.\n\nCosmetic only — the coupon itself still exists at the operator,\nand the patron can re-redeem the same code "},{"name":"excalibur_notarize_ledger","description":"Build a Merkle tree of all patron balances and submit the root\nto Bitcoin via OpenTimestamps.\n\nOperator-only background task. Bitcoin confirmation takes 1-6 hou"},{"name":"excalibur_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"excalibur_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"excalibur_post_tweet","description":"Post a text tweet with markdown formatting converted to Unicode rich text.\n\nAccepts standard markdown inline formatting and converts it to Unicode\nMathematical "},{"name":"excalibur_get_x_profile","description":"Fetch the connected X account's handle and name for this patron (free).\n\nUses the patron's vaulted X OAuth token to call X's ``/users/me``. Returns\n``{connected"},{"name":"excalibur_post_nostr_message","description":"Publish a public Nostr note (kind 1) authored by your proven npub.\n\neXcalibur cannot sign a note *as* you — a Nostr event must be signed by the\nkey it claims to"},{"name":"excalibur_post_tweet_image","description":"Post a tweet with a hero banner image to X/Twitter.\n\nProvide either an image_url (fetched and attached) or banner_svg\n(rendered to PNG and attached). Text suppo"},{"name":"excalibur_create_post","description":"Store a new post (draft or scheduled). Returns its ``post_id``."},{"name":"excalibur_get_post","description":"Read one stored post by id (owner-scoped)."},{"name":"excalibur_list_posts","description":"List your stored posts, server-side sorted, filtered, and offset-paginated.\n\nOptional ``status`` filter — a single status or a comma-separated set\n(e.g. ``draft"},{"name":"excalibur_update_post","description":"Patch a stored post. ``patch`` may set ``doc, publish_at, recurrence,\ncease_at, status`` (omit a field to leave it unchanged). ``text_cache`` is\nwritten when su"},{"name":"excalibur_delete_post","description":"Delete a stored post. Default is a soft delete (``status='archived'``);\npass ``hard=True`` to remove the row permanently."},{"name":"excalibur_list_snippets","description":"List your saved post snippets, server-side sorted, filtered, and\noffset-paginated. ``sort_col`` is one of ``favorite|created|updated|name``\n(default ``favorite`"},{"name":"excalibur_get_snippet","description":"Read one of your saved snippets by id (full row incl. ``doc`` block\ndocument). Free and owner-scoped. Returns ``{\"success\": true, \"snippet\": …}``\nor ``snippet_n"},{"name":"excalibur_save_snippet","description":"Save a reusable post snippet (opening/footer/CTA). Omit ``snippet_id`` to\ncreate a new one; pass it to update an existing snippet in place (name/text/\nfavorite/"},{"name":"excalibur_delete_snippet","description":"Delete one of your saved snippets by id. Free and owner-scoped."},{"name":"excalibur_find_conversations","description":"Search X's last 7 days for people asking something you could answer,\nscore each thread 0..100, and store the result under your npub for\n``list_conversations`` t"},{"name":"excalibur_reply_to_conversation","description":"Post your reply into one of your leads' threads on X (``conversation_id``\nis the row id from ``list_conversations``). ``text`` is up to 280 characters;\nmarkdown"},{"name":"excalibur_list_conversations","description":"Page through your stored conversation leads, server-side sorted and\nfiltered. ``query_id`` narrows to one saved query (``\"adhoc\"`` for leads from\nad-hoc searche"},{"name":"excalibur_set_conversation_status","description":"Mark one of your leads ``new|seen|engaged|dismissed`` by its row id (the\n``id`` from ``list_conversations``, not X's conversation id). A re-run of\nthe search ne"},{"name":"excalibur_list_conversation_queries","description":"List your saved conversation queries with their last-run watermarks.\nFree and owner-scoped. Returns ``{queries:[…]}``."},{"name":"excalibur_save_conversation_query","description":"Save a named X search clause to run with ``find_conversations``. Omit\n``query_id`` to create; pass it to update in place — only the fields you pass\nchange, and "},{"name":"excalibur_delete_conversation_query","description":"Delete one of your saved conversation queries. The leads it found are\nkept (they become ad-hoc leads). Free and owner-scoped."},{"name":"excalibur_get_voice","description":"Read your saved writing Voice — a profile blurb plus a list of \"banned\nconstruction\" chips (``{text, on}``) the editor passes to\n``refine_post_region``. Owner-s"},{"name":"excalibur_save_voice","description":"Save your writing Voice (replaces the previous one — it is a per-npub\nsingleton). ``profile`` is free text. ``bans`` is a list of ``{text, on}``\nobjects: ``text"},{"name":"excalibur_refine_post_region","description":"Refine a flagged region of a post with an LLM — server-side.\n\nThe operator's LLM key stays in the vault and never leaves the\nserver. Send the flagged ``region``"},{"name":"excalibur_resolve_dynamic_block","description":"Start resolving a dynamic post block with an LLM — returns a CLAIM CHECK.\n\nA dynamic block's ``prompt`` is run by the model (with web search + web fetch for\nliv"},{"name":"excalibur_fetch_dynamic_block","description":"Redeem a ``resolve_dynamic_block`` claim check (free, proof-gated).\n\nPoll this with the ``claim_check`` from ``resolve_dynamic_block`` until\n``status == \"done\"`"},{"name":"excalibur_harvest_metrics","description":"Operator-only: one cadence-aware metrics harvest sweep.\n\nDrains due ``metrics_harvest_job`` rows (t+15m … t+28d), fetches X\n``non_public_metrics`` / ``organic_m"},{"name":"excalibur_get_post_metrics","description":"Patron: raw metrics snapshot series for one owned post.\n\nReturns the append-only ``post_metrics_snapshot`` rows (impressions, likes,\nclicks, cadence_key, t_offs"},{"name":"excalibur_post_performance","description":"Patron: derived reach scores across your harvested post corpus.\n\nComputes escape velocity (t+15m vs rolling median), breakout ratio\n(final reach ÷ rolling-media"},{"name":"excalibur_post_performance_infographic","description":"Patron: SVG infographic of post performance (gold-steel theme).\n\nMirrors ``account_statement_infographic`` — a dark-themed SVG of corpus\nsize, median t+15m impr"},{"name":"excalibur_process_scheduled_posts","description":"Launch a publisher for every due post (operator-only).\n\nSelects ``scheduled`` posts whose ``publish_at`` has arrived, claims each\natomically, and starts one bac"},{"name":"excalibur_get_scheduler_log","description":"Read recent scheduler-tick outcomes.\n\nEach ``process_scheduled_posts`` run — fired by the Cloudflare cron Worker or\na manual trigger — records its summary. This"},{"name":"excalibur_scheduler_pending","description":"What is the scheduled-post cron Worker waiting on? (operator-only).\n\nWhen the Worker's authorization lapses it DMs the operator a challenge\nphrase and parks. Th"},{"name":"excalibur_scheduler_status","description":"The scheduler's configuration and current status (free; any proven patron).\n\nRelays the cron Worker's public ``/status`` — cadence, version, renewal\nwindow, and"},{"name":"excalibur_scheduler_check_now","description":"Ask the scheduler to run one tick now (free; any proven patron).\n\nPokes the Worker's ``/tick`` — the same work the ~30-minute cron does: it\nclaims a pending pro"},{"name":"excalibur_scheduler_reissue","description":"Send the scheduler's proof request again, now (operator-only).\n\nFor a pending request that is not going to complete — the reply went to an\nolder DM, or ``schedu"}],"package":null,"toolSurface":{"id":"ts_2q2j3d5vsqd2","endpointId":"ep_9ppnf8pzsfdt","hash":"1599185dfb851a7af3ea536f9c796055ef5b4d76ebba464c5be4a4d9fd9d3df6","toolCount":86,"serverName":"eXcalibur","serverVersion":"3.4.7","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-08T13:22:46.511Z","lastSeenAt":"2026-10-09T21:27:23.649Z","observations":6,"toolNames":["excalibur_check_balance","excalibur_purchase_credits","excalibur_check_payment","excalibur_restore_credits","excalibur_account_statement","excalibur_account_statement_infographic","excalibur_report_issue","excalibur_service_status","excalibur_get_operator_onboarding_status","excalibur_get_patron_onboarding_status","excalibur_session_status","excalibur_request_credential_channel","excalibur_receive_credentials","excalibur_forget_credentials","excalibur_update_patron_credential","excalibur_update_operator_credential","excalibur_delete_patron_credential","excalibur_delete_operator_credential","excalibur_get_patron_credential_fields","excalibur_begin_oauth","excalibur_check_oauth_status","excalibur_request_npub_proof","excalibur_receive_npub_proof","excalibur_check_proof_status","excalibur_oracle_how_to_join","excalibur_oracle_get_tax_rate","excalibur_oracle_lookup_member","excalibur_oracle_about","excalibur_oracle_network_advisory","excalibur_check_authority_balance","excalibur_get_pricing_model","excalibur_set_pricing_model","excalibur_reset_pricing_model","excalibur_request_adoption","excalibur_adoption_status","excalibur_restore_neon_schema","excalibur_list_canonical_identities","excalibur_get_nostr_profile","excalibur_publish_nostr_profile","excalibur_check_price","excalibur_list_constraint_types","excalibur_mint_coupon","excalibur_list_coupons","excalibur_update_coupon","excalibur_delete_coupon","excalibur_redeem_coupon","excalibur_list_my_coupons","excalibur_forget_coupon","excalibur_notarize_ledger","excalibur_get_notarization_proof","excalibur_list_notarizations","excalibur_post_tweet","excalibur_get_x_profile","excalibur_post_nostr_message","excalibur_post_tweet_image","excalibur_create_post","excalibur_get_post","excalibur_list_posts","excalibur_update_post","excalibur_delete_post","excalibur_list_snippets","excalibur_get_snippet","excalibur_save_snippet","excalibur_delete_snippet","excalibur_find_conversations","excalibur_reply_to_conversation","excalibur_list_conversations","excalibur_set_conversation_status","excalibur_list_conversation_queries","excalibur_save_conversation_query","excalibur_delete_conversation_query","excalibur_get_voice","excalibur_save_voice","excalibur_refine_post_region","excalibur_resolve_dynamic_block","excalibur_fetch_dynamic_block","excalibur_harvest_metrics","excalibur_get_post_metrics","excalibur_post_performance","excalibur_post_performance_infographic","excalibur_process_scheduled_posts","excalibur_get_scheduler_log","excalibur_scheduler_pending","excalibur_scheduler_status","excalibur_scheduler_check_now","excalibur_scheduler_reissue"],"distinctSurfaces":7},"endpointFacts":[{"id":"ep_9ppnf8pzsfdt","url":"https://excalibur-mcp.fastmcp.app/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T03:22:31.184Z","auth":{"observedAt":"2026-10-09T03:22:31.673Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-09T03:22:31.682Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"*.fastmcp.app","issuer":{"commonName":"Amazon RSA 2048 M04","organization":"Amazon"},"validFrom":"2026-06-17T00:00:00.000Z","validTo":"2026-12-31T23:59:59.000Z","daysToExpiry":82,"sanCount":1,"fingerprint256":"0C:7C:51:5D:D9:FD:62:86:F7:4C:72:2E:19:AC:51:32:03:15:C0:75:12:A7:47:66:6B:15:9F:40:7E:D8:17:DC"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.lonniev/excalibur-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.lonniev%2Fexcalibur-mcp","firstSeenAt":"2026-09-06T18:19:25.596Z","fetchedAt":"2026-10-07T16:20:37.578Z","normalizedAt":"2026-10-07T16:20:37.578Z"}]},"firstSeenAt":"2026-09-06T18:19:25.596Z","updatedAt":"2026-10-09T21:29:10.495Z"}