Koskamo

dpyc-oracle MCP

A community concierge MCP server for the DPYC Social Contract that handles membership onboarding, governance queries, and service discovery. It supports citizen registration via Schnorr signature verification, advocate registration for shared infrastructure, and provides tools to list services, lookup members, and check network versions.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

dpyc-oracle MCP logo, by lonnievCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by lonniev
MCP endpoint (Streamable HTTP)
https://dpyc-oracle.fastmcp.app/mcp
Vendor documentation

What its tools do

31 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

31 of 31 have a description · 0 of 31 declare behavior hints · 10 of 19 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Answer membership, governance, and onboarding questions
  • Register new citizens via Schnorr signature verification
  • Register advocates for shared infrastructure services
  • List services and lookup member data

Source and maintenance

Community listingRegistry 0.4.0
Maintenance checked

Protocol and capabilities

Server
dpyc-oracle 4.1.5
MCP protocol negotiated in check
2025-11-25
Tools
31 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

DPYC Oracle — community concierge for the DPYC Social Contract. DPYC ("Don't Pester Your Customer") is a philosophy and protocol for API monetization via Bitcoin Lightning micropayments. Users pre-fund a satoshi balance and consume API calls without KYC, stablecoins, or mid-session payment popups. Identity is a Nostr keypair (npub), not an email or username. Tollbooth monetizes complete business information at the MCP tool layer — not raw REST data fragments — using pre-funded Lightning balances that eliminate per-request payment ceremonies. The DPYC Social Contract is a community of Operators and Authorities who agree to transparent, auditable economic rules. Operators run MCP services and collect Lightning fares via Tollbooths. Authorities certify Operators and collect a small tax on every purchase order. The First Curator (Prime Authority) sits at the root of the chain and mints the initial cert-sat supply. Membership tiers: Citizen → Advocate → Operator → Authority → First Curator. Advocates are community utility services (e.g., OAuth2 collectors) that provide shared infrastructure but aren't monetized Operators or certification Authorities. They register via the Oracle's register_advocate tool. Authority onboarding uses a Nostr DM challenge-response protocol: candidates call register_authority_npub on their Authority service, prove npub ownership via DM, and receive Prime Authority approval. The Oracle's register_authority tool commits the new Authority to the community registry once the onboarding flow completes. This Oracle is a free, unauthenticated concierge that answers questions about membership, governance, onboarding, and how taxation works by reading the dpyc-community registry on GitHub. It does not require payment or credentials. It quotes no prices or tax rates of its own — those belong to each Operator's and Authority's pricing model. For a live figure, call get_tax_rate() to learn how to ask the relevant Authority's check_price. The live ecosystem is read from the dpyc-community registry — never guess at the roster. Call list_services() to enumerate the live network with each service's own self-description (MCP handshake), about() for the full set of ecosystem links, lookup_member() to resolve any npub, list_canonical_identities via a member service for tool identities, and network_versions() for current component versions. Canonical entry points: - dpyc-community: https://github.com/lonniev/dpyc-community (registry + governance — the authoritative member list) - tollbooth-dpyc: https://github.com/lonniev/tollbooth-dpyc (Python SDK every operator and Authority builds on) - tollbooth-authority: https://github.com/lonniev/tollbooth-authority (Authority MCP — certification + fee ledger) - tollbooth-sample: https://github.com/lonniev/tollbooth-sample (reference Operator template for new services) - tollbooth-pricing-studio: https://github.com/lonniev/tollbooth-pricing-studio (iOS app operators use to design pricing models)

Tools

31 advertised

about — About
Advertised by the server during the last successful anonymous check.

Extended narration about DPYC, the Social Contract, and the Oracle. Fetches README.md and GOVERNANCE.md from the dpyc-community repo and assembles a comprehensive context answer.

about input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
about output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
lookup_member — Lookup Member
Advertised by the server during the last successful anonymous check.

Look up a member by their Nostr npub. Can look up any role's npub — citizen, operator, or authority. Returns the full member record if found, or a not-found message.

