Koskamo

DanNet MCP

Provides LLM access to DanNet, the Danish WordNet, allowing agents to query semantic relations and lexical data through the Model Context Protocol.

Endpoint and access

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

DanNet MCP logo, by kuhumcstCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by kuhumcst
MCP endpoint (Streamable HTTP)
https://wordnet.dk/mcp
Vendor documentation

What its tools do

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

6 of 6 have a description · 0 of 6 declare behavior hints · 0 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

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

What you can do with it

  • Query DanNet's semantic relations directly through Claude
  • Access Danish lexical data via MCP
  • Connect AI tools to the Danish WordNet knowledge graph

Source and maintenance

Community listingRegistry 1.0.2
Maintenance checked

Protocol and capabilities

Server
DanNet 1.13.1
MCP protocol negotiated in check
2025-06-18
Tools
6 advertised
Resources
3 advertised
Resource templates
1 advertised
Prompts
8 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Server-provided instructions

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

DanNet is the Danish WordNet, modelled with OntoLex-Lemon and the Global WordNet schema: words (ontolex:LexicalEntry) have senses (ontolex:LexicalSense) that lexicalize synsets (ontolex:LexicalConcept). The triplestore also holds the Open English WordNet (en:) and the COR inflection lexicon (cor:). Workflow: get_word_overview(word) gives every sense of a word with synonyms, hypernym and ontological types in one call; get_entity_info(id) gives the full JSON-LD of any synset, word or sense; sparql_query covers everything else. Synset definitions can be truncated (ending in "…"); fetch_ddo_definition fetches the full text from DDO. Key relations: wn:hypernym/wn:hyponym (taxonomy), dns:orthogonalHypernym, wn:mero_*/wn:holo_* (part-whole), wn:similar, wn:antonym, dns:usedFor, wn:agent/wn:instrument/wn:patient/wn:result (thematic roles), wn:causes, wn:ili and wn:eq_synonym (English equivalents). dns:ontologicalType holds the EuroWordNet-style semantic types (dnc:Animal, dnc:Human, dnc:Object, ...), dns:sentiment the polarity (marl:hasPolarity, marl:polarityValue) and dns:inherited marks properties inherited from hypernyms. Sense labels follow DDO (Den Danske Ordbog): "hund_1§1" is the word "hund", entry 1, definition 1. Synset labels list the member senses, e.g. "{hund_1§1; køter_§1; vovhund_§1}". Prefixes: dn: (data), dns: (schema), dnc: (ontological types), dnf: (similarity functions dnf:path, dnf:lch, dnf:wup), wn:, ontolex:, lexinfo:, skos:, rdfs:, rdf:, owl:, marl:, dc:, ili:, en:, enl:, cor:. Read dannet://schema/{prefix} for the schema behind a prefix.

Tools

6 advertised

get_word_synsets
Advertised by the server during the last successful anonymous check.

The synsets (senses) of the Danish `word`, as JSON-LD entries with @id (e.g. "dn:synset-3047" for get_entity_info), skos:definition, dns:ontologicalType and wn:lexfile. A word with a single synset gives that synset's full JSON-LD as the only entry.

get_word_synsets input schema
{
  "type": "object",
  "title": "get_word_synsetsArguments",
  "required": [
    "word"
  ],
  "properties": {
    "word": {
      "type": "string",
      "title": "Word"
    }
  }
}
get_word_synsets output schema
{
  "type": "object",
  "title": "get_word_synsetsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Result"
    }
  }
}
get_entity_info
Advertised by the server during the last successful anonymous check.

Full JSON-LD of a DanNet resource: a synset ("synset-3047"), word ("word-11021628") or sense ("sense-21033604"), given bare or prefixed ("dn:synset-3047"), or an external resource by prefix ("ili:i76470", "ontolex:LexicalConcept"). Properties use prefixed names (wn:hypernym, ontolex:isEvokedBy, ...); language-tagged values are {"@value": ..., "@language": ...}.

get_entity_info input schema
{
  "type": "object",
  "title": "get_entity_infoArguments",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "title": "Identifier"
    }
  }
}
get_word_overview
Advertised by the server during the last successful anonymous check.

Every sense of the Danish `word` in one call: a list with synset_id, label, definition, lexfile, ontological_types, synonyms (words sharing the synset) and hypernym ({synset_id, label} or null) per synset. Only synsets where the word itself has a sense count, not multi-word expressions containing it.

get_word_overview input schema
{
  "type": "object",
  "title": "get_word_overviewArguments",
  "required": [
    "word"
  ],
  "properties": {
    "word": {
      "type": "string",
      "title": "Word"
    }
  }
}
get_word_overview output schema
{
  "type": "object",
  "title": "get_word_overviewOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Result"
    }
  }
}
autocomplete_danish_word
Advertised by the server during the last successful anonymous check.

