{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_gkzygt9pmgvx","handle":"good-earth","url":"https://wellknown.network/agents/good-earth","links":{"self":"https://wellknown.network/agents/good-earth/record.json","html":"https://wellknown.network/agents/good-earth","markdown":"https://wellknown.network/agents/good-earth/record.md","api":"https://wellknown.network/api/v1/agents/good-earth","status":"https://wellknown.network/api/v1/agents/good-earth/status","claim":"https://wellknown.network/agents/good-earth/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/good-earth/claim.json","badge":"https://wellknown.network/agents/good-earth/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/good-earth/history","tools":"https://wellknown.network/api/v1/agents/good-earth/tools"},"ard":{"identifier":"urn:air:goodearth-mcp.fastmcp.app:server:good-earth","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Good Earth","summary":"Climate timing for gardens and small farms: frost, heat, soil and planting dates for your plot.","description":"Climate timing for gardens and small farms: frost, heat, soil and planting dates for your plot.","publisher":{"name":"lonniev","url":null},"homepage":"https://goodearth.tollbooth-dpyc.com","repository":"https://github.com/lonniev/goodearth-mcp","version":"0.3.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://goodearth-mcp.fastmcp.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-19T11:03:18.491669Z","publishedAt":"2026-09-19T11:03:18.491669Z","registryName":"io.github.lonniev/goodearth-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"data.database","name":"Databases","confidence":1,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":1,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.992,"provenance":"derived"},{"slug":"productivity.tasks","name":"Tasks & To-do","confidence":0.962,"provenance":"derived"},{"slug":"finance.accounting","name":"Accounting","confidence":0.948,"provenance":"derived"},{"slug":"data.weather","name":"Weather","confidence":0.926,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":0.525,"provenance":"derived"}],"categories":["commerce","data","finance","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-10-09T20:31:42.855Z","lastProbedAt":"2026-10-09T20:31:42.855Z","statusComputedAt":"2026-10-09T20:32:14.349Z","reliability30d":{"probes":85,"successRate":1,"p50Ms":424,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":85,"ok":85,"authBoundaryOk":0,"serviceOk":85,"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-09T20:31:42.855Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":430,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T14:30:13.529Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":331,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T07:25:42.563Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":486,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T00:26:31.193Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":512,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T18:28:24.400Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":346,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.0.11","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T12:25:58.504Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":374,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.0.11","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:22:47.028Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":513,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.0.11","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T23:25:29.964Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":587,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"toolCount":83,"toolsHash":"991b24bb079458ecfc552f991d0848fdea2d22c93927f0667f1fa852025c1d2e","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.0.11","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T17:29:17.119Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":532,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"}],"toolCount":82,"toolsHash":"74a4a6144bebceb925ffec3cdaa8eab784181d0279e50a70b8bce9c5910b35bd","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.0.11","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T10:49:58.243Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":333,"error":null,"detail":{"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_mint_coupon","description":"Create a new operator-owned discount coupon."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"}],"toolCount":82,"toolsHash":"74a4a6144bebceb925ffec3cdaa8eab784181d0279e50a70b8bce9c5910b35bd","serverName":"goodearth-mcp","capabilities":["logging","prompts","resources","tools"],"serverVersion":"4.0.11","protocolVersion":"2025-06-18"}}],"tools":[{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_service_status","description":"Check the health and configuration of this service. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_oracle_how_to_join","description":"Get DPYC onboarding instructions from the Oracle. Free."},{"name":"goodearth_oracle_get_tax_rate","description":"Get the current DPYC certification tax rate. Free."},{"name":"goodearth_oracle_lookup_member","description":"Look up a DPYC community member by npub. Free."},{"name":"goodearth_oracle_about","description":"Describe the DPYC ecosystem via the Oracle. Free."},{"name":"goodearth_oracle_network_advisory","description":"Get active network advisories from the Oracle. Free."},{"name":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_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":"goodearth_get_notarization_proof","description":"Generate a Merkle inclusion proof that a patron's balance was\nincluded in a Bitcoin-notarized snapshot."},{"name":"goodearth_list_notarizations","description":"List recent Bitcoin notarization records."},{"name":"goodearth_gdd_season_curve","description":"Growing degree day accumulation across a region, season to date.\n\nReturns accumulation with its spread across your ground, the band of the\nlast ten seasons to r"},{"name":"goodearth_frost_window","description":"When frost normally arrives on this ground, and whether it is coming this week.\n\nReturns first-frost dates from the last ten seasons, how far the region's\nown t"},{"name":"goodearth_crop_gdd_status","description":"Where every planting on a block stands, and whether it finishes before frost.\n\nReturns, per planting: heat accumulated since set-out against its target,\nthe pro"},{"name":"goodearth_soil_temp_projection","description":"When the soil on this ground crosses a planting threshold.\n\nReturns the near-term forecast at planting depth, the date it crosses\nwithin that horizon if it does"},{"name":"goodearth_pest_threshold","description":"Where a pest model's degree-day stages stand on this ground.\n\nReturns, per model: heat accumulated since its biofix, which stages have\nbeen crossed, and the pro"},{"name":"goodearth_calibration","description":"Turn a block's own field reports into a correction on the model.\n\nEvery other tool here answers from a 9 km grid refined by a physical\nterrain model. What that "},{"name":"goodearth_almanac","description":"The sky's own record for this ground — normal, actual, and what is coming.\n\nDegree days say what the season is doing to the plants. This says what the\nseason is"},{"name":"goodearth_plan_the_season","description":"The season-planning interview, as a workflow to follow.\n\nThe same text the `plan_the_season` MCP prompt carries. It exists twice\nbecause prompt support is uneve"},{"name":"goodearth_review_roster","description":"Audit a roster against what this ground's record actually knows.\n\nAsked \"are these the right pests to watch?\", an agent will answer from its\nown training data —"},{"name":"goodearth_task_save","description":"Create or update one task.\n\nSingle-day by design: one date and optional clock times on it. No\nrecurrence and no multi-day spans — a farm list is a list of days."},{"name":"goodearth_task_list","description":"One page of a region's tasks, ordered and filtered by the database.\n\nThe sorting, the timeframe filter and the search all happen in SQL, so a\nlong list costs on"},{"name":"goodearth_task_delete","description":"Remove one task.\n\nScoped to the caller's npub in the WHERE clause, so a known id is not on\nits own enough to delete somebody else's task."},{"name":"goodearth_task_set_done","description":"Mark one task done, or put it back."},{"name":"goodearth_pest_catalog","description":"Which pest stages are modelled for this ground this season.\n\nRead from the USA-NPN degree-day forecasts rather than from a list in\nthis service, so a model they"},{"name":"goodearth_nearby_species","description":"Search what is actually recorded near this ground, a page at a time.\n\nThis replaces asking for a whole catalogue. There are more than three\nthousand insect and "},{"name":"goodearth_wildlife_catalog","description":"Which animals are actually recorded around this ground.\n\nBirds, mammals, amphibians and reptiles observed near here, ranked by how\noften each has been seen — so"},{"name":"goodearth_wildlife_calendar","description":"When the other creatures working your season arrive.\n\nA farm is not only its crops. Robins arrive, woodchucks wake, squirrels\nstart caching. The same drivers th"},{"name":"goodearth_crop_suitability","description":"Which crops finish on this ground, and with how much room to spare.\n\n\"What can I grow?\" is not a lookup. Two farms in the same county, one on a\nbench and one in"},{"name":"goodearth_tree_suitability","description":"Whether a tree survives and gets its chill on this ground.\n\nA tree is not asked \"does it finish before frost\" — that is a question only\nsomething that must fini"},{"name":"goodearth_tree_year","description":"When spring reached this ground, and what the sap did.\n\n**First leaf and first bloom**, from USA-NPN's Spring Index, dated for this\nblock and set against its ow"},{"name":"goodearth_companions","description":"Companions for one planting on this block, of one of two kinds.\n\n**Synergy** reads the planting's family and genus from iNaturalist and\napplies published compan"},{"name":"goodearth_calendar_dataset","description":"Compute this block's dated season as a dataset, and store it for publishing.\n\nEvery dated thing this block knows about: crop targets, pest stages,\nwildlife and "},{"name":"goodearth_calendar_fetch","description":"Read a stored calendar dataset by its feed token.\n\nThis exists for the Good Earth site, which serves the subscribable URL: a\ncalendar client speaks HTTP and kno"},{"name":"goodearth_calendar_list","description":"The calendar feeds you have published, and how often each is polled."},{"name":"goodearth_calendar_revoke","description":"Stop publishing a feed. Subscribers stop receiving updates. Free."},{"name":"goodearth_planting_window","description":"When to start seed, when to put it out, and the last day it still finishes.\n\nHeat requirement answers whether a crop CAN finish here. It says nothing\nabout when"},{"name":"goodearth_forget_my_ground","description":"Delete every block you have here, and everything recorded on them.\n\nBlocks, crops, plantings, pest models, wildlife watches, field reports,\ntasks, published cal"},{"name":"goodearth_block_save","description":"Save a plot of land, so every other tool can work it by name.\n\nIts area and sample count are measured here from the bounds you give, and\nreturned — they are fac"},{"name":"goodearth_block_list","description":"The ground you have saved, with its bounds.\n\nThe blocks themselves and nothing else — what grows on them, what you watch\nfor, and what you have seen are their o"},{"name":"goodearth_block_item_save","description":"Record what you grow, watch for, saw, or hold seed for on a plot.\n\nA whole batch in one call, because an afternoon in the field produces\nseveral notes at once a"},{"name":"goodearth_block_item_list","description":"What you grow, watch for, or saw on a plot — a page at a time.\n\n`as_of` is how a past season answers: the record as it stood that day,\nrather than as it stands "},{"name":"goodearth_disease_risk","description":"Hours of leaf wetness on this ground, and what the disease models make of them.\n\nReturns the estimated wet hours since the season began, every qualifying\ninfect"},{"name":"goodearth_drying_window","description":"When the dew burns off this ground, the dry days ahead, and the next rain.\n\nAnswers \"is it dry enough yet?\" for a grower planning to cut flowers, pick,\nmow or m"},{"name":"goodearth_sunlight","description":"How many hours of direct sun each part of this ground gets, month by month — and what a panel would make.\n\nRasterises the block at 2–20 m and, from every cell, "}],"package":null,"toolSurface":{"id":"ts_q6sz7x2eq4ej","endpointId":"ep_kuen3bue5c7j","hash":"a87aa7609e265470ff78180704d0e1ed4a87e906ff305bd7cb4f2c42257f48a3","toolCount":83,"serverName":"goodearth-mcp","serverVersion":"4.0.11","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-08T06:22:47.032Z","lastSeenAt":"2026-10-09T20:31:42.883Z","observations":7,"toolNames":["goodearth_check_balance","goodearth_purchase_credits","goodearth_check_payment","goodearth_restore_credits","goodearth_account_statement","goodearth_account_statement_infographic","goodearth_report_issue","goodearth_service_status","goodearth_get_operator_onboarding_status","goodearth_get_patron_onboarding_status","goodearth_session_status","goodearth_request_credential_channel","goodearth_receive_credentials","goodearth_forget_credentials","goodearth_update_patron_credential","goodearth_update_operator_credential","goodearth_delete_patron_credential","goodearth_delete_operator_credential","goodearth_get_patron_credential_fields","goodearth_request_npub_proof","goodearth_receive_npub_proof","goodearth_check_proof_status","goodearth_oracle_how_to_join","goodearth_oracle_get_tax_rate","goodearth_oracle_lookup_member","goodearth_oracle_about","goodearth_oracle_network_advisory","goodearth_check_authority_balance","goodearth_get_pricing_model","goodearth_set_pricing_model","goodearth_reset_pricing_model","goodearth_request_adoption","goodearth_adoption_status","goodearth_restore_neon_schema","goodearth_list_canonical_identities","goodearth_get_nostr_profile","goodearth_publish_nostr_profile","goodearth_check_price","goodearth_list_constraint_types","goodearth_mint_coupon","goodearth_list_coupons","goodearth_update_coupon","goodearth_delete_coupon","goodearth_redeem_coupon","goodearth_list_my_coupons","goodearth_forget_coupon","goodearth_notarize_ledger","goodearth_get_notarization_proof","goodearth_list_notarizations","goodearth_gdd_season_curve","goodearth_frost_window","goodearth_crop_gdd_status","goodearth_soil_temp_projection","goodearth_pest_threshold","goodearth_calibration","goodearth_almanac","goodearth_plan_the_season","goodearth_review_roster","goodearth_task_save","goodearth_task_list","goodearth_task_delete","goodearth_task_set_done","goodearth_pest_catalog","goodearth_nearby_species","goodearth_wildlife_catalog","goodearth_wildlife_calendar","goodearth_crop_suitability","goodearth_tree_suitability","goodearth_tree_year","goodearth_companions","goodearth_calendar_dataset","goodearth_calendar_fetch","goodearth_calendar_list","goodearth_calendar_revoke","goodearth_planting_window","goodearth_forget_my_ground","goodearth_block_save","goodearth_block_list","goodearth_block_item_save","goodearth_block_item_list","goodearth_disease_risk","goodearth_drying_window","goodearth_sunlight"],"distinctSurfaces":7},"endpointFacts":[{"id":"ep_kuen3bue5c7j","url":"https://goodearth-mcp.fastmcp.app/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T14:30:13.552Z","auth":{"observedAt":"2026-10-09T14:30:14.053Z","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-09T14:30:14.064Z","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/goodearth-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.lonniev%2Fgoodearth-mcp","firstSeenAt":"2026-09-17T02:22:57.698Z","fetchedAt":"2026-10-07T16:20:37.578Z","normalizedAt":"2026-10-07T16:20:37.578Z"}]},"firstSeenAt":"2026-09-17T02:22:57.698Z","updatedAt":"2026-10-09T20:33:29.852Z"}