lookup_member input schema
{
  "type": "object",
  "required": [
    "npub"
  ],
  "properties": {
    "npub": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
lookup_member output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "string"
        }
      ]
    }
  },
  "x-fastmcp-wrap-result": true
}
get_tax_rate — Get Tax Rate
Advertised by the server during the last successful anonymous check.

Explain how Tollbooth certification taxation works. Taxation is ad valorem and **per-Authority** — there is no single network-wide number, and the Oracle deliberately quotes none. The actual fee is the Authority's own accounting, set in its pricing model and reported at transaction time. This tool is a docent: it explains the model and points to the live source. For the exact figure, query the relevant Authority's ``check_price`` for ``certify_credits``.

get_tax_rate input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_tax_rate output schema
{
  "type": "object",
  "additionalProperties": true
}
economic_model — Economic Model
Advertised by the server during the last successful anonymous check.

Explain the DPYC Social Contract economic model — qualitatively. Describes how value flows through the network: ad valorem certification fees, the cascade up the Certification Chain to the First Curator, and where the live numbers actually live. The Oracle quotes **no** rates, counts, or revenue figures — those belong to the Authorities' pricing models and the live registry, not to a docent. Free, unauthenticated.

economic_model input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
economic_model output schema
{
  "type": "object",
  "additionalProperties": true
}
get_rulebook — Get Rulebook
Advertised by the server during the last successful anonymous check.

Fetch the DPYC Social Contract governance document. Returns the raw markdown of GOVERNANCE.md from the dpyc-community repo.

get_rulebook input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_rulebook output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
how_to_join — How To Join
Advertised by the server during the last successful anonymous check.

Tier-specific onboarding guide for joining the DPYC Social Contract. Covers all five tiers: Citizen, Advocate, Operator, Authority, and First Curator. Includes Nostr keygen instructions and practical next steps.

how_to_join input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
how_to_join output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
who_is_first_curator — Who Is First Curator
Advertised by the server during the last successful anonymous check.

Identify the First Curator (Prime Authority) of the Certification Chain. Returns the curator's npub, display name, and member record.

who_is_first_curator input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
who_is_first_curator output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "string"
        }
      ]
    }
  },
  "x-fastmcp-wrap-result": true
}
network_versions — Network Versions
Advertised by the server during the last successful anonymous check.

Get current recommended versions of all Tollbooth components. Returns component versions, minimum compatibility, active protocols, and a short advisory summary. Data is fetched live from network-status.json in the dpyc-community repo.

network_versions input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
network_versions output schema
{
  "type": "object",
  "additionalProperties": true
}
network_advisory — Network Advisory
Advertised by the server during the last successful anonymous check.

Get current network deployment advisory. Returns human-readable guidance on what changed recently, urgent upgrades, and actions operators should take. Fetched live from ADVISORY.md in the dpyc-community repo.

network_advisory input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
network_advisory output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
how_to_add_authority — How To Add Authority
Advertised by the server during the last successful anonymous check.

End-to-end guide for spinning up a new Tollbooth Authority. Returns the eight-step procedure covering identity, region selection, GitHub workspace, dpyc-community registry entry, Neon + BTCPay + Horizon deployment, BTCPay credential delivery via Secure Courier, the self-registration challenge-response with the parent Authority, and pre-funding the cert-fee balance. Fetched live from docs/how-to-add-authority.md in the dpyc-community repo.

how_to_add_authority input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
how_to_add_authority output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
service_status — Service Status
Advertised by the server during the last successful anonymous check.

Diagnostic: report this service's software versions and runtime info. Free, unauthenticated. Use to verify deployment versions across the DPYC ecosystem.

service_status input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
service_status output schema
{
  "type": "object",
  "additionalProperties": true
}
list_services — List Services
Advertised by the server during the last successful anonymous check.