Danish words starting with `prefix` (at least 3 characters), at most `max_results`, as {"autocompletions": [...]} where lemmas are plain strings and inflected forms of a matching lemma are [lemma, form] pairs.

autocomplete_danish_word input schema
{
  "type": "object",
  "title": "autocomplete_danish_wordArguments",
  "required": [
    "prefix"
  ],
  "properties": {
    "prefix": {
      "type": "string",
      "title": "Prefix"
    },
    "max_results": {
      "type": "integer",
      "title": "Max Results",
      "default": 10
    }
  }
}
fetch_ddo_definition
Advertised by the server during the last successful anonymous check.

The full definitions of `synset_id` from DDO (ordnet.dk), where DanNet's own skos:definition may be truncated. Follows the dns:source of each sense. Returns the DanNet definition, the DDO definitions found and any errors; DDO and DanNet have drifted apart, so some source URLs no longer resolve.

fetch_ddo_definition input schema
{
  "type": "object",
  "title": "fetch_ddo_definitionArguments",
  "required": [
    "synset_id"
  ],
  "properties": {
    "synset_id": {
      "type": "string",
      "title": "Synset Id"
    }
  }
}
sparql_query
Advertised by the server during the last successful anonymous check.

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

sparql_query input schema
{
  "type": "object",
  "title": "sparql_queryArguments",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "title": "Query"
    },
    "timeout": {
      "type": "integer",
      "title": "Timeout",
      "default": 8000
    },
    "distinct": {
      "type": "boolean",
      "title": "Distinct",
      "default": true
    },
    "inference": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Inference",
      "default": null
    },
    "max_results": {
      "type": "integer",
      "title": "Max Results",
      "default": 100
    }
  }
}

Prompts

8 advertised

analyze_danish_word

Advertised by the server during the last successful anonymous check.

A full linguistic analysis of a Danish `word`.

word
No description (required)
include_examples
No description
compare_danish_words

Advertised by the server during the last successful anonymous check.

A semantic comparison of two Danish words.

word1
No description (required)
word2
No description (required)
explore_semantic_field

Advertised by the server during the last successful anonymous check.

The semantic field around a Danish `concept`, `depth` hyponym levels deep.

concept
No description (required)
depth
No description
trace_taxonomic_path

Advertised by the server during the last successful anonymous check.

The taxonomic relationship between two Danish words.

word1
No description (required)
word2
No description (required)
map_part_whole_relations

Advertised by the server during the last successful anonymous check.

The part-whole relations of a Danish `entity`: "parts", "wholes" or "both".

entity
No description (required)
direction
No description
find_translation_equivalents

Advertised by the server during the last successful anonymous check.

Cross-linguistic equivalents of a Danish `word`.

word
No description (required)
target_lang
No description
analyze_verb_roles

Advertised by the server during the last successful anonymous check.

The thematic roles and event structure of a Danish `verb`.

verb
No description (required)
explore_polysemy

Advertised by the server during the last successful anonymous check.

The distinct senses of a polysemous Danish `word`.

word
No description (required)
include_etymology
No description

Resources

3 advertised

dannet_schema

Advertised by the server during the last successful anonymous check.

The DanNet schema (dns:): DanNet's own relations and properties.

dannet_schema URI
dannet://dannet-schema

MIME type: text/plain

ontological_types

Advertised by the server during the last successful anonymous check.

The ontological types (dnc:) used in dns:ontologicalType.

ontological_types URI
dannet://ontological-types

MIME type: text/plain

wordnet_schema

Advertised by the server during the last successful anonymous check.

The Global WordNet schema (wn:): the standard synset relations.

wordnet_schema URI
dannet://wordnet-schema

MIME type: text/plain

schema

Advertised by the server during the last successful anonymous check.

The RDF schema (Turtle) behind a namespace `prefix`: dns (DanNet relations and properties), dnc (ontological types), wn (WordNet relations), ontolex, lexinfo, skos, marl, ...

schema URI template
dannet://schema/{prefix}

90-day uptime

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

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

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

30-day availability

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

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

Maintenance history

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

  • · probe · passed · 1085 ms · metadata changed · 6 tool(s), 3 resource(s), 1 resource template(s), 8 prompt(s)

Connect from your client

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

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

Claude Code

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

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add dannet-mcp --url https://wordnet.dk/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable dannet-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "dannet-mcp": {
      "url": "https://wordnet.dk/mcp"
    }
  }
}

Cline

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

VS Code

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

Gemini CLI

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

Claude Desktop

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

Windsurf

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

Let your agent find its tools

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