{"name":"io.github.lonniev/dpyc-oracle","slug":"lonniev-dpyc-oracle","title":null,"description":"DPYC Social Contract community concierge — free MCP for membership, governance, and onboarding","url":"https://mcp.market/server/lonniev-dpyc-oracle","rating":null,"grade":"B","score":81,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":20,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-29T23:21:53.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T07:45:52.697Z","last_ok_at":"2026-11-04T07:45:52.697Z","latency_ms":410},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/lonniev/dpyc-oracle","website":null,"version":"0.4.0","remotes":[{"type":"streamable-http","url":"https://dpyc-oracle.fastmcp.app/mcp"}],"packages":[],"tools":[{"name":"about","description":"Extended narration about DPYC, the Social Contract, and the Oracle.\n\nFetches README.md and GOVERNANCE.md from the dpyc-community repo and\nassembles a comprehensive context answer.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"cast_ban_vote","description":"Cast a Lightning-funded vote in an active ban election.\n\nNot yet implemented — will verify npub membership, validate the\nelection is active, and record the vote with a Lightning payment proof.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"election_id":{"type":"string"},"vote":{"type":"string"},"npub":{"type":"string"}},"required":["election_id","vote","npub"],"additionalProperties":false}},{"name":"check_ban_status","description":"Check whether an npub is banned from the DPYC Social Contract.\n\nLooks up the member in the community registry and checks whether\ntheir status is \"banned\".  Unknown npubs are not considered banned\n(they simply aren't members).\n\nFree, unauthenticated.  Used by operators during the cold path\n(credit purchases) to enforce community bans.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string"}},"required":["npub"],"additionalProperties":false}},{"name":"confirm_citizenship","description":"Complete the citizen registration by submitting a signed Nostr event.\n\nThis is part of the **citizen** registration flow (Operator-owned).\nThe Operator calls this on behalf of a patron after the patron has\nsigned the cryptographic challenge from request_citizenship.\n\nVerifies:\n1. The challenge exists and hasn't expired\n2. The Schnorr signature is valid\n3. The event's pubkey matches the claimed npub\n4. The event content contains the issued nonce\n5. The npub is not already registered\n\nOn success, commits directly to dpyc-community/members/citizens/{npub}.json\nto register the new Citizen immediately.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string"},"challenge_id":{"type":"string"},"signed_event_json":{"type":"string"}},"required":["npub","challenge_id","signed_event_json"],"additionalProperties":false}},{"name":"deregister_operator","description":"Remove an Operator from the DPYC community registry.\n\nCalled by an Authority when the operator leaves it or the Authority\ndisowns the operator; the request must be signed with the Authority's\nkey. An Operator cannot exist without a sponsoring Authority, so\nderegistration removes the member file entirely, returning the Operator\nto initial state.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"operator_npub":{"type":"string","description":"Nostr npub of the Operator to remove."},"authority_npub":{"type":"string","description":"npub of the Authority requesting deregistration\n(must be a registered authority or prime_authority)."}},"required":["operator_npub","authority_npub"],"additionalProperties":false}},{"name":"economic_model","description":"Explain the DPYC Social Contract economic model — qualitatively.\n\nDescribes how value flows through the network: ad valorem\ncertification fees, the cascade up the Certification Chain to the\nFirst Curator, and where the live numbers actually live. The Oracle\nquotes **no** rates, counts, or revenue figures — those belong to the\nAuthorities' pricing models and the live registry, not to a docent.\nFree, unauthenticated.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"get_campaign","description":"Retrieve a published pricing campaign.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"author_npub":{"type":"string","description":"The campaign author's npub."},"operator_npub":{"type":"string","description":"The target operator's npub."},"slug":{"type":"string","description":"The campaign slug (directory name)."},"format":{"default":"json","type":"string","description":"\"json\" for importable data, \"markdown\" for readable summary."}},"required":["author_npub","operator_npub","slug"],"additionalProperties":false}},{"name":"get_relays","description":"Return the DPYC Nostr relay set, best first.\n\nThe single source of truth is ``dpyc-community/relays.json``. An Operator\nseeds its relay set from here at cold start (its only fixed dependency is\nthis Oracle endpoint), then reads its own bootstrap config from Nostr using\njust its nsec — no direct GitHub access.\n\nThat file is a curated *guess*: it says which relays are worth using, not\nwhich are up this minute. Relays that an operator reported and the Oracle\nthen proved unreachable are moved to the back of the list; everything else\nkeeps its declared order, and nothing is ever dropped.\n\nThis call never probes anything — it is on every operator's cold-start\npath, so it stays a lookup. Ranking improves only when someone hits a dead\nrelay and says so via ``report_relay_failure``. Report failures only;\nsuccesses need no announcement.\n\nFree.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"get_rulebook","description":"Fetch the DPYC Social Contract governance document.\n\nReturns the raw markdown of GOVERNANCE.md from the dpyc-community repo.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"get_tax_rate","description":"Explain how Tollbooth certification taxation works.\n\nTaxation is ad valorem and **per-Authority** — there is no single\nnetwork-wide number, and the Oracle deliberately quotes none. The\nactual fee is the Authority's own accounting, set in its pricing model\nand reported at transaction time. This tool is a docent: it explains\nthe model and points to the live source. For the exact figure, query\nthe relevant Authority's ``check_price`` for ``certify_credits``.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"how_to_add_authority","description":"End-to-end guide for spinning up a new Tollbooth Authority.\n\nReturns the eight-step procedure covering identity, region selection,\nGitHub workspace, dpyc-community registry entry, Neon + BTCPay + Horizon\ndeployment, BTCPay credential delivery via Secure Courier, the\nself-registration challenge-response with the parent Authority, and\npre-funding the cert-fee balance. Fetched live from docs/how-to-add-authority.md\nin the dpyc-community repo.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"how_to_join","description":"Tier-specific onboarding guide for joining the DPYC Social Contract.\n\nCovers all five tiers: Citizen, Advocate, Operator, Authority, and\nFirst Curator. Includes Nostr keygen instructions and practical next\nsteps.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"initiate_ban_election","description":"Initiate a community ban election against a member.\n\nNot yet implemented — will create a GitHub Issue with a 72-hour\ndiscussion period and Lightning-funded economic voting.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"target_npub":{"type":"string"},"reason":{"type":"string"}},"required":["target_npub","reason"],"additionalProperties":false}},{"name":"lightning_wallets","description":"Lightning wallets a newcomer can install to pay a Tollbooth invoice.\n\nEach comes with its App Store, Google Play and web links, a one-line\ndescription, whether it holds the keys for you, and whether it can buy\nbitcoin in the app. The order is how often a live web search mentions each\none this week, with the network's own pick first; without that search it\nis the community's curated order (``ranked_by`` says which).\n\nFree.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"list_campaigns","description":"List published pricing campaigns from the DPYC community.\n\nOptionally filter by operator or author npub.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"operator_npub":{"default":"","type":"string","description":"Filter to campaigns for this operator (optional)."},"author_npub":{"default":"","type":"string","description":"Filter to campaigns by this author (optional)."}},"additionalProperties":false}},{"name":"list_services","description":"Enumerate the live DPYC service network with self-described summaries.\n\nReads the member roster from the dpyc-community registry, then (when\n``probe=True``) performs a lightweight MCP handshake against each\nmember's public service endpoint to fetch that service's *own*\nself-description and tool inventory. Nothing about the services is\nhardcoded here — descriptions are authored by each service, and prices\ncome from each Operator/Authority pricing model (call the service's\n``check_price``).\n\nResilient by design: per-service timeout, partial results, brief\ncaching, and a registry-only fallback when an endpoint is asleep or\nunreachable. A sleeping service never breaks the listing. Free,\nunauthenticated.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"probe":{"default":true,"type":"boolean","description":"Handshake each endpoint for a live self-description. Set\nFalse for a fast registry-only listing (no network fan-out)."},"kind":{"default":"all","type":"string","description":"Role filter — \"all\", \"operator\", \"authority\", or \"advocate\"."}},"additionalProperties":false}},{"name":"lookup_member","description":"Look up a member by their Nostr npub.\n\nCan look up any role's npub — citizen, operator, or authority.\nReturns the full member record if found, or a not-found message.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string"}},"required":["npub"],"additionalProperties":false}},{"name":"network_advisory","description":"Get current network deployment advisory.\n\nReturns human-readable guidance on what changed recently, urgent\nupgrades, and actions operators should take. Fetched live from\nADVISORY.md in the dpyc-community repo.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"network_versions","description":"Get current recommended versions of all Tollbooth components.\n\nReturns component versions, minimum compatibility, active protocols,\nand a short advisory summary. Data is fetched live from\nnetwork-status.json in the dpyc-community repo.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"publish_campaign","description":"Publish a pricing campaign to the DPYC community.\n\nCommits both a machine-importable JSON file and a human-readable\nMarkdown summary to the dpyc-community campaigns directory. The\nrequest must be signed with ``author_npub``'s key (NIP-98), so a\ncampaign is published only under its author's own name.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"author_npub":{"type":"string","description":"The npub of the person who designed the campaign."},"operator_npub":{"type":"string","description":"The npub of the operator the campaign is for."},"campaign_json":{"type":"string","description":"The full campaign export as a JSON string."},"campaign_name":{"default":"","type":"string","description":"Optional display name. Derived from JSON if omitted."},"campaign_markdown":{"default":"","type":"string","description":"Optional pre-rendered Markdown. If omitted, the\nOracle generates a basic summary from the JSON."}},"required":["author_npub","operator_npub","campaign_json"],"additionalProperties":false}},{"name":"register_advocate","description":"Register a new Advocate in the DPYC community registry.\n\nAdvocates are community utility services that provide shared\ninfrastructure (e.g., OAuth2 callback collectors) but aren't\nmonetized Operators or certification Authorities.\n\nThe request must be signed with ``npub``'s own key (NIP-98): a\nservice registers itself, and no one can register an npub they do\nnot hold.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string","description":"Nostr npub of the Advocate service."},"display_name":{"type":"string","description":"Human-readable name for the service."},"service_name":{"type":"string","description":"Machine-readable service identifier\n(e.g., \"tollbooth-oauth2-collector\")."},"service_url":{"type":"string","description":"Public URL of the service."},"service_description":{"type":"string","description":"Short description of what the service does."}},"required":["npub","display_name","service_name","service_url","service_description"],"additionalProperties":false}},{"name":"register_authority","description":"Register a new Authority in the DPYC community registry.\n\nCalled by an Authority service at the end of the onboarding protocol\n(after the candidate proves npub ownership and the Prime Authority\napproves). Commits a new ``members/authorities/{npub}.json`` file to\ndpyc-community on GitHub.\n\nThe full Authority onboarding protocol is a 3-step Nostr DM\nchallenge-response flow:\n1. ``register_authority_npub(npub)`` — Authority sends DM challenge\n2. ``confirm_authority_claim(npub)`` — verifies candidate DM, escalates to Prime\n3. ``check_authority_approval(npub)`` — Prime approves, this tool is called","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"authority_npub":{"type":"string","description":"Nostr npub of the new Authority curator."},"display_name":{"type":"string","description":"Human-readable name for the Authority."},"service_url":{"type":"string","description":"Public MCP endpoint URL of the Authority service."},"upstream_authority_npub":{"type":"string","description":"npub of the sponsoring Authority (must\nalready exist as a prime_authority or authority in the registry)."}},"required":["authority_npub","display_name","service_url","upstream_authority_npub"],"additionalProperties":false}},{"name":"register_operator","description":"Register a new Operator in the DPYC community registry.\n\nCalled by an Authority service when its owner approves an operator's\nadoption request; the request must be signed with the Authority's key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"operator_npub":{"type":"string","description":"Nostr npub of the new Operator."},"display_name":{"type":"string","description":"Human-readable name for the Operator service."},"service_url":{"type":"string","description":"Public MCP endpoint URL of the Operator service."},"authority_npub":{"type":"string","description":"npub of the sponsoring Authority (must already\nexist as an authority or prime_authority in the registry)."}},"required":["operator_npub","display_name","service_url","authority_npub"],"additionalProperties":false}},{"name":"renounce_membership","description":"Citizen self-removal from the DPYC Social Contract via automated PR.\n\nNot yet implemented — will create a GitHub PR to remove the member\nfrom the registry.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string"}},"required":["npub"],"additionalProperties":false}},{"name":"report_relay_failure","description":"Report that a relay in the DPYC set was unreachable, and re-rank it.\n\nA report does not set a relay's rank. It asks the Oracle to measure that\nrelay *now*, and the Oracle's own probe decides. A false or mistaken\nreport therefore costs one probe and changes nothing — no caller can\ndemote a healthy relay by asserting that it is down.\n\nReport only failures. Successes are far too frequent to be worth\ncarrying, and a relay that works needs no announcement.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"relay":{"type":"string","description":"The relay that failed. Must already be in the DPYC set —\nthis tool re-measures the curated set, it is not a probe-anything\nprimitive that can be aimed at arbitrary hosts."},"reporter_npub":{"type":"string","description":"The reporting operator's npub."},"signed_event":{"type":"string","description":"A Nostr event signed by ``reporter_npub`` whose content\ncontains the relay URL, created within the last few minutes.\nStateless by design: no challenge is issued first, because a\nchallenge store would not survive this service's recycles — and\na relay report is most needed exactly when relays are broken."},"mode":{"default":"unknown","type":"string","description":"What was being attempted — ``\"send\"``, ``\"read\"``, or\n``\"unknown\"``. Recorded for the human reading the logs."}},"required":["relay","reporter_npub","signed_event"],"additionalProperties":false}},{"name":"request_citizenship","description":"Begin the citizen registration process (Operator-owned flow).\n\nThis is the **citizen** registration path. Called by the Operator on\nbehalf of a patron — invokes the Oracle directly.  No Authority npub\nis required or consulted.  The patron's npub is registered as a\nCitizen in the DPYC community.\n\nThe npub provided here becomes the user's **patron identity** — the\nkeypair they will use for credit purchases and service access across\nall Tollbooth-monetized services.\n\nNot to be confused with **operator** registration, which goes through\nthe Authority via a Nostr DM delegation request.\n\nIssues a cryptographic challenge that the applicant must sign with\ntheir Nostr private key (nsec) to prove they own the claimed npub.\nThe nsec never leaves the applicant's device.\n\nReturns a challenge_id, nonce, and signing instructions. The applicant\nsigns a Nostr event containing the nonce and submits it via\nconfirm_citizenship within 10 minutes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string"},"display_name":{"type":"string"}},"required":["npub","display_name"],"additionalProperties":false}},{"name":"resolve_authority_for","description":"Resolve the certifying Authority for an operator npub.\n\nReturns the Authority's ``{npub, url, name}`` (from the operator's\n``upstream_authority_npub``). Use this after bootstrap to learn — and\nverify — which Authority signed your config, without reading GitHub.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"npub":{"type":"string"}},"required":["npub"],"additionalProperties":false}},{"name":"resolve_service","description":"Resolve a DPYC service by ``name`` or ``npub``.\n\nReturns ``{npub, url, name, role, purchase_mode}`` where ``purchase_mode``\nis the registry-topology fact ``\"certified\"`` or ``\"direct\"`` (not a price).\nSupply exactly one of ``name`` or ``npub``.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"default":"","type":"string"},"npub":{"default":"","type":"string"}},"additionalProperties":false}},{"name":"service_status","description":"Diagnostic: report this service's software versions and runtime info.\n\nFree, unauthenticated. Use to verify deployment versions across the\nDPYC ecosystem.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"update_operator","description":"Update an existing Operator's registry entry.\n\nUsed when an Operator moves to a new MCP endpoint, changes its display\nname, or needs to correct a registration. Called by an Authority when its\nowner approves the operator's update request; the request must be signed\nwith that Authority's key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"operator_npub":{"type":"string","description":"Nostr npub of the Operator to update."},"authority_npub":{"type":"string","description":"npub of the requesting Authority (must be a\nregistered authority or prime_authority)."},"service_url":{"default":"","type":"string","description":"New MCP endpoint URL (leave empty to keep current)."},"display_name":{"default":"","type":"string","description":"New display name (leave empty to keep current)."}},"required":["operator_npub","authority_npub"],"additionalProperties":false}},{"name":"who_is_first_curator","description":"Identify the First Curator (Prime Authority) of the Certification Chain.\n\nReturns the curator's npub, display name, and member record.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}}],"scan":{"score":81,"grade":"B","scanned_at":"2026-10-31T17:29:15.673Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-31T17:29:15.584Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1731ms"]},"poisoning":{"score":15,"max":15,"notes":["31 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://dpyc-oracle.fastmcp.app/mcp","reachable":true,"authRequired":false,"latencyMs":1731,"serverInfo":{"name":"dpyc-oracle","version":"4.1.4"}}],"packages":[],"repo":{"found":true,"owner":"lonniev","repo":"dpyc-oracle","archived":false,"pushedAt":"2026-10-29T23:21:53Z","stars":0,"forks":0,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/2193384?v=4","ownerCreatedAt":"2012-08-22T02:07:21Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/2193384?v=4&s=128","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-10-29T23:21:53.000Z","score":20}}}},"grade_history":[],"reviews":[]}