{"name":"io.github.kuhumcst/dannet","slug":"kuhumcst-dannet","title":null,"description":"DanNet - Danish WordNet with rich lexical relationships and SPARQL access.","url":"https://mcp.market/server/kuhumcst-dannet","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":34,"stars":29,"forks":2,"downloads_week":null,"last_push_at":"2026-10-01T13:43:33.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T07:50:30.954Z","last_ok_at":"2026-11-04T07:50:30.954Z","latency_ms":958},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/kuhumcst/DanNet","website":null,"version":"1.0.2","remotes":[{"type":"streamable-http","url":"https://wordnet.dk/mcp"}],"packages":[],"tools":[{"name":"autocomplete_danish_word","description":"Danish words starting with `prefix` (at least 3 characters), at most\n`max_results`, as {\"autocompletions\": [...]} where lemmas are plain strings\nand inflected forms of a matching lemma are [lemma, form] pairs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"prefix":{"title":"Prefix","type":"string"},"max_results":{"default":10,"title":"Max Results","type":"integer"}},"required":["prefix"],"title":"autocomplete_danish_wordArguments"}},{"name":"fetch_ddo_definition","description":"The full definitions of `synset_id` from DDO (ordnet.dk), where DanNet's\nown skos:definition may be truncated. Follows the dns:source of each sense.\nReturns the DanNet definition, the DDO definitions found and any errors;\nDDO and DanNet have drifted apart, so some source URLs no longer resolve.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"synset_id":{"title":"Synset Id","type":"string"}},"required":["synset_id"],"title":"fetch_ddo_definitionArguments"}},{"name":"get_entity_info","description":"Full JSON-LD of a DanNet resource: a synset (\"synset-3047\"), word\n(\"word-11021628\") or sense (\"sense-21033604\"), given bare or prefixed\n(\"dn:synset-3047\"), or an external resource by prefix (\"ili:i76470\",\n\"ontolex:LexicalConcept\"). Properties use prefixed names (wn:hypernym,\nontolex:isEvokedBy, ...); language-tagged values are\n{\"@value\": ..., \"@language\": ...}.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"identifier":{"title":"Identifier","type":"string"}},"required":["identifier"],"title":"get_entity_infoArguments"}},{"name":"get_word_overview","description":"Every sense of the Danish `word` in one call: a list with synset_id,\nlabel, definition, lexfile, ontological_types, synonyms (words sharing the\nsynset) and hypernym ({synset_id, label} or null) per synset. Only synsets\nwhere the word itself has a sense count, not multi-word expressions\ncontaining it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"word":{"title":"Word","type":"string"}},"required":["word"],"title":"get_word_overviewArguments"}},{"name":"get_word_synsets","description":"The synsets (senses) of the Danish `word`, as JSON-LD entries with @id\n(e.g. \"dn:synset-3047\" for get_entity_info), skos:definition,\ndns:ontologicalType and wn:lexfile. A word with a single synset gives that\nsynset's full JSON-LD as the only entry.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"word":{"title":"Word","type":"string"}},"required":["word"],"title":"get_word_synsetsArguments"}},{"name":"sparql_query","description":"Run a SPARQL SELECT `query` against DanNet and return standard SPARQL\nJSON results ({\"head\": ..., \"results\": {\"bindings\": [...]}}). The common\nprefixes (dn, dns, dnc, dnf, wn, ontolex, lexinfo, skos, rdfs, rdf, owl,\nmarl, dc, ili, en, enl, cor) are declared automatically. `timeout` is in\nms (max 15000), `max_results` at most 100, `distinct` adds DISTINCT, and\n`inference` selects the model: None tries the base model and retries with\ninference on an empty result; True forces inference, which inverse\nrelations like wn:hyponym and wn:holo_* need; False forces the base model.\n\nPerformance rules: anchor every query on a known URI or a word lookup\n(dn:synset-3047 wn:hypernym ?x, never ?x wn:hypernym ?y alone); never\nFILTER(CONTAINS(...)) over all labels, look the word up first; make every\ntriple pattern share a variable with another; add LIMIT; prefer VALUES\nover FILTER for several known URIs; the store also holds the English\nWordNet (en:), so anchor on dn: or \"...\"@da to stay in Danish.\n\nTemplates:\n  Synsets of a word:\n    SELECT DISTINCT ?synset ?label WHERE {\n      ?entry ontolex:canonicalForm/ontolex:writtenRep \"hund\"@da .\n      ?entry ontolex:sense/ontolex:isLexicalizedSenseOf ?synset .\n      ?synset rdfs:label ?label }\n  Taxonomic ancestors:\n    SELECT DISTINCT ?ancestor ?label WHERE {\n      dn:synset-3047 wn:hypernym+ ?ancestor . ?ancestor rdfs:label ?label }\n  Hyponyms (needs inference=True, or query the inverse wn:hypernym):\n    SELECT DISTINCT ?hyponym ?label WHERE {\n      ?hyponym wn:hypernym dn:synset-3047 . ?hyponym rdfs:label ?label }\n  Ontological types (an RDF bag):\n    SELECT ?type WHERE {\n      dn:synset-3047 dns:ontologicalType/?pos ?type .\n      FILTER(STRSTARTS(STR(?pos), STR(rdf:_))) }\n  Taxonomic similarity (dnf:path, dnf:lch, dnf:wup score two synsets of\n  the same language and part of speech, 1.0 for identical):\n    SELECT ?synset ?score WHERE {\n      ?synset a ontolex:LexicalConcept .\n      FILTER(STRSTARTS(STR(?synset), STR(dn:)))\n      BIND(dnf:wup(dn:synset-3047, ?synset) AS ?score) }\n    ORDER BY DESC(?score) LIMIT 20","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"title":"Query","type":"string"},"timeout":{"default":8000,"title":"Timeout","type":"integer"},"max_results":{"default":100,"title":"Max Results","type":"integer"},"distinct":{"default":true,"title":"Distinct","type":"boolean"},"inference":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Inference"}},"required":["query"],"title":"sparql_queryArguments"}}],"scan":{"score":80,"grade":"B","scanned_at":"2026-10-01T13:51:35.761Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-01T13:51:35.702Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1636ms"]},"poisoning":{"score":13,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 1 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool sparql_query: …Run a SPARQL SELECT `query` against DanNet and return standard SPARQL JSON results ({\"head\": ..., \"results\": {\"bindings\": [...]}}). The common prefixes (dn, dns, dnc, dnf, wn, ontolex, lexinfo, skos, rdfs, rdf, owl, marl, dc, ili, en, enl, cor) are declared automatically. `timeout` is in ms (max 15000), `max_results` at most 100, `distinct` adds DISTINCT, and `inference` selects the model: None tries the base model and retries with inference on an empty result; True forces inference, which inverse relations like wn:hyponym and wn:holo_* need; False forces the base model. Performance rules: anchor every query on a known URI or a word lookup (dn:synset-3047 wn:hypernym ?x, never ?x wn:hypernym ?y alone); never FILTER(CONTAINS(...)) over all labels, look the word up first; make every triple pattern share a variable with another; add LIMIT; prefer VALUES over FILTER for several known URIs; the store also holds the English WordNet (en:), so anchor on dn: or \"...\"@da to stay in Danish. Templates: Synsets of a word: SELECT DISTINCT ?synset ?label WHERE { ?entry ontolex:canonicalForm/ontolex:writtenRep \"hund\"@da . ?entry ontolex:sense/ontolex:isLexicalizedSenseOf ?synset . ?synset rdfs:label ?label } Taxonomic ancestors: SELECT DISTINCT ?ancestor ?label WHERE { dn:synset-3047 wn:hypernym+ ?ancestor . ?ancestor rdfs:label ?label } Hyponyms (needs inference=True, or query the inverse wn:hypernym): SELECT DISTINCT ?hyponym ?label WHERE { ?hyponym wn:hypernym dn:synset-3047 . ?hyponym rdfs:label ?label } Ontological types (an RDF bag): SELECT ?type WHERE { dn:synset-3047 dns:ontologicalType/?pos ?type . FILTER(STRSTARTS(STR(?pos), STR(rdf:_))) } Taxonomic similarity (dnf:path, dnf:lch, dnf:wup score two synsets of the same language and part of speech, 1.0 for identical): SELECT ?synset ?score WHERE { ?synset a ontolex:LexicalConcept . FILTER(STRSTARTS(STR(?synset), STR(dn:))) BIND(dnf:wup(dn:synset-3047, ?synset) AS ?score) } ORDER BY DESC(?score) LIMIT 20…"}],"inputs":{"probes":[{"url":"https://wordnet.dk/mcp","reachable":true,"authRequired":false,"latencyMs":1636,"serverInfo":{"name":"DanNet","version":"1.13.1"}}],"packages":[],"repo":{"found":true,"owner":"kuhumcst","repo":"DanNet","archived":false,"pushedAt":"2026-10-01T13:43:33Z","stars":29,"forks":2,"openIssues":9,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/1484671?v=4","ownerCreatedAt":"2012-02-29T09:38:43Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/1484671?v=4&s=128","source":"github"},"presence":{"stars":29,"forks":2,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-01T13:43:33.000Z","score":34}}}},"grade_history":[],"reviews":[]}