Enumerate the live DPYC service network with self-described summaries. Reads the member roster from the dpyc-community registry, then (when ``probe=True``) performs a lightweight MCP handshake against each member's public service endpoint to fetch that service's *own* self-description and tool inventory. Nothing about the services is hardcoded here — descriptions are authored by each service, and prices come from each Operator/Authority pricing model (call the service's ``check_price``). Resilient by design: per-service timeout, partial results, brief caching, and a registry-only fallback when an endpoint is asleep or unreachable. A sleeping service never breaks the listing. Free, unauthenticated.

list_services input schema
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "default": "all",
      "description": "Role filter — \"all\", \"operator\", \"authority\", or \"advocate\"."
    },
    "probe": {
      "type": "boolean",
      "default": true,
      "description": "Handshake each endpoint for a live self-description. Set\nFalse for a fast registry-only listing (no network fan-out)."
    }
  },
  "additionalProperties": false
}
list_services output schema
{
  "type": "object",
  "additionalProperties": true
}
lightning_wallets — Lightning Wallets
Advertised by the server during the last successful anonymous check.

Lightning wallets a newcomer can install to pay a Tollbooth invoice. Each comes with its App Store, Google Play and web links, a one-line description, whether it holds the keys for you, and whether it can buy bitcoin in the app. The order is how often a live web search mentions each one this week, with the network's own pick first; without that search it is the community's curated order (``ranked_by`` says which). Free.

lightning_wallets input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
lightning_wallets output schema
{
  "type": "object",
  "additionalProperties": true
}
get_relays — Get Relays
Advertised by the server during the last successful anonymous check.

Return the DPYC Nostr relay set, best first. The single source of truth is ``dpyc-community/relays.json``. An Operator seeds its relay set from here at cold start (its only fixed dependency is this Oracle endpoint), then reads its own bootstrap config from Nostr using just its nsec — no direct GitHub access. That file is a curated *guess*: it says which relays are worth using, not which are up this minute. Relays that an operator reported and the Oracle then proved unreachable are moved to the back of the list; everything else keeps its declared order, and nothing is ever dropped. This call never probes anything — it is on every operator's cold-start path, so it stays a lookup. Ranking improves only when someone hits a dead relay and says so via ``report_relay_failure``. Report failures only; successes need no announcement. Free.

get_relays input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_relays output schema
{
  "type": "object",
  "additionalProperties": true
}
report_relay_failure — Report Relay Failure
Advertised by the server during the last successful anonymous check.

Report that a relay in the DPYC set was unreachable, and re-rank it. A report does not set a relay's rank. It asks the Oracle to measure that relay *now*, and the Oracle's own probe decides. A false or mistaken report therefore costs one probe and changes nothing — no caller can demote a healthy relay by asserting that it is down. Report only failures. Successes are far too frequent to be worth carrying, and a relay that works needs no announcement.

report_relay_failure input schema
{
  "type": "object",
  "required": [
    "relay",
    "reporter_npub",
    "signed_event"
  ],
  "properties": {
    "mode": {
      "type": "string",
      "default": "unknown",
      "description": "What was being attempted — ``\"send\"``, ``\"read\"``, or\n``\"unknown\"``. Recorded for the human reading the logs."
    },
    "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."
    },
    "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."
    },
    "reporter_npub": {
      "type": "string",
      "description": "The reporting operator's npub."
    }
  },
  "additionalProperties": false
}
report_relay_failure output schema
{
  "type": "object",
  "additionalProperties": true
}
resolve_authority_for — Resolve Authority For
Advertised by the server during the last successful anonymous check.

Resolve the certifying Authority for an operator npub. Returns the Authority's ``{npub, url, name}`` (from the operator's ``upstream_authority_npub``). Use this after bootstrap to learn — and verify — which Authority signed your config, without reading GitHub.

resolve_authority_for input schema
{
  "type": "object",
  "required": [
    "npub"
  ],
  "properties": {
    "npub": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
resolve_authority_for output schema
{
  "type": "object",
  "additionalProperties": true
}
resolve_service — Resolve Service
Advertised by the server during the last successful anonymous check.

Resolve a DPYC service by ``name`` or ``npub``. Returns ``{npub, url, name, role, purchase_mode}`` where ``purchase_mode`` is the registry-topology fact ``"certified"`` or ``"direct"`` (not a price). Supply exactly one of ``name`` or ``npub``.

resolve_service input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "default": ""
    },
    "npub": {
      "type": "string",
      "default": ""
    }
  },
  "additionalProperties": false
}
resolve_service output schema
{
  "type": "object",
  "additionalProperties": true
}
request_citizenship — Request Citizenship
Advertised by the server during the last successful anonymous check.

Begin the citizen registration process (Operator-owned flow). This is the **citizen** registration path. Called by the Operator on behalf of a patron — invokes the Oracle directly. No Authority npub is required or consulted. The patron's npub is registered as a Citizen in the DPYC community. The npub provided here becomes the user's **patron identity** — the keypair they will use for credit purchases and service access across all Tollbooth-monetized services. Not to be confused with **operator** registration, which goes through the Authority via a Nostr DM delegation request. Issues a cryptographic challenge that the applicant must sign with their Nostr private key (nsec) to prove they own the claimed npub. The nsec never leaves the applicant's device. Returns a challenge_id, nonce, and signing instructions. The applicant signs a Nostr event containing the nonce and submits it via confirm_citizenship within 10 minutes.

request_citizenship input schema
{
  "type": "object",
  "required": [
    "npub",
    "display_name"
  ],
  "properties": {
    "npub": {
      "type": "string"
    },
    "display_name": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
request_citizenship output schema
{
  "type": "object",
  "additionalProperties": true
}
confirm_citizenship — Confirm Citizenship
Advertised by the server during the last successful anonymous check.

Complete the citizen registration by submitting a signed Nostr event. This is part of the **citizen** registration flow (Operator-owned). The Operator calls this on behalf of a patron after the patron has signed the cryptographic challenge from request_citizenship. Verifies: 1. The challenge exists and hasn't expired 2. The Schnorr signature is valid 3. The event's pubkey matches the claimed npub 4. The event content contains the issued nonce 5. The npub is not already registered On success, commits directly to dpyc-community/members/citizens/{npub}.json to register the new Citizen immediately.

confirm_citizenship input schema
{
  "type": "object",
  "required": [
    "npub",
    "challenge_id",
    "signed_event_json"
  ],
  "properties": {
    "npub": {
      "type": "string"
    },
    "challenge_id": {
      "type": "string"
    },
    "signed_event_json": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
confirm_citizenship output schema
{
  "type": "object",
  "additionalProperties": true
}
register_authority — Register Authority
Advertised by the server during the last successful anonymous check.

Register a new Authority in the DPYC community registry. The request must be signed with ``upstream_authority_npub``'s key, or with the key of a legitimate Authority whose own parent is that sponsor: that Authority runs the onboarding flow below, which registers only after the parent has approved. Commits a new ``members/authorities/{npub}.json`` file to dpyc-community on GitHub. The full Authority onboarding protocol is a 3-step Nostr DM challenge-response flow: 1. ``register_authority_npub(npub)`` — Authority sends DM challenge 2. ``confirm_authority_claim(npub)`` — verifies candidate DM, escalates to Prime 3. ``check_authority_approval(npub)`` — Prime approves, this tool is called

register_authority input schema
{
  "type": "object",
  "required": [
    "authority_npub",
    "display_name",
    "service_url",
    "upstream_authority_npub"
  ],
  "properties": {
    "service_url": {
      "type": "string",
      "description": "Public MCP endpoint URL of the Authority service."
    },
    "display_name": {
      "type": "string",
      "description": "Human-readable name for the Authority."
    },
    "authority_npub": {
      "type": "string",
      "description": "Nostr npub of the new Authority curator."
    },
    "upstream_authority_npub": {
      "type": "string",
      "description": "npub of the sponsoring Authority (must\nalready exist as a prime_authority or authority in the registry)."
    }
  },
  "additionalProperties": false
}
register_authority output schema
{
  "type": "object",
  "additionalProperties": true
}
register_operator — Register Operator
Advertised by the server during the last successful anonymous check.

Register a new Operator in the DPYC community registry. Called by an Authority service when its owner approves an operator's adoption request; the request must be signed with the Authority's key.

register_operator input schema
{
  "type": "object",
  "required": [
    "operator_npub",
    "display_name",
    "service_url",
    "authority_npub"
  ],
  "properties": {
    "service_url": {
      "type": "string",
      "description": "Public MCP endpoint URL of the Operator service."
    },
    "display_name": {
      "type": "string",
      "description": "Human-readable name for the Operator service."
    },
    "operator_npub": {
      "type": "string",
      "description": "Nostr npub of the new Operator."
    },
    "authority_npub": {
      "type": "string",
      "description": "npub of the sponsoring Authority (must already\nexist as an authority or prime_authority in the registry)."
    }
  },
  "additionalProperties": false
}
register_operator output schema
{
  "type": "object",
  "additionalProperties": true
}
update_operator — Update Operator
Advertised by the server during the last successful anonymous check.

Update an existing Operator's registry entry. Used when an Operator moves to a new MCP endpoint, changes its display name, or needs to correct a registration. Called by an Authority when its owner approves the operator's update request; the request must be signed with that Authority's key.

update_operator input schema
{
  "type": "object",
  "required": [
    "operator_npub",
    "authority_npub"
  ],
  "properties": {
    "service_url": {
      "type": "string",
      "default": "",
      "description": "New MCP endpoint URL (leave empty to keep current)."
    },
    "display_name": {
      "type": "string",
      "default": "",
      "description": "New display name (leave empty to keep current)."
    },
    "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)."
    }
  },
  "additionalProperties": false
}
update_operator output schema
{
  "type": "object",
  "additionalProperties": true
}
deregister_operator — Deregister Operator
Advertised by the server during the last successful anonymous check.

Remove an Operator from the DPYC community registry. Called by an Authority when the operator leaves it or the Authority disowns the operator; the request must be signed with the Authority's key. An Operator cannot exist without a sponsoring Authority, so deregistration removes the member file entirely, returning the Operator to initial state.

deregister_operator input schema
{
  "type": "object",
  "required": [
    "operator_npub",
    "authority_npub"
  ],
  "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)."
    }
  },
  "additionalProperties": false
}
deregister_operator output schema
{
  "type": "object",
  "additionalProperties": true
}
register_advocate — Register Advocate
Advertised by the server during the last successful anonymous check.

Register a new Advocate in the DPYC community registry. Advocates are community utility services that provide shared infrastructure (e.g., OAuth2 callback collectors) but aren't monetized Operators or certification Authorities. The request must be signed with ``npub``'s own key (NIP-98): a service registers itself, and no one can register an npub they do not hold.

register_advocate input schema
{
  "type": "object",
  "required": [
    "npub",
    "display_name",
    "service_name",
    "service_url",
    "service_description"
  ],
  "properties": {
    "npub": {
      "type": "string",
      "description": "Nostr npub of the Advocate service."
    },
    "service_url": {
      "type": "string",
      "description": "Public URL of the 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_description": {
      "type": "string",
      "description": "Short description of what the service does."
    }
  },
  "additionalProperties": false
}
register_advocate output schema
{
  "type": "object",
  "additionalProperties": true
}
check_ban_status — Check Ban Status
Advertised by the server during the last successful anonymous check.

Check whether an npub is banned from the DPYC Social Contract. Looks up the member in the community registry and checks whether their status is "banned". Unknown npubs are not considered banned (they simply aren't members). Free, unauthenticated. Used by operators during the cold path (credit purchases) to enforce community bans.

check_ban_status input schema
{
  "type": "object",
  "required": [
    "npub"
  ],
  "properties": {
    "npub": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
check_ban_status output schema
{
  "type": "object",
  "additionalProperties": true
}
renounce_membership — Renounce Membership
Advertised by the server during the last successful anonymous check.

Citizen self-removal from the DPYC Social Contract via automated PR. Not yet implemented — will create a GitHub PR to remove the member from the registry.

renounce_membership input schema
{
  "type": "object",
  "required": [
    "npub"
  ],
  "properties": {
    "npub": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
renounce_membership output schema
{
  "type": "object",
  "additionalProperties": true
}
initiate_ban_election — Initiate Ban Election
Advertised by the server during the last successful anonymous check.

Initiate a community ban election against a member. Not yet implemented — will create a GitHub Issue with a 72-hour discussion period and Lightning-funded economic voting.

initiate_ban_election input schema
{
  "type": "object",
  "required": [
    "target_npub",
    "reason"
  ],
  "properties": {
    "reason": {
      "type": "string"
    },
    "target_npub": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
initiate_ban_election output schema
{
  "type": "object",
  "additionalProperties": true
}
cast_ban_vote — Cast Ban Vote
Advertised by the server during the last successful anonymous check.

Cast a Lightning-funded vote in an active ban election. Not yet implemented — will verify npub membership, validate the election is active, and record the vote with a Lightning payment proof.

cast_ban_vote input schema
{
  "type": "object",
  "required": [
    "election_id",
    "vote",
    "npub"
  ],
  "properties": {
    "npub": {
      "type": "string"
    },
    "vote": {
      "type": "string"
    },
    "election_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
cast_ban_vote output schema
{
  "type": "object",
  "additionalProperties": true
}
publish_campaign — Publish Campaign
Advertised by the server during the last successful anonymous check.

Publish a pricing campaign to the DPYC community. Commits both a machine-importable JSON file and a human-readable Markdown summary to the dpyc-community campaigns directory. The request must be signed with ``author_npub``'s key (NIP-98), so a campaign is published only under its author's own name.

publish_campaign input schema
{
  "type": "object",
  "required": [
    "author_npub",
    "operator_npub",
    "campaign_json"
  ],
  "properties": {
    "author_npub": {
      "type": "string",
      "description": "The npub of the person who designed the campaign."
    },
    "campaign_json": {
      "type": "string",
      "description": "The full campaign export as a JSON string."
    },
    "campaign_name": {
      "type": "string",
      "default": "",
      "description": "Optional display name. Derived from JSON if omitted."
    },
    "operator_npub": {
      "type": "string",
      "description": "The npub of the operator the campaign is for."
    },
    "campaign_markdown": {
      "type": "string",
      "default": "",
      "description": "Optional pre-rendered Markdown. If omitted, the\nOracle generates a basic summary from the JSON."
    }
  },
  "additionalProperties": false
}
publish_campaign output schema
{
  "type": "object",
  "additionalProperties": true
}
list_campaigns — List Campaigns
Advertised by the server during the last successful anonymous check.

List published pricing campaigns from the DPYC community. Optionally filter by operator or author npub.

list_campaigns input schema
{
  "type": "object",
  "properties": {
    "author_npub": {
      "type": "string",
      "default": "",
      "description": "Filter to campaigns by this author (optional)."
    },
    "operator_npub": {
      "type": "string",
      "default": "",
      "description": "Filter to campaigns for this operator (optional)."
    }
  },
  "additionalProperties": false
}
list_campaigns output schema
{
  "type": "object",
  "additionalProperties": true
}
get_campaign — Get Campaign
Advertised by the server during the last successful anonymous check.

Retrieve a published pricing campaign.

get_campaign input schema
{
  "type": "object",
  "required": [
    "author_npub",
    "operator_npub",
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "The campaign slug (directory name)."
    },
    "format": {
      "type": "string",
      "default": "json",
      "description": "\"json\" for importable data, \"markdown\" for readable summary."
    },
    "author_npub": {
      "type": "string",
      "description": "The campaign author's npub."
    },
    "operator_npub": {
      "type": "string",
      "description": "The target operator's npub."
    }
  },
  "additionalProperties": false
}
get_campaign output schema
{
  "type": "object",
  "additionalProperties": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2832 ms
95th percentile latency
2832 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2832 ms · metadata changed · 31 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http dpyc-oracle-mcp https://dpyc-oracle.fastmcp.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add dpyc-oracle-mcp --url https://dpyc-oracle.fastmcp.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable dpyc-oracle-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "dpyc-oracle-mcp": {
      "url": "https://dpyc-oracle.fastmcp.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "dpyc-oracle-mcp": {
      "type": "streamableHttp",
      "url": "https://dpyc-oracle.fastmcp.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start dpyc-oracle-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "dpyc-oracle-mcp": {
      "type": "http",
      "url": "https://dpyc-oracle.fastmcp.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http dpyc-oracle-mcp https://dpyc-oracle.fastmcp.app/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://dpyc-oracle.fastmcp.app/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "dpyc-oracle-mcp": {
      "serverUrl": "https://dpyc-oracle.fastmcp.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like dpyc-oracle MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.