{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T16:22:41.248Z","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp","markdownUrl":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp.md","server":{"slug":"org-edufeed-nope-mcp","name":"nope-mcp — Open Educational Resources search","registryName":"org.edufeed/nope-mcp","description":"Search German open educational resources (OER) via AMB/schema.org metadata, open licenses only.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"mcp","type":"remote","identifier":"https://mcp.edufeed.org/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp","version":"0.4.0","transport":null,"scoredAt":"2026-11-05T01:19:27.991Z"},"score":{"total":88,"tier":"high trust","status":"scored","weekDelta":2,"history":[{"date":"2026-11-05","total":88},{"date":"2026-11-04","total":88},{"date":"2026-11-03","total":88},{"date":"2026-11-02","total":88},{"date":"2026-11-01","total":87},{"date":"2026-10-31","total":87},{"date":"2026-10-30","total":86},{"date":"2026-10-29","total":86},{"date":"2026-10-28","total":86},{"date":"2026-10-27","total":85},{"date":"2026-10-26","total":85},{"date":"2026-10-25","total":84},{"date":"2026-10-24","total":84},{"date":"2026-10-23","total":84},{"date":"2026-10-22","total":83},{"date":"2026-10-21","total":83},{"date":"2026-10-20","total":82},{"date":"2026-10-19","total":82},{"date":"2026-10-18","total":81},{"date":"2026-10-17","total":81},{"date":"2026-10-16","total":80},{"date":"2026-10-15","total":80},{"date":"2026-10-14","total":79},{"date":"2026-10-13","total":79},{"date":"2026-10-12","total":78},{"date":"2026-10-11","total":78},{"date":"2026-10-10","total":77},{"date":"2026-10-08","total":77},{"date":"2026-10-07","total":76},{"date":"2026-10-05","total":75}]},"categories":[{"name":"Endpoint Security","score":80,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC check failed: this domain isn't protected by DNSSEC."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.none_no_destructive","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":76,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (excellent).","Context-footprint check failed: tool/resource definitions use about 7417 tokens (~322/item across 23 items; 18 tools + 5 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"excellent"}},{"code":"schema.footprint_heavy","args":{"avg":"322","items":"23","tools":"18","tokens":"7417","resources":"5"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":100,"verdict":"pass","reasons":["No destabilizing schema changes in the last 30 days."],"codes":[{"code":"stability.stable","args":{}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","100% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 18 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"18"}},{"code":"toolsafety.manipulation_clean","args":{"units":"20","judged":"20"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"mcp","type":"remote","identifier":"https://mcp.edufeed.org/mcp","withdrawn":false,"score":88,"current":true,"url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp","markdownUrl":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp.md"}],"facts":[{"label":"Endpoint","value":"https://mcp.edufeed.org/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"0.4.0"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"search_resources","title":"Search Educational Resources","description":"Search for educational resources (learning materials, courses, videos, etc.) using full-text search and metadata filters. Returns resources matching the query from the AMB relay. Every learning resource is returned by default, whatever its license; each result carries license ({id, label}, or null when unlicensed) and accessLevel (\"full\" for Creative Commons, Public Domain and free software/documentation licenses, and DINI-AG-KIM license types that resolve to one of these; \"metadata-only\" otherwise). licenseFilter narrows the results: \"open\" = CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL, GFDL, MIT, Apache 2.0, BSD); \"cc-any\" = all of \"open\" plus every other Creative Commons license, incl. KIM non-commercial/no-derivatives; \"any\" = also unlicensed and all-rights-reserved resources. When citing a resource, always name its creator and publisher. NOTE: the metadata filters (publisherName, creatorName, subjectLabel, resourceTypeLabel, educationalLevelLabel) are EXACT full-string matches against the stored metadata (case-insensitive) — not fuzzy or substring searches. A guessed spelling silently returns 0 results; use resolve_publisher to find the canonical actor spelling first. On a zero-match actor filter the response includes actorCandidates with similar spellings to retry with.","inputs":[{"name":"authors","type":"array","required":false,"description":"Filter by author pubkeys (hex format)"},{"name":"creatorName","type":"string","required":false,"description":"Filter by creator/author name — EXACT full-string match (case-insensitive) against the AMB metadata. Unsure of the spelling? Call resolve_publisher first."},{"name":"educationalLevelLabel","type":"string","required":false,"description":"Filter by educational level — EXACT label match (e.g., \"Sekundarstufe I\", \"Hochschule\"); browse_educational_levels lists valid labels"},{"name":"language","type":"string","required":false,"description":"Language for label filters (default: \"de\")"},{"name":"licenseFilter","type":"string","required":false,"description":"Restrict results by license: \"open\" (CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL, GFDL, MIT, Apache 2.0,…"},{"name":"limit","type":"number","required":false,"description":"Maximum number of results (1-250, default: 20)"},{"name":"publisherName","type":"string","required":false,"description":"Filter by publisher name — EXACT full-string match (case-insensitive) against the AMB metadata, e.g. \"e-teaching.org\" or \"LEHRE LADEN\" (not \"Lehreladen\"). Unsure of the spelling? Call resolve_publish…"},{"name":"query","type":"string","required":false,"description":"Free-text search query (e.g., \"mathematik\", \"machine learning\")"},{"name":"relays","type":"array","required":false,"description":"Restrict the search to specific relays. Only relays returned by list_relays (default or extra) are accepted, by full URL or short name (e.g. \"oersi\", \"sodix\"). Default: the default relay set."},{"name":"resourceTypeLabel","type":"string","required":false,"description":"Filter by resource type label — EXACT label match (e.g., \"Video\", \"Kurs\", \"Arbeitsblatt\"); browse_resource_types lists valid labels"},{"name":"since","type":"number","required":false,"description":"Return resources created at or after this Unix timestamp"},{"name":"subjectLabel","type":"string","required":false,"description":"Filter by subject/topic label — EXACT label match (e.g., \"Mathematik\", \"Physik\"); browse_subjects lists valid labels"},{"name":"until","type":"number","required":false,"description":"Return resources created at or before this Unix timestamp"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":822},{"name":"search_content","title":"Search Educational Content (resources, articles, wikis, projects, measures, publications)","description":"Topic search across ALL content types on the relay in one ranked call: educational resources (kind 30142), long-form articles/blogs (30023), wikis (30818), projects (30143), measures (30144), and NKBIP-01 publications (30040 indices + 30041 sections — scientific articles, books). Results are interleaved and ranked by semantic passage match, and each carries the matched passage (\"snippet\") when available — use it to answer the user, not just list links. Every learning resource is returned by default, whatever its license; each resource result carries license ({id, label}, or null when unlicensed) and accessLevel (\"full\" for Creative Commons, Public Domain and free software/documentation licenses, and DINI-AG-KIM license types that resolve to one of these; \"metadata-only\" otherwise). Snippets and passages exist only for accessLevel:\"full\" resources — present a \"metadata-only\" resource by its title, description, license and link, never quoted beyond its metadata, and always name the license and the creator/publisher. licenseFilter narrows the results: \"open\" = CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL, GFDL, MIT, Apache 2.0, BSD); \"cc-any\" = all of \"open\" plus every other Creative Commons license, incl. KIM non-commercial/no-derivatives; \"any\" = also unlicensed and all-rights-reserved resources. The other content types carry no license and are always included. This is the tool for DISCOVERY intent — the user wants materials to browse (\"finde/suche/empfiehl Materialien zu X\"): present the items. For QUESTION intent — the user wants an answer built from the content (\"wie/warum/was hilft bei X?\") — prefer search_passages, which returns quotable fulltext passages with citations; this tool then supplements the answer with browsable links. Each result carries eventAuthor (the Nostr signer who uploaded the event — often an aggregator) plus, for resources, creator/publisher (who a…","inputs":[{"name":"authors","type":"array","required":false,"description":"Filter by author pubkeys (hex)."},{"name":"community","type":"string","required":false,"description":"Return content shared into this community (Communikey). Accepts a hex pubkey or npub. Resolve a community name to its pubkey with resolve_author. Combine with query to scope a topic to a community (e…"},{"name":"language","type":"string","required":false,"description":"Label language (default \"de\")."},{"name":"licenseFilter","type":"string","required":false,"description":"Restrict educational-resource results by license: \"open\" (CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL, G…"},{"name":"limit","type":"number","required":false,"description":"Max results (1-250, default 20)."},{"name":"query","type":"string","required":false,"description":"Free-text topic (e.g., \"Unaufmerksamkeit im Seminar\"). Keep it to the TOPIC only — do not append actor/organization names (\"… Lehreladen\"): they dilute the semantic ranking and the actor's content dr…"},{"name":"relays","type":"array","required":false,"description":"Restrict the search to specific relays. Only relays returned by list_relays (default or extra) are accepted, by full URL or short name (e.g. \"oersi\", \"sodix\"). Default: the default relay set."},{"name":"since","type":"number","required":false,"description":"Created at or after this Unix timestamp."},{"name":"types","type":"array","required":false,"description":"Restrict to a subset of content types. Default: all of them."},{"name":"until","type":"number","required":false,"description":"Created at or before this Unix timestamp."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":1067},{"name":"get_resource","title":"Get Educational Resource","description":"Retrieve a single piece of content by naddr (preferred — pass a search_content result's naddr), d-tag identifier, or event ID. naddrs of ANY content type from search_content work (resources, articles, wikis, projects, measures, publications); non-resource kinds return the same shape as their search results. Bare identifier/eventId lookups (no naddr) always resolve the full educational-resource metadata (kind 30142), including creator/publisher and educational properties. get_resource is never license-filtered: a learning resource carries license ({id, label}, or null when unlicensed) and accessLevel (\"full\" for Creative Commons, Public Domain and free software/documentation licenses, and DINI-AG-KIM license types that resolve to one of these; \"metadata-only\" otherwise). Only accessLevel:\"full\" resources have indexed fulltext, snippets and passages — present a \"metadata-only\" resource by its title, description, license and link, never quoted beyond its metadata, and always name the license and the creator/publisher. openLicense is kept for compatibility (deprecated; use accessLevel). When presenting the resource, render a markdown link the user can open: prefer its sourcePage (the original source page); fall back to url (the edufeed viewer) only when sourcePage is absent.","inputs":[{"name":"author","type":"string","required":false,"description":"Author pubkey (hex) to disambiguate if multiple resources share the same identifier"},{"name":"eventId","type":"string","required":false,"description":"Nostr event ID (hex) for direct lookup. Alternative to identifier."},{"name":"identifier","type":"string","required":false,"description":"Resource identifier (d-tag). Use this for stable lookups."},{"name":"language","type":"string","required":false,"description":"Preferred language for labels (default: \"de\")"},{"name":"naddr","type":"string","required":false,"description":"NIP-19 naddr from a search result — the preferred handoff to fetch full metadata."},{"name":"relays","type":"array","required":false,"description":"Restrict the lookup to specific relays — pass the relays a search found the result on. Only relays returned by list_relays (default or extra) are accepted, by full URL or short name (e.g. \"oersi\"). D…"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":448},{"name":"browse_subjects","title":"Browse Subjects","description":"List available subjects/topics in the educational resource collection. Returns subjects with their labels and resource counts.","inputs":[{"name":"language","type":"string","required":false,"description":"Language for labels (default: \"de\")"},{"name":"limit","type":"number","required":false,"description":"Maximum number of subjects to return"},{"name":"prefix","type":"string","required":false,"description":"Filter subjects whose label starts with this prefix"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":71},{"name":"browse_resource_types","title":"Browse Resource Types","description":"List available learning resource types (Video, Course, Worksheet, etc.) with resource counts.","inputs":[{"name":"language","type":"string","required":false,"description":"Language for labels (default: \"de\")"},{"name":"limit","type":"number","required":false,"description":"Maximum number of resource types to return"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":56},{"name":"browse_educational_levels","title":"Browse Educational Levels","description":"List available educational levels (Primary, Secondary, Higher Education, etc.) with resource counts.","inputs":[{"name":"language","type":"string","required":false,"description":"Language for labels (default: \"de\")"},{"name":"limit","type":"number","required":false,"description":"Maximum number of levels to return"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":57},{"name":"relay_stats","title":"Relay Statistics","description":"Get information about all selectable AMB relays (default and extra), including supported NIPs, relay name, and description.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"list_relays","title":"List Relays","description":"List the configured AMB relays. defaultRelays are searched on every query; extraRelays hold different corpora (e.g. the OERSI aggregation) and are only searched when a search/get tool call passes them in its relays parameter.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"relay_list_get","title":"Get Relay List","description":"Get a user's NIP-65 relay list (kind 10002). Returns read and write relays for the specified pubkey. If no pubkey provided, uses the connected signer's pubkey.","inputs":[{"name":"pubkey","type":"string","required":false,"description":"Public key to fetch relay list for (defaults to connected signer)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":70},{"name":"skos_get_vocabulary","title":"Get SKOS Vocabulary","description":"Fetch and parse a SKOS vocabulary from its URI. Returns the concept scheme with all concepts organized hierarchically.","inputs":[{"name":"flat","type":"boolean","required":false,"description":"If true, return a flat list of concepts instead of hierarchy. Default: false."},{"name":"language","type":"string","required":false,"description":"Preferred language for labels (e.g., \"de\", \"en\"). If not specified, all languages are returned."},{"name":"uri","type":"string","required":true,"description":"URI of the SKOS vocabulary (e.g., \"https://w3id.org/kim/hcrt/scheme\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":116},{"name":"skos_get_concept","title":"Get SKOS Concept","description":"Get details of a single SKOS concept by its URI, including broader, narrower, and related concepts.","inputs":[{"name":"language","type":"string","required":false,"description":"Preferred language for labels (e.g., \"de\", \"en\")"},{"name":"uri","type":"string","required":true,"description":"URI of the concept (e.g., \"https://w3id.org/kim/hcrt/video\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":79},{"name":"skos_search","title":"Search SKOS Concepts","description":"Search for concepts in a SKOS vocabulary. By default searches prefLabel, altLabel, hiddenLabel, and definition.","inputs":[{"name":"fields","type":"array","required":false,"description":"Fields to search in. Default: [\"prefLabel\", \"altLabel\", \"hiddenLabel\", \"definition\"]"},{"name":"language","type":"string","required":false,"description":"Limit search to this language (e.g., \"de\"). If not specified, searches all languages."},{"name":"limit","type":"integer","required":false,"description":"Maximum number of results (default: 20, max: 100)"},{"name":"query","type":"string","required":true,"description":"Search query"},{"name":"vocabularyUri","type":"string","required":true,"description":"URI of the vocabulary to search (e.g., \"https://w3id.org/kim/hochschulfaechersystematik/scheme\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":155},{"name":"list_known_authors","title":"List Known Authors","description":"List known educational resource authors loaded from configured follow sets (NIP-51 kind 30000). Returns author names, pubkeys, and NIP-05 identifiers. Use the returned pubkeys with search_resources(authors: [...]) to filter resources by author.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"resolve_author","title":"Resolve Author Name to Pubkey","description":"Resolve an org or person NAME to candidate pubkeys using the relay's kind-0 author-profile index (NIP-50 search). Use this to answer name-driven content questions like \"recent articles and resources of Jörg Lohrer\": call resolve_author(name), pick the best candidate, then pass its pubkey to search_content({ authors: [pubkey], ... }) (and/or search_calendar_events) to fetch that author's content. Returns several candidates ranked by relevance so you can disambiguate. This indexes authors who have published content here — distinct from list_known_authors, which lists hand-curated follow sets. NOTE: this resolves only kind-0 author profiles. It does NOT resolve a community's identifying pubkey — a community is defined by a kind-10222 event and frequently has no kind-0 at all. To list content shared into a community you need that community pubkey (a Nostr identifier, e.g. from the community's spec/naddr), which you pass to the `community` param of search_content / search_calendar_events. resolve_author CAN, however, find a community's posting account (e.g. a \"…-Termine-Bot\") when that account has a kind-0; querying that pubkey via authors:[...] returns the content it published. A wrong pick simply yields empty results.","inputs":[{"name":"limit","type":"number","required":false,"description":"Max candidates (1-25, default 10)."},{"name":"name","type":"string","required":true,"description":"Org or person name to resolve (e.g. \"Jörg Lohrer\")."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":317},{"name":"resolve_publisher","title":"Resolve Publisher/Creator Name to Canonical Metadata Spelling","description":"Resolve an actor name (organization or person) to the EXACT spelling used in the AMB metadata, so it can be passed to the publisherName/creatorName filters of search_resources. Those filters are exact full-string matches (case-insensitive), so a guessed spelling like \"Lehreladen\" silently misses the stored \"LEHRE LADEN\". This tool free-text searches the name and returns the similar publisher/creator names found in the corpus, with the field they appear in and a resource count. Distinct from resolve_author, which resolves Nostr signing accounts (kind-0 profiles) to pubkeys — metadata publishers usually have no Nostr account at all.","inputs":[{"name":"name","type":"string","required":true,"description":"Actor name as the user said it (e.g. \"Lehreladen\")."},{"name":"relays","type":"array","required":false,"description":"Restrict the lookup to specific relays. Only relays returned by list_relays (default or extra) are accepted, by full URL or short name (e.g. \"oersi\", \"sodix\"). Default: the default relay set."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":225},{"name":"search_calendar_events","title":"Search Calendar Events","description":"Search for NIP-52 calendar events (date-based and time-based). Supports temporal filters (start/end time ranges), geohash location filtering, hashtag filtering, and the edufeed educational attributes (free, registrationRequired, attendanceMode, educationalLevel). Returns events from the configured calendar relay. TIME SEMANTICS (NIP-52): `start`/`end` are the raw tags — `end` is EXCLUSIVE and is omitted for one-day and instantaneous events, so never read a missing `end` as \"unknown\". Use `effectiveEnd` (Unix seconds when the event is over), `allDay` (31922: whole days, no clock time) and `lastDay` (all-day events: the inclusive last calendar day). Times of 31923 events are in `startTzid`/`endTzid`. ATTRIBUTES: `attributes` carries registration, price (free = amount 0), attendance mode (online/offline/mixed) and Bildungsstufe; a missing field means \"no statement\", never \"no\" or \"not free\". AUTHOR: every event has `author` {name, bot}; `bot: true` marks an automated account such as an event mirror or crawler — group or de-emphasise those unless the user asks for imports. Operators may hide bulk sources by default (see `hiddenSources` in the result); pass includeHiddenSources: true to see them. When presenting an event to the user, render it as a markdown link: prefer the event `url` (the edufeed-app viewer at <base>/<naddr>, which shows fuller details) over `sourcePage` (the original external event page). Never construct an naddr or viewer URL yourself — use the `naddr`/`url` fields as returned.","inputs":[{"name":"attendanceMode","type":"string","required":false,"description":"Only online, in-person (offline) or hybrid (mixed) events; untagged events match none."},{"name":"authors","type":"array","required":false,"description":"Filter by author pubkeys (hex format)"},{"name":"community","type":"string","required":false,"description":"Return calendar events shared into this community (Communikey). Accepts a hex pubkey or npub; resolve a community name with resolve_author. Combines with a time range (startAfter/startBefore/endAfter…"},{"name":"educationalLevel","type":"string","required":false,"description":"Only events for this KIM Bildungsstufe concept URI, e.g. https://w3id.org/kim/educationalLevel/level_C (Fortbildung), level_A (Hochschule), level_B (Vorbereitungsdienst), level_1 (Primarbereich)."},{"name":"endAfter","type":"number","required":false,"description":"Only events still running after this Unix timestamp (strict: NIP-52 `end` is exclusive, so an event ending exactly then is over). \"Ongoing or upcoming\" = endAfter: now; one-day and instantaneous even…"},{"name":"endBefore","type":"number","required":false,"description":"Only events over by this Unix timestamp (inclusive: an event ending exactly then counts)"},{"name":"free","type":"boolean","required":false,"description":"true: only events tagged free of charge (price 0). Events without a price statement are NOT returned, so leave it unset unless the user insists on free. false adds no filter."},{"name":"geohash","type":"string","required":false,"description":"Geohash prefix for location-based search"},{"name":"hashtags","type":"array","required":false,"description":"Filter by hashtags (e.g., [\"meetup\", \"nostr\"])"},{"name":"includeHiddenSources","type":"boolean","required":false,"description":"Also return events from operator-hidden bulk sources (event mirrors, imported catalogues). Default false; the result reports how many were hidden."},{"name":"kinds","type":"array","required":false,"description":"NIP-52 kinds to query (default: [31922, 31923]). 31922 = date-based event, 31923 = time-based event (both in `events`); 31924 = calendar, a titled list of event coordinates (in `calendars`); 31925 =…"},{"name":"limit","type":"number","required":false,"description":"Maximum number of results (1-250, default: 20)"},{"name":"participants","type":"array","required":false,"description":"Filter by participant pubkeys (`p` tags, hex): events naming them, or RSVPs to their events."},{"name":"query","type":"string","required":false,"description":"Free-text topic for the events. Combines with a time range (startAfter/startBefore/endAfter/endBefore) in a single server-side query — e.g. \"events about X in the next week\" is one call. With a geoha…"},{"name":"references","type":"array","required":false,"description":"Filter by referenced coordinates (`a` tags): with kinds [31925] the event an RSVP answers (`31923:<pubkey>:<d>`); with kinds [31924] calendars listing that event; with event kinds, events requesting…"},{"name":"registrationRequired","type":"boolean","required":false,"description":"Only events that do (true) or do not (false) require registration; untagged events match neither."},{"name":"since","type":"number","required":false,"description":"Return events created at or after this Unix timestamp"},{"name":"startAfter","type":"number","required":false,"description":"Only events starting at or after this Unix timestamp (inclusive)"},{"name":"startBefore","type":"number","required":false,"description":"Only events starting at or before this Unix timestamp (inclusive)"},{"name":"until","type":"number","required":false,"description":"Return events created at or before this Unix timestamp"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":1250},{"name":"list_calendar_authors","title":"List Calendar Authors","description":"List known calendar event authors loaded from configured follow sets (NIP-51 kind 30000). Returns author names, pubkeys, and NIP-05 identifiers. Use the returned pubkeys with search_calendar_events(authors: [...]) to filter events by author.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":64},{"name":"search_passages","title":"Grounded passage search (RAG) scoped by a spell","description":"THE DEFAULT TOOL FOR QUESTION-SHAPED QUERIES (\"wie/warum/was hilft bei X?\", \"how do I…?\"): retrieves the best-matching fulltext passages from the corpus and returns them with citations (source resource, page, heading, source URL) — answer the user FROM the passages and cite each source. (For discovery intent — \"finde/empfiehl Materialien\" — use search_content instead, or afterwards to offer browsable links.) Keep `question` topic-only. Ranking is hybrid keyword+vector, so phrase the question as a topical statement that names the subject and the target group (\"Friedenserziehung in der Grundschule: Einstieg in das Thema Frieden mit Kindern\"), not as the user's literal sentence (\"Wie kann ich …?\"). Results are capped at two passages per document; a passage with only a snippet and no text has no fulltext yet — say so instead of guessing. Passages come from learning resources under Creative Commons, Public Domain and free software/documentation licenses, and DINI-AG-KIM license types that resolve to one of these and from articles, wikis, publications and the other content kinds. Other matching learning resources appear in `metadataOnlyMatches` (naddr, title, license, creator/publisher, sourcePage) without text, because their license does not permit quoting — point the user to them by title, license and link, never quote or paraphrase them as content. Cite the license and the creator/publisher with every learning-resource passage. licenseFilter narrows learning resources: \"open\" = CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL, GFDL, MIT, Apache 2.0, BSD); \"cc-any\" = all of \"open\" plus every other Creative Commons license, incl. KIM non-commercial/no-derivatives (normally no metadataOnlyMatches); \"any\" = also unlicensed and all-rights-reserved resources, as metadataOnlyMatches. Scope is required but simple: with no source restriction from the user, pass the content kinds (e.g. kin…","inputs":[{"name":"authors","type":"array","required":false,"description":"Inline scope: Nostr event-author pubkeys (hex/npub/$me/$contacts) — resolve names via resolve_author. NOT for metadata publishers; those go into `search`."},{"name":"kinds","type":"array","required":false,"description":"Inline scope: content kinds (e.g. 30142)."},{"name":"licenseFilter","type":"string","required":false,"description":"Restrict learning-resource (30142) hits by license: \"open\" (CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL,…"},{"name":"limit","type":"number","required":false,"description":"Passages to return (1-25, default 10); also caps metadataOnlyMatches."},{"name":"me","type":"string","required":false,"description":"Who $me refers to (npub or hex). Defaults to the calling identity."},{"name":"question","type":"string","required":true,"description":"The question or topic to find grounding passages for."},{"name":"relays","type":"array","required":false,"description":"Relay selection (list_relays set), by full URL or short name (e.g. \"oersi\", \"sodix\"). First mapped relay is used."},{"name":"search","type":"string","required":false,"description":"Inline scope: NIP-50 term selecting the EVENTS in scope (distinct from question). Supports field filters; quote multi-word values: publisher.name:\"LEHRE LADEN\"."},{"name":"since","type":"string","required":false,"description":"Inline scope: absolute Unix seconds or relative (7d, 1mo, now)."},{"name":"spell","type":"string","required":false,"description":"Published spell: nevent, note id, or 64-hex event id."},{"name":"tag","type":"object","required":false,"description":"Inline scope: one tag filter, e.g. {letter:\"h\", values:[\"<community-pk>\"]}."},{"name":"until","type":"string","required":false,"description":"Inline scope: absolute Unix seconds or relative."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":1123}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T01:19:27.000Z","track":"remote","endpoint":"https://mcp.edufeed.org/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=mcp.edufeed.org","issuer":"CN=YR2,O=Let's Encrypt,C=US","notBefore":"2026-10-03T05:15:58Z","notAfter":"2027-01-01T05:15:57Z","keyType":"RSA","keyBits":4096,"isCa":false},{"subject":"CN=YR2,O=Let's Encrypt,C=US","issuer":"CN=Root YR,O=ISRG,C=US","notBefore":"2025-09-03T00:00:00Z","notAfter":"2028-09-02T23:59:59Z","keyType":"RSA","keyBits":2048,"isCa":true},{"subject":"CN=Root YR,O=ISRG,C=US","issuer":"CN=ISRG Root X1,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"RSA","keyBits":4096,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"mcp.edufeed.org.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"org.","outcome":"verified","label":"Verified"},{"zone":"edufeed.org.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"none","label":"No authorisation required","gate":null,"gateLabel":null,"status":200,"authorizationServers":[]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-03","recent":[{"id":"chg_01a1a94a-190c-70a7-94db-d25243dfd053","kind":"check.measure","summary":"Schema quality (291 → 322)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190c-70a7-94db-d25243dfd053"},{"id":"chg_01a1a94a-190c-7be4-8e6e-16706714f6cd","kind":"tool.description_changed","summary":"Tool “search_calendar_events” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190c-7be4-8e6e-16706714f6cd"},{"id":"chg_01a1a94a-190d-7768-b182-03b1c9ea1975","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “community”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190d-7768-b182-03b1c9ea1975"},{"id":"chg_01a1a94a-190d-7d9b-a09d-ef4b2204d4af","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “endAfter”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190d-7d9b-a09d-ef4b2204d4af"},{"id":"chg_01a1a94a-190e-743d-bfba-1fba4aef6ba7","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “endBefore”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190e-743d-bfba-1fba4aef6ba7"},{"id":"chg_01a1a94a-190e-79a2-a24e-33999e965c66","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “kinds”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190e-79a2-a24e-33999e965c66"},{"id":"chg_01a1a94a-190e-7ee6-bdbb-a9edcc4e8c98","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “query”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190e-7ee6-bdbb-a9edcc4e8c98"},{"id":"chg_01a1a94a-190f-7466-a58c-ed14fbfc9487","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “startAfter”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190f-7466-a58c-ed14fbfc9487"},{"id":"chg_01a1a94a-190f-79c3-b8a9-382ee2ffea1e","kind":"param.description_changed","summary":"“search_calendar_events” reworded the description of “startBefore”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190f-79c3-b8a9-382ee2ffea1e"},{"id":"chg_01a1a94a-190f-7ec5-a4cc-5344610c64a7","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “attendanceMode”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-190f-7ec5-a4cc-5344610c64a7"},{"id":"chg_01a1a94a-1910-74ef-a0e7-895ad504aad5","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “educationalLevel”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-1910-74ef-a0e7-895ad504aad5"},{"id":"chg_01a1a94a-1911-71a3-b166-8ba49d36654a","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “free”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-1911-71a3-b166-8ba49d36654a"},{"id":"chg_01a1a94a-1911-7c70-bb53-b5c5c0224e18","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “includeHiddenSources”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-1911-7c70-bb53-b5c5c0224e18"},{"id":"chg_01a1a94a-1912-7283-832d-303fb5e5223e","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “participants”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-1912-7283-832d-303fb5e5223e"},{"id":"chg_01a1a94a-1912-77cb-b510-365482eaedce","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “references”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-1912-77cb-b510-365482eaedce"},{"id":"chg_01a1a94a-1912-7cb2-9dc7-f4aa2e2a0d01","kind":"param.added_optional","summary":"“search_calendar_events” added an optional parameter “registrationRequired”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a1a94a-1912-7cb2-9dc7-f4aa2e2a0d01"},{"id":"chg_01a199d6-8ffa-71c8-93b3-8b6effd614f4","kind":"check.verdict","summary":"Stability (0.97 → pass)","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a199d6-8ffa-71c8-93b3-8b6effd614f4"},{"id":"chg_01a199d6-8ffb-70f2-b6c1-d504f4e7605b","kind":"tool.description_changed","summary":"Tool “get_resource” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a199d6-8ffb-70f2-b6c1-d504f4e7605b"},{"id":"chg_01a199d6-8ffb-76c5-89bb-57ce819718de","kind":"tool.description_changed","summary":"Tool “search_content” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a199d6-8ffb-76c5-89bb-57ce819718de"},{"id":"chg_01a199d6-8ffb-7d0b-bca1-5b492903eb02","kind":"param.description_changed","summary":"“search_content” reworded the description of “licenseFilter”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp#chg-chg_01a199d6-8ffb-7d0b-bca1-5b492903eb02"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp","markdown":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp.md","changelogJson":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/org-edufeed-nope-mcp/mcp.xml","external":[{"label":"Remote endpoint","href":"https://mcp.edufeed.org/mcp"},{"label":"Repository","href":"https://github.com/edufeed-org/nope-mcp"},{"label":"Website","href":"https://edufeed.org/"}]}}