{"name":"org.edufeed/nope-mcp","slug":"edufeed-nope-mcp","title":"nope-mcp — Open Educational Resources search","description":"Search German open educational resources (OER) via AMB/schema.org metadata, open licenses only.","url":"https://mcp.market/server/edufeed-nope-mcp","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":26,"stars":1,"forks":0,"downloads_week":null,"last_push_at":"2026-10-03T05:59:44.000Z","license":"Unlicense"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T04:15:44.878Z","last_ok_at":"2026-11-04T04:15:44.878Z","latency_ms":669},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/edufeed-org/nope-mcp","website":"https://edufeed.org","version":"0.4.0","remotes":[{"type":"streamable-http","url":"https://mcp.edufeed.org/mcp"}],"packages":[],"tools":[{"name":"browse_educational_levels","description":"List available educational levels (Primary, Secondary, Higher Education, etc.) with resource counts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"language":{"type":"string","default":"de","description":"Language for labels (default: \"de\")"},"limit":{"type":"number","minimum":1,"maximum":100,"default":50,"description":"Maximum number of levels to return"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"browse_resource_types","description":"List available learning resource types (Video, Course, Worksheet, etc.) with resource counts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"language":{"type":"string","default":"de","description":"Language for labels (default: \"de\")"},"limit":{"type":"number","minimum":1,"maximum":100,"default":50,"description":"Maximum number of resource types to return"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"browse_subjects","description":"List available subjects/topics in the educational resource collection. Returns subjects with their labels and resource counts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"prefix":{"type":"string","description":"Filter subjects whose label starts with this prefix"},"language":{"type":"string","default":"de","description":"Language for labels (default: \"de\")"},"limit":{"type":"number","minimum":1,"maximum":250,"default":50,"description":"Maximum number of subjects to return"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_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. Lookups are not license-filtered: a learning resource carries openLicense (true for CC0, Public Domain, CC BY, CC BY-SA — the open licenses that search results are currently limited to). 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"identifier":{"type":"string","description":"Resource identifier (d-tag). Use this for stable lookups."},"author":{"type":"string","description":"Author pubkey (hex) to disambiguate if multiple resources share the same identifier"},"eventId":{"type":"string","description":"Nostr event ID (hex) for direct lookup. Alternative to identifier."},"naddr":{"type":"string","description":"NIP-19 naddr from a search result — the preferred handoff to fetch full metadata."},"language":{"type":"string","default":"de","description":"Preferred language for labels (default: \"de\")"},"relays":{"type":"array","items":{"type":"string"},"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\"). Default: the default relay set."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"relay_list_get","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pubkey":{"type":"string","description":"Public key to fetch relay list for (defaults to connected signer)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"relay_stats","description":"Get information about all selectable AMB relays (default and extra), including supported NIPs, relay name, and description.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"resolve_author","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Org or person name to resolve (e.g. \"Jörg Lohrer\")."},"limit":{"type":"number","minimum":1,"maximum":25,"default":10,"description":"Max candidates (1-25, default 10)."}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"resolve_publisher","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Actor name as the user said it (e.g. \"Lehreladen\")."},"relays":{"type":"array","items":{"type":"string"},"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."}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"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, and hashtag filtering. Returns events from the configured calendar relay. 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","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. EXCEPTION: a geohash query forces the relay location index, which ignores this topic; for \"events about X near a place\" pass the geohash and filter the returned events by topic on the client."},"startAfter":{"type":"number","description":"Only events starting after this Unix timestamp"},"startBefore":{"type":"number","description":"Only events starting before this Unix timestamp"},"endAfter":{"type":"number","description":"Only events ending after this Unix timestamp"},"endBefore":{"type":"number","description":"Only events ending before this Unix timestamp"},"geohash":{"type":"string","description":"Geohash prefix for location-based search"},"hashtags":{"type":"array","items":{"type":"string"},"description":"Filter by hashtags (e.g., [\"meetup\", \"nostr\"])"},"authors":{"type":"array","items":{"type":"string"},"description":"Filter by author pubkeys (hex format)"},"community":{"type":"string","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/endBefore) in a single server-side query, so \"events shared with X next week\" is one call. EXCEPTION: a geohash query forces the relay location index, which ignores this community filter; for \"shared with X near a place\" pass the geohash and filter the returned events by community client-side."},"kinds":{"type":"array","items":{"type":"number"},"description":"Event kinds to query (default: [31922, 31923]). 31922 = date-based, 31923 = time-based."},"since":{"type":"number","description":"Return events created at or after this Unix timestamp"},"until":{"type":"number","description":"Return events created at or before this Unix timestamp"},"limit":{"type":"number","minimum":1,"maximum":250,"default":20,"description":"Maximum number of results (1-250, default: 20)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_content","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. Educational resources are returned only when openly licensed (CC0, Public Domain, CC BY, CC BY-SA); the other content types carry no license and are all 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 actually made and published the resource); these can differ, so do not treat eventAuthor as the publisher. For full metadata (license, dates, complete entity lists) pass a result's naddr to get_resource. Publication facets ride inside the query string as NIP-50 field filters: append type:academic, doi:10.1234/abcd.5678, keywords:<term>, or partOf:30143:<pubkey>:<d> (\"publications of a project\") to the query — the relay resolves them server-side. When presenting results to the user, render each as a markdown link so they can open it directly — prefer sourcePage (the original external source page, present on most resources and on projects/measures/publications), then url, then naddr. For upcoming events on the same topic, follow up with search_calendar_events.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","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 drops out of the top results. To constrain by actor, resolve the name first (resolve_author → authors param here; or resolve_publisher → search_resources publisherName)."},"types":{"type":"array","items":{"type":"string","enum":["resource","article","wiki","project","measure","publication"]},"description":"Restrict to a subset of content types. Default: all of them."},"language":{"type":"string","default":"de","description":"Label language (default \"de\")."},"since":{"type":"number","description":"Created at or after this Unix timestamp."},"until":{"type":"number","description":"Created at or before this Unix timestamp."},"authors":{"type":"array","items":{"type":"string"},"description":"Filter by author pubkeys (hex)."},"limit":{"type":"number","minimum":1,"maximum":250,"default":20,"description":"Max results (1-250, default 20)."},"community":{"type":"string","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.g. \"math resources shared with X\")."},"relays":{"type":"array","items":{"type":"string"},"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."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_passages","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. Educational-resource passages come only from openly licensed resources (CC0, Public Domain, CC BY, CC BY-SA); other content types are not license-filtered. Scope is required but simple: with no source restriction from the user, pass the content kinds (e.g. kinds:[30142] for educational resources, [30040,30041] for publications, [30023] for articles). Route source restrictions (\"nur Content von X\") into the scope parameters: a metadata publisher (most organisations — resolve_publisher finds the exact spelling) goes into `search` as a QUOTED field filter, e.g. search:'publisher.name:\"LEHRE LADEN\"' (unquoted multi-word names match nothing); a Nostr signing account (resolve_author → pubkey) goes into `authors`. A published grimoire spell (kind 777, nevent or event id) can replace inline scope entirely; the response carries the canonical spell for whatever scope was used — publish it (e.g. via grimoire) to make the scope reusable. Spells may use $me/$contacts; they resolve to the calling user (pass `me` if the transport is anonymous). Fails rather than widening scope: an empty scope, unreachable relay (relay_unreachable — tell the user to retry), or unreachable index is a typed error, never a silently unscoped search.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"question":{"type":"string","description":"The question or topic to find grounding passages for."},"spell":{"type":"string","description":"Published spell: nevent, note id, or 64-hex event id."},"authors":{"type":"array","items":{"type":"string"},"description":"Inline scope: Nostr event-author pubkeys (hex/npub/$me/$contacts) — resolve names via resolve_author. NOT for metadata publishers; those go into `search`."},"kinds":{"type":"array","items":{"type":"number"},"description":"Inline scope: content kinds (e.g. 30142)."},"tag":{"type":"object","properties":{"letter":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}},"required":["letter","values"],"additionalProperties":false,"description":"Inline scope: one tag filter, e.g. {letter:\"h\", values:[\"<community-pk>\"]}."},"search":{"type":"string","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\"."},"since":{"type":"string","description":"Inline scope: absolute Unix seconds or relative (7d, 1mo, now)."},"until":{"type":"string","description":"Inline scope: absolute Unix seconds or relative."},"me":{"type":"string","description":"Who $me refers to (npub or hex). Defaults to the calling identity."},"relays":{"type":"array","items":{"type":"string"},"description":"Relay selection (list_relays set), by full URL or short name (e.g. \"oersi\", \"sodix\"). First mapped relay is used."},"limit":{"type":"number","minimum":1,"maximum":25,"default":10,"description":"Passages to return (1-25, default 10)."}},"required":["question"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_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. Only openly licensed resources are returned (CC0, Public Domain, CC BY, CC BY-SA); NC/ND, all-rights-reserved and unlicensed resources are left out. 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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text search query (e.g., \"mathematik\", \"machine learning\")"},"publisherName":{"type":"string","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_publisher first."},"creatorName":{"type":"string","description":"Filter by creator/author name — EXACT full-string match (case-insensitive) against the AMB metadata. Unsure of the spelling? Call resolve_publisher first."},"subjectLabel":{"type":"string","description":"Filter by subject/topic label — EXACT label match (e.g., \"Mathematik\", \"Physik\"); browse_subjects lists valid labels"},"resourceTypeLabel":{"type":"string","description":"Filter by resource type label — EXACT label match (e.g., \"Video\", \"Kurs\", \"Arbeitsblatt\"); browse_resource_types lists valid labels"},"educationalLevelLabel":{"type":"string","description":"Filter by educational level — EXACT label match (e.g., \"Sekundarstufe I\", \"Hochschule\"); browse_educational_levels lists valid labels"},"language":{"type":"string","default":"de","description":"Language for label filters (default: \"de\")"},"since":{"type":"number","description":"Return resources created at or after this Unix timestamp"},"until":{"type":"number","description":"Return resources created at or before this Unix timestamp"},"authors":{"type":"array","items":{"type":"string"},"description":"Filter by author pubkeys (hex format)"},"limit":{"type":"number","minimum":1,"maximum":250,"default":20,"description":"Maximum number of results (1-250, default: 20)"},"relays":{"type":"array","items":{"type":"string"},"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."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"skos_get_concept","description":"Get details of a single SKOS concept by its URI, including broader, narrower, and related concepts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"uri":{"type":"string","format":"uri","description":"URI of the concept (e.g., \"https://w3id.org/kim/hcrt/video\")"},"language":{"type":"string","description":"Preferred language for labels (e.g., \"de\", \"en\")"}},"required":["uri"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"skos_get_vocabulary","description":"Fetch and parse a SKOS vocabulary from its URI. Returns the concept scheme with all concepts organized hierarchically.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"uri":{"type":"string","format":"uri","description":"URI of the SKOS vocabulary (e.g., \"https://w3id.org/kim/hcrt/scheme\")"},"language":{"type":"string","description":"Preferred language for labels (e.g., \"de\", \"en\"). If not specified, all languages are returned."},"flat":{"type":"boolean","description":"If true, return a flat list of concepts instead of hierarchy. Default: false."}},"required":["uri"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"skos_search","description":"Search for concepts in a SKOS vocabulary. By default searches prefLabel, altLabel, hiddenLabel, and definition.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"vocabularyUri":{"type":"string","format":"uri","description":"URI of the vocabulary to search (e.g., \"https://w3id.org/kim/hochschulfaechersystematik/scheme\")"},"query":{"type":"string","minLength":1,"description":"Search query"},"language":{"type":"string","description":"Limit search to this language (e.g., \"de\"). If not specified, searches all languages."},"fields":{"type":"array","items":{"type":"string","enum":["prefLabel","altLabel","hiddenLabel","definition","notation"]},"description":"Fields to search in. Default: [\"prefLabel\", \"altLabel\", \"hiddenLabel\", \"definition\"]"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of results (default: 20, max: 100)"}},"required":["vocabularyUri","query"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":88,"grade":"A","scanned_at":"2026-10-03T12:01:56.454Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-03T12:01:56.453Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1549ms"]},"poisoning":{"score":13,"max":15,"notes":["18 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool search_passages: …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. Educational-resource passages come only from openly licensed resources (CC0, Public Domain, CC BY, CC BY-SA); other content types are not license-filtered. Scope is required but simple: with no source restriction from the user, pass the content kinds (e.g. kinds:[30142] for educational resources, [30040,30041] for publications, [30023] for articles). Route source restrictions (\"nur Content von X\") into the scope parameters: a metadata publisher (most organisations — resolve_publisher finds the exact spelling) goes into `search` as a QUOTED field filter, e.g. search:'publisher.name:\"LEHRE LADEN\"' (unquoted multi-word names match nothing); a Nostr signing account (resolve_author → pubkey) goes into `authors`. A published grimoire spell (kind 777, nevent or event id) can replace inline scope entirely; the response carries the canonical spell for whatever scope was used — publish it (e.g. via grimoire) to make the scope reusable. Spells may use $me/$contacts; they resolve to the calling user (pass `me` if the transport is anonymous). Fails rather than widening scope: an empty scope, unreachable relay (relay_unreachable — tell the user to retry), or unreachable index is a typed error, never a silently unscoped search.…"}],"inputs":{"probes":[{"url":"https://mcp.edufeed.org/mcp","reachable":true,"authRequired":false,"latencyMs":1549,"serverInfo":{"name":"nope-mcp","version":"0.4.0"}}],"packages":[],"repo":{"found":true,"owner":"edufeed-org","repo":"nope-mcp","archived":false,"pushedAt":"2026-10-03T05:59:44Z","stars":1,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/193320388?v=4","ownerCreatedAt":"2024-12-31T09:58:27Z","license":"Unlicense"},"icon":{"url":"https://edufeed.org/favicon.svg","source":"site"},"presence":{"stars":1,"forks":0,"downloadsWeek":null,"license":"Unlicense","lastPushAt":"2026-10-03T05:59:44.000Z","score":26}}}},"grade_history":[],"reviews":[]}