dannet
Server Details
DanNet - Danish WordNet with rich lexical relationships and SPARQL access.
- Status
- Unhealthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- kuhumcst/DanNet
- GitHub Stars
- 24
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 16 of 16 tools scored. Lowest: 2.9/5.
Most tools have distinct purposes, but there is some overlap between get_entity_info and the specific entity tools (get_synset_info, get_word_info, get_sense_info). The descriptions help clarify that get_entity_info is a general-purpose tool for any entity, while the others are specialized, but an agent might still be confused about when to use which. Tools like analyze_namespace_usage and extract_semantic_data also have somewhat overlapping debugging/analysis roles.
Tool names follow a highly consistent verb_noun pattern throughout (e.g., get_synset_info, fetch_ddo_definition, autocomplete_danish_word). All names use snake_case with clear, descriptive verbs like get, fetch, analyze, switch, validate, etc. There are no deviations in naming conventions.
With 16 tools, this is well-scoped for a comprehensive Danish lexical database server. Each tool serves a clear purpose, from core data retrieval (get_synset_info, get_word_info) to advanced features like SPARQL queries, autocomplete, and server management. The count supports rich functionality without being overwhelming.
The tool set provides complete coverage for interacting with DanNet. It includes core CRUD-like operations (fetching entities), advanced querying (SPARQL, autocomplete), debugging tools (analyze_namespace_usage, validate_synset_structure), and utility functions (server switching, cache stats). There are no obvious gaps; agents can perform all expected tasks from basic lookups to complex semantic analysis.
Available Tools
16 toolsanalyze_namespace_usageAInspect
Analyze namespace usage and provide resolution for prefixed properties.
This debugging tool helps understand how namespaces are used in DanNet JSON-LD data and resolves prefixed URIs to full forms.
Args: entity_data: Any DanNet JSON-LD entity data
Returns: Dict with namespace analysis and URI resolution
| Name | Required | Description | Default |
|---|---|---|---|
| entity_data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It mentions that the tool 'resolves prefixed URIs to full forms' and returns a dictionary, but it does not explicitly state whether the operation is non-destructive or describe any side effects. The debugging context is helpful but the safety profile is not fully disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the core purpose in the first sentence and only two longer sentences plus Args/Returns. It is front-loaded with the main action and contains no filler or redundant content, earning every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one flexible parameter) and the presence of an output schema (as indicated in the context signals), the description provides the key elements: purpose, parameter semantics, and return type. It is sufficient for an agent to decide when to invoke the tool, though it lacks explicit information about prerequisites or edge cases, which are minor for a debugging utility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the entity_data parameter, which is simply defined as an object with additionalProperties true. The description fills this gap by defining entity_data as 'Any DanNet JSON-LD entity data,' clarifying the expected input type, but it remains broad and does not detail any required fields or structure beyond being JSON-LD.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's main action ('Analyze namespace usage') and its specific deliverable ('resolves prefixed URIs to full forms'). It uses a specific verb and resource, and the focus on namespace analysis distinguishes it from sibling tools like get_entity_info or sparql_query, which are retrieval-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the tool as a 'debugging tool' and says it helps understand namespace usage, which gives an implied usage context. However, it does not explicitly state when this tool is preferred over alternatives or when not to use it, lacking explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
autocomplete_danish_wordAInspect
Get autocomplete suggestions for Danish word prefixes.
Useful for discovering Danish vocabulary or finding the correct spelling of words. Returns lemma forms (dictionary forms) of words.
Args: prefix: The beginning of a Danish word (minimum 3 characters required) max_results: Maximum number of suggestions to return (default: 10)
Returns: Comma-separated string of word completions in alphabetical order
Note: Autocomplete requires at least 3 characters to prevent excessive results.
Example: suggestions = autocomplete_danish_word("hyg", 5) # Returns: "hygge, hyggelig, hygiejne"
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that returns are lemma forms (dictionary forms), comma-separated, alphabetically ordered, and that at least 3 characters are required. This gives the agent a solid understanding of behavior. It does not cover edge cases like empty results or error handling, but the disclosed traits are sufficient for typical use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, use cases, args, returns, note, and an example. It is concise yet informative, with no superfluous words. Every sentence contributes value, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description is complete. It covers purpose, parameters, return format, ordering, minimum input length, and includes a practical example. The tool has an output schema but the description still explains return semantics, which is helpful. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains both parameters: prefix ('minimum 3 characters required') and max_results ('default: 10'). This adds meaning beyond the schema, which only defines types and a default. The example further clarifies expected parameter usage and output format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get autocomplete suggestions for Danish word prefixes.' This clearly differentiates the tool from sibling tools like fetch_ddo_definition or get_word_info, which serve different lookup purposes. The additional note about discovering vocabulary and spelling reinforces the purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when the tool is useful: 'discovering Danish vocabulary or finding the correct spelling of words.' This provides clear context for use. However, it does not explicitly name alternatives or list conditions when not to use the tool, so it stops short of a 5. The sibling tools are not referenced in the description, which would have strengthened the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_semantic_dataAInspect
Extract and normalize semantic data from any DanNet JSON-LD entity.
This tool provides a unified way to extract semantic information from synsets, words, or senses, handling different JSON-LD structures consistently.
Args: entity_data: Any DanNet entity JSON-LD data
Returns: Dict with normalized semantic information
| Name | Required | Description | Default |
|---|---|---|---|
| entity_data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that data is normalized and structures are handled consistently, which adds behavioral context. However, it does not mention error handling, validation, or what 'normalized' means in concrete terms, leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args/Returns sections and is reasonably concise. There is minor redundancy between the opening sentence and the 'unified way' sentence, but overall it is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description is moderately complete: it gives purpose, input, and return type. However, it lacks guidance on when to use this versus the specific getter siblings and provides no detail about normalization behavior or edge cases, leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It describes the only parameter as 'Any DanNet entity JSON-LD data,' adding basic meaning beyond the raw schema. Yet it lacks structural details or examples, especially since the schema allows arbitrary additional properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Extract and normalize' and the resource 'semantic data from any DanNet JSON-LD entity.' It explicitly mentions handling synsets, words, or senses, which distinguishes it from sibling tools that target specific entity types (e.g., get_synset_info, get_word_info).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use cases by calling it a 'unified way' and mentioning handling different JSON-LD structures consistently, but it does not explicitly state when to prefer this over dedicated sibling getters or provide exclusions. Guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_ddo_definitionAInspect
Fetch the full, untruncated definition from DDO (Den Danske Ordbog) for a synset.
This tool addresses the issue that DanNet synset definitions (:skos/definition) may be capped at a certain length. It retrieves the complete definition from the authoritative DDO source by following sense source URLs.
WORKFLOW:
Get synset information to find associated senses
Extract DDO source URLs from sense data (dns:source)
Fetch DDO HTML pages and parse for definitions
Find elements with class "definitionBox selected" and extract span.definition content
IMPORTANT NOTES:
Looks for CSS classes "definitionBox selected" and child span.definition
DDO and DanNet have diverged over time, so source URLs may not always work
This implementation uses httpx for web requests and regex-based HTML parsing
Args: synset_id: Synset identifier (e.g., "synset-1876" or just "1876")
Returns: Dict containing: - synset_id: The queried synset ID - ddo_definitions: List of definitions found from DDO pages - source_urls: List of DDO URLs that were attempted - success_urls: List of URLs that successfully returned definitions - errors: List of any errors encountered - truncated_definition: The original DanNet definition for comparison
Example: result = fetch_ddo_definition("synset-3047") # Check result['ddo_definitions'] for full DDO definitions # Compare with result['truncated_definition'] from DanNet
| Name | Required | Description | Default |
|---|---|---|---|
| synset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does well by disclosing the implementation (httpx, regex parsing), the specific CSS classes used, the caveat that source URLs may not work, and the complete return structure. This is substantial transparency, though it doesn't discuss rate limits or error handling in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (WORKFLOW, IMPORTANT NOTES, Args, Returns, Example) and front-loads the purpose. It is somewhat lengthy but each section adds value, though the workflow detail could be condensed for agent consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (web scraping, error potential), the description is exceptionally complete: it explains the problem, the workflow, limitations, return values, and provides an example. The presence of an output schema and detailed return description ensures the agent knows what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no description for synset_id (0% coverage), but the tool description adds meaningful semantics with examples: 'Synset identifier (e.g., "synset-1876" or just "1876")'. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fetch the full, untruncated definition from DDO (Den Danske Ordbog) for a synset.' It uses a specific verb ('Fetch') and resource ('DDO definition'), and explicitly contrasts with DanNet's capped definitions, distinguishing it from sibling tools like get_synset_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when synset definitions may be truncated. It also outlines the workflow and possible failures (DDO/DanNet divergence). However, it does not explicitly name alternative tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cache_statsAInspect
Return statistics about the session-scoped resource cache.
Useful for verifying that caching is working: call get_synset_info (or similar) twice for the same ID and check that cache_size grows by 1 on the first call but not on the second, and that cached_keys contains the expected IDs.
Returns: Dict with: - cache_size: Total number of cached entries - cached_keys: List of (base_url, resource_id) pairs currently cached
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It explicitly states that the cache is 'session-scoped' and gives an example that implies read-only observation (checking growth of cache_size). It does not explicitly state 'no side effects,' but the wording 'Return statistics' and the verification pattern make the non-mutating nature clear, adding useful context beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence purpose, a usage hint, and a clean Returns block. It is slightly longer than the minimal needed (the Returns block duplicates what an output schema likely covers), but the structure keeps it scannable and the extra detail serves the user. For that, it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (zero parameters, no annotations, output schema present). The description provides the session-scoping context, a measurable verification pattern with steps, and the return structure. It is complete for the tool's complexity and leaves no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no semantic burden. The rubric gives a baseline of 4 for zero-parameter tools. The description adds no parameter-specific information because none exists, but it anchors the tool's behavior with a usage example, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Return statistics about the session-scoped resource cache.' This clearly distinguishes it from the sibling retrieval and query tools by focusing on cache instrumentation. The follow-up example ('call get_synset_info twice...') reinforces the specific diagnostic purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case: verifying caching works by comparing cache_size across repeated calls. While it does not name an alternative tool or explicitly say when not to use it, it gives clear context for when this tool is appropriate, which matches a 4 ('clear context, no exclusions').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_dannet_serverAInspect
Get information about the currently active DanNet server.
Returns: Dict with current server information: - server_url: The base URL of the current DanNet server - server_type: "local", "remote", or "custom" - status: Connection status information
Example: info = get_current_dannet_server() # Returns: {"server_url": "https://wordnet.dk", "server_type": "remote", "status": "active"}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return structure (server_url, server_type, status), the possible server_type values, and gives an example output. It does not discuss error cases or side effects, but as a read-only getter this is sufficient and no mutation is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, followed by a compact return contract and a concrete example. Every line adds value; there is no repetition of schema data or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless getter, the description is complete: it identifies the resource, specifies every return key with valid values, and provides a realistic example. No output schema is given, but the inline return description fully covers what the agent needs to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty (100% coverage). The description correctly implies there are no inputs to configure, and the example shows a no-argument call. Per rubric, zero parameters earns a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get information about the currently active DanNet server' with a specific verb and resource. It distinguishes itself from sibling tools like switch_dannet_server and get_cache_stats by focusing on the current server state and enumerating return fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: call this tool when you need the current DanNet server URL, type, or connection status. It does not explicitly name alternatives or exclusions, but the getter semantics are unambiguous and no competing tool serves the same purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_infoAInspect
Get comprehensive RDF data for any entity in the DanNet database.
Supports both DanNet entities and external vocabulary entities loaded into the triplestore from various schemas and datasets.
UNDERSTANDING THE DATA MODEL: The DanNet database contains entities from multiple sources:
DanNet entities (namespace="dn"): synsets, words, senses, and other resources
External entities (other namespaces): OntoLex vocabulary, Inter-Lingual Index, etc.
All entities follow RDF patterns with namespace prefixes for properties and relationships.
NAVIGATION TIPS:
DanNet synsets have rich semantic relationships (wn:hypernym, wn:hyponym, etc.)
External entities provide vocabulary definitions and cross-references
Use parse_resource_id() on URI references to get clean IDs
Check @type to understand what kind of entity you're working with
Args: identifier: Entity identifier (e.g., "synset-3047", "word-11021628", "LexicalConcept", "i76470") namespace: Namespace for the entity (default: "dn" for DanNet entities) - "dn": DanNet entities via /dannet/data/ endpoint - Other values: External entities via /dannet/external/{namespace}/ endpoint - Common external namespaces: "ontolex", "ili", "wn", "lexinfo", etc.
Returns: Dict containing JSON-LD format with: - @context → namespace mappings (if applicable) - @id → entity identifier - @type → entity type - All RDF properties with namespace prefixes (e.g., wn:hypernym, ontolex:evokes) - For DanNet synsets: dns:ontologicalType and dns:sentiment (if applicable) - Entity-specific convenience fields (synset_id, resource_id, etc.)
Examples: # DanNet entities get_entity_info("synset-3047") # DanNet synset get_entity_info("word-11021628") # DanNet word get_entity_info("sense-21033604") # DanNet sense
# External vocabulary entities
get_entity_info("LexicalConcept", namespace="ontolex") # OntoLex class definition
get_entity_info("i76470", namespace="ili") # Inter-Lingual Index entry
get_entity_info("noun", namespace="lexinfo") # Lexinfo part-of-speech
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | dn | |
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on full responsibility for behavioral disclosure. It thoroughly explains the return format (JSON-LD with @context, @id, @type, RDF properties), namespace-based endpoint behavior, and navigation tips, adding substantial value beyond the plain schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear headers, Args, Returns, and Examples, making it easy to scan. However, it includes some general RDF data-model commentary that could be shortened without losing critical guidance, making it slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's broad scope (any entity, multiple namespaces) and the existence of specialized sibling tools, the description is complete. It covers all parameters, return structure, entity types, namespace handling, and practical examples, leaving no major gaps for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero descriptions, so the description fully compensates by detailing both parameters: identifier examples (e.g., 'synset-3047') and namespace values with their endpoint mappings and common external namespaces. This provides complete semantic clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states its function: 'Get comprehensive RDF data for any entity in the DanNet database.' This distinguishes it from sibling tools that target specific entity types (word, sense, synset) by covering both DanNet entities and external vocabulary entities, demonstrating a clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive context on when to use the tool, including the kinds of entities supported and example use cases. However, it does not explicitly mention alternatives or contrast itself with specialized sibling tools like get_word_info, so it lacks explicit exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sense_infoAInspect
Get comprehensive RDF data for a DanNet sense (lexical sense).
UNDERSTANDING THE DATA MODEL: Senses are ontolex:LexicalSense instances connecting words to synsets. They represent specific meanings of words with examples and definitions.
KEY RELATIONSHIPS:
LEXICAL CONNECTIONS:
ontolex:isSenseOf → word this sense belongs to
ontolex:isLexicalizedSenseOf → synset this sense represents
SEMANTIC INFORMATION:
lexinfo:senseExample → usage examples in context
rdfs:label → sense label (e.g., "hund_1§1")
REGISTER AND STYLISTIC INFORMATION:
lexinfo:register → formal register classification (e.g., ":lexinfo/slangRegister")
lexinfo:usageNote → human-readable usage notes (e.g., "slang", "formal")
SOURCE INFORMATION:
dns:source → source URL for this sense entry
DDO CONNECTION (Den Danske Ordbog): DanNet senses are derived from DDO (ordnet.dk), the authoritative modern Danish dictionary.
SENSE LABELS: The format "word_entry§definition" connects to DDO structure:
"hund_1§1" = word "hund", entry 1, definition 1 in DDO
"forlygte_§2" = word "forlygte", definition 2 in DDO
The § notation directly corresponds to DDO's definition numbering
SOURCE TRACEABILITY: The dns:source URLs link back to specific DDO entries:
Format: https://ordnet.dk/ddo/ordbog?entry_id=X&def_id=Y&query=word
Note: Some DDO URLs may not resolve correctly if IDs have changed since import
If the DDO page loads correctly, the relevant definition has CSS class "selected"
METADATA ORIGINS: Usage examples, register information, and definitions flow from DDO's corpus-based lexicographic data, providing authoritative linguistic information.
NAVIGATION TIPS:
Follow ontolex:isSenseOf to find the parent word
Follow ontolex:isLexicalizedSenseOf to find the synset
Check lexinfo:senseExample for usage examples from DDO corpus
Check lexinfo:register and lexinfo:usageNote for stylistic information
Use dns:source to attempt tracing back to original DDO definition (with caveats)
Use parse_resource_id() on URI references to get clean IDs
Args: sense_id: Sense identifier (e.g., "sense-21033604" or just "21033604")
Returns: Dict containing: - All RDF properties with namespace prefixes (e.g., ontolex:isSenseOf) - resource_id → clean identifier for convenience - All sense properties and relationships
Example: info = get_sense_info("sense-21033604") # "hund_1§1" sense # Check info['ontolex:isSenseOf'] for parent word # Check info['ontolex:isLexicalizedSenseOf'] for synset # Check info['lexinfo:senseExample'] for usage examples from DDO # Check info['lexinfo:register'] for register classification # Check info['lexinfo:usageNote'] for usage notes like "slang" # Check info['dns:source'] for DDO source URL (may not always work)
| Name | Required | Description | Default |
|---|---|---|---|
| sense_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the return format (dict with RDF properties and resource_id), caveats about DDO URLs potentially not resolving, and how to interpret the data. It does not mention error behavior, but it is thorough about output structure and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally long, with extensive domain information about DanNet and DDO before reaching the actual usage section (Args/Returns). While structured with headers, it is not concise; key operational details appear late, making it less efficient for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly explains the RDF data model, relationships, source traceability, navigation tips, and includes a full example. Given the complexity of the domain and the lack of annotations, this provides a comprehensive picture of what the tool returns and how to use it. It lacks explicit error handling but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines sense_id as a string. The description adds meaning by providing examples ('sense-21033604' or just '21033604'), clarifying that the prefix is optional, and connecting the ID to sense labels like 'hund_1§1'. This goes beyond the schema and effectively compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get comprehensive RDF data for a DanNet sense' with a specific resource type (lexical sense). It also explains the sense-to-word/synset relationships, distinguishing it from sibling tools like get_word_info or get_synset_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive context about what can be done with the results (e.g., navigating to parent word or synset) and includes navigation tips, but it does not explicitly compare against alternatives or state when to prefer this tool over similar tools. The context implies usage but lacks exclusions or direct alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_synset_infoAInspect
Get comprehensive RDF data for a DanNet synset (lexical concept).
UNDERSTANDING THE DATA MODEL: Synsets are ontolex:LexicalConcept instances representing word meanings. They connect to words via ontolex:isEvokedBy and have rich semantic relations.
KEY RELATIONSHIPS (by importance):
TAXONOMIC (most fundamental):
wn:hypernym → broader concept (e.g., "hund" → "pattedyr")
wn:hyponym → narrower concepts (e.g., "hund" → "puddel", "schæfer")
dns:orthogonalHypernym → cross-cutting categories [Danish: ortogonalt hyperonym]
LEXICAL CONNECTIONS:
ontolex:isEvokedBy → words expressing this concept [Danish: fremkaldes af]
ontolex:lexicalizedSense → sense instances [Danish: leksikaliseret betydning]
wn:similar → related but distinct concepts
PART-WHOLE RELATIONS:
wn:mero_part/wn:holo_part → component relationships [English: meronym/holonym part]
wn:mero_substance/wn:holo_substance → material composition
wn:mero_member/wn:holo_member → membership relations
SEMANTIC PROPERTIES:
dns:ontologicalType → semantic classification with @set array of dnc: types Common types: dnc:Animal, dnc:Human, dnc:Object, dnc:Physical, dnc:Dynamic (events/actions), dnc:Static (states)
dns:sentiment → emotional polarity with marl:hasPolarity and marl:polarityValue
wn:lexfile → semantic domain (e.g., "noun.food", "verb.motion")
skos:definition → synset definition (may be truncated for length)
CROSS-LINGUISTIC:
wn:ili → Interlingual Index for cross-language mapping
wn:eq_synonym → Open English WordNet equivalent
DDO CONNECTION FOR FULLER DEFINITIONS: DanNet synset definitions (skos:definition) may be truncated (ending with "…"). For complete definitions, use the fetch_ddo_definition() tool which automatically retrieves full DDO text, or manually examine sense source URLs via get_sense_info().
NAVIGATION TIPS:
Follow wn:hypernym chains to find semantic categories
Check dns:inherited for properties from parent synsets
Use parse_resource_id() on URI references to get clean IDs
For fuller definitions, examine individual sense source URLs via get_sense_info()
Args: synset_id: Synset identifier (e.g., "synset-1876" or just "1876")
Returns: Dict containing JSON-LD format with: - @context → namespace mappings - @id → entity identifier (e.g., "dn:synset-1876") - @type → "ontolex:LexicalConcept" - All RDF properties with namespace prefixes (e.g., wn:hypernym) - dns:ontologicalType → {"@set": ["dnc:Animal", ...]} (if applicable) - dns:sentiment → {"marl:hasPolarity": "marl:Positive", "marl:polarityValue": "3"} (if applicable) - synset_id → clean identifier for convenience
Example: info = get_synset_info("synset-52") # cake synset # Check info['wn:hypernym'] for parent concepts # Check info['dns:ontologicalType']['@set'] for semantic types # Check info['dns:sentiment']['marl:hasPolarity'] for sentiment
| Name | Required | Description | Default |
|---|---|---|---|
| synset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It discloses important behaviors: skos:definition may be truncated, dns:ontologicalType is an @set array, dns:sentiment has specific structure, and return format is JSON-LD with namespace prefixes. It also notes that parse_resource_id() can be used on URI references. This is comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is quite long, but it is excellently structured with clear sections (DATA MODEL, KEY RELATIONSHIPS, DDO CONNECTION, NAVIGATION TIPS, Returns, Example). Each section adds value for a complex tool. However, it could be slightly trimmed; the relationship list is detailed enough to be a separate reference document, making it less concise than an ideal tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (RDF data model, multiple relationship types, cross-linguistic links), the description is remarkably complete. It covers the data model, parameter format, return structure, example usage, and pointers to related tools. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only shows 'synset_id' as a string. The description adds crucial semantics: examples ('synset-1876' or '1876') and explains it's a synset identifier. Since schema coverage is 0%, this compensation is essential and well-executed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource statement: 'Get comprehensive RDF data for a DanNet synset (lexical concept).' This distinguishes it from sibling tools like get_sense_info, get_word_info, and get_entity_info by focusing on synset-level RDF data. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool versus alternatives. It advises to use fetch_ddo_definition() and get_sense_info() for fuller definitions, and provides navigation tips for following hypernym chains and checking inherited properties. This clearly differentiates usage from related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_word_infoAInspect
Get comprehensive RDF data for a DanNet word (lexical entry).
UNDERSTANDING THE DATA MODEL: Words are ontolex:LexicalEntry instances representing lexical forms. They connect to synsets via senses and have morphological information.
KEY RELATIONSHIPS:
LEXICAL CONNECTIONS:
ontolex:evokes → synsets this word can express
ontolex:sense → sense instances connecting word to synsets
ontolex:canonicalForm → canonical form with written representation
MORPHOLOGICAL PROPERTIES:
lexinfo:partOfSpeech → part of speech classification
wn:partOfSpeech → WordNet part of speech
ontolex:canonicalForm/ontolex:writtenRep → written form
CROSS-REFERENCES:
owl:sameAs → equivalent resources in other datasets
dns:source → source URL for this word entry
NAVIGATION TIPS:
Follow ontolex:evokes to find synsets this word expresses
Check ontolex:sense for detailed sense information
Use parse_resource_id() on URI references to get clean IDs
Args: word_id: Word identifier (e.g., "word-11021628" or just "11021628")
Returns: Dict containing: - All RDF properties with namespace prefixes (e.g., ontolex:evokes) - resource_id → clean identifier for convenience - All linguistic properties and relationships
Example: info = get_word_info("word-11021628") # "hund" word # Check info['ontolex:evokes'] for synsets this word can express # Check info['ontolex:sense'] for senses
| Name | Required | Description | Default |
|---|---|---|---|
| word_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly explains the output structure (all RDF properties, resource_id), provides navigation tips, and gives an example, making the tool's behavior clear. However, it does not discuss error handling, invalid word IDs, or any limitations, so it is not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and then uses clear sections to detail the data model, relationships, navigation tips, arguments, and returns. While somewhat lengthy, the structure and educational content serve a purpose for handling complex RDF data, and every section adds value for correct usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool returning complex RDF data with a single parameter and no annotations, the description is exceptionally complete. It covers the data model, key relationships, how to interpret the output, and even provides an example with expected keys. The presence of a return type and example further enhances completeness, making it sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines word_id as a string with no additional description. The description compensates fully by explaining the format with examples ('word-11021628' or just '11021628'), and the example usage demonstrates the accepted value. This adds significant meaning beyond the schema, making the parameter unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get comprehensive RDF data for a DanNet word (lexical entry).' It clearly differentiates from sibling tools like get_word_overview and get_sense_info by emphasizing comprehensive RDF data and detailing the data model, making the tool's unique purpose evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage scenarios through phrases like 'comprehensive RDF data' and navigation tips, but it does not explicitly state when to use this tool over alternatives such as get_word_overview or get_word_synsets. There is no mention of exclusions or when-not-to-use, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_word_overviewAInspect
Get a complete overview of all senses for a Danish word in a single call.
Replaces the common pattern of calling get_word_synsets → get_synset_info per result → get_word_synonyms, collapsing 5-15 HTTP round-trips into one SPARQL query.
Only returns synsets where the word is a primary lexical member (i.e. the word itself has a direct sense in the synset), excluding multi-word expressions that merely contain the word as a component.
Args: word: The Danish word to look up
Returns: List of dicts, one per synset, each containing: - synset_id: Clean synset identifier (e.g. "synset-3047") - label: Human-readable synset label - definition: Synset definition (may be truncated with "…") - ontological_types: List of dnc: type URIs - synonyms: List of co-member lemmas (true synonyms only) - hypernym: Dict with synset_id and label of the immediate broader concept, or null - lexfile: WordNet lexicographer file name (e.g. "noun.animal"), or null if absent
Example: overview = get_word_overview("hund") # Returns list of 4 synsets, the first being: # {"synset_id": "synset-3047", # "label": "{hund_1§1; køter_§1; vovhund_§1; vovse_§1}", # "definition": "pattedyr som har god lugtesans ...", # "ontological_types": ["dnc:Animal", "dnc:Object"], # "synonyms": ["køter", "vovhund", "vovse"], # "lexfile": "noun.animal"}
# Pass synset_id to get_synset_info() for full JSON-LD data on any result:
# full_data = get_synset_info(overview[0]["synset_id"])
| Name | Required | Description | Default |
|---|---|---|---|
| word | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the tool returns only synsets where the word is a primary lexical member, excludes multi-word expressions, may truncate definitions, may return null for lexfile, and lists the exact structure of each returned dict. This is comprehensive for a read-only lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with a clear summary first, then behavioral details, then return structure, then a concrete example. Every sentence contributes meaning; the example output and follow-up hint to get_synset_info() are valuable. It is long but perfectly scoped for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is contextually complete: it explains the tool's purpose, relationship to siblings, exact return format, example values, and how to chain into full synset data. The output schema (if present) is not shown, but the detailed 'Returns' section makes the tool usable without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (word) with no enum or richer description, and the structured schema coverage is 0%. The description adds 'The Danish word to look up' and a concrete usage example ('hund'), which clarifies the parameter's meaning. However, it does not specify behavior for empty input, case sensitivity, or words not found in the lexicon, leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action: 'Get a complete overview of all senses for a Danish word in a single call.' It clearly names the resource (Danish word senses) and distinguishes itself from the sibling tools get_word_synsets, get_synset_info, and get_word_synonyms by explicitly explaining it replaces the multi-call pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly describes when to use this tool: 'Replaces the common pattern of calling get_word_synsets → get_synset_info per result → get_word_synonyms.' It also explains the exclusion of multi-word expressions and directs users to get_synset_info() for full JSON-LD data, effectively differentiating from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_word_synonymsAInspect
Find synonyms for a Danish word through shared synsets (word senses).
SYNONYM TYPES IN DANNET:
True synonyms: Words sharing the exact same synset
Context-specific: Different synonyms for different word senses Note: Near-synonyms via wn:similar relations are not currently included
The function returns all words that share synsets with the input word, effectively finding lexical alternatives that express the same concepts.
Args: word: The Danish word to find synonyms for
Returns: Comma-separated string of synonymous words (aggregated across all word senses)
Example: synonyms = get_word_synonyms("hund") # Returns: "køter, vovhund, vovse"
Note: Check synset definitions to understand which synonyms apply to which meaning (polysemy is common in Danish).
| Name | Required | Description | Default |
|---|---|---|---|
| word | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that results are aggregated across word senses, returns a comma-separated string, and provides a concrete example. It also warns about polysemy and advises checking synset definitions, which adds useful behavioral context beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an initial summary, bulleted synonym types, and labeled Args/Returns sections. It earns its length by providing example and usage nuance, though a few sentences (e.g., the third paragraph) slightly restate the purpose. Minor redundancy but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is thorough: it explains the mechanism, limitations, return format, and includes an example and a polysemy note. It mentions a return type (comma-separated string) and offers practical guidance, making it complete despite the absence of explicit annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explicitly documents the 'word' parameter as 'The Danish word to find synonyms for' and gives an example ('hund'). This fully compensates for the missing schema description, making the parameter's meaning unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Find synonyms for a Danish word through shared synsets,' which clearly states the specific action, resource, and mechanism. It further distinguishes itself from sibling tools like get_word_synsets by explaining that it returns the synonym words themselves, not the synset structures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies usage for finding lexical alternatives in Danish, and provides an example. However, it does not explicitly mention when not to use this tool or name alternative tools, missing a clear exclusion. The note about near-synonyms not being included is a limitation but not a direct comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_word_synsetsAInspect
Get synsets (word meanings) for a Danish word, returning a sorted list of lexical concepts.
DanNet follows the OntoLex-Lemon model where:
Words (ontolex:LexicalEntry) evoke concepts through senses
Synsets (ontolex:LexicalConcept) represent units of meaning
Multiple words can share the same synset (synonyms)
One word can have multiple synsets (polysemy)
This function returns all synsets associated with a word, effectively giving you all the different meanings/senses that word can have. Each synset represents a distinct semantic concept with its own definition and semantic relationships.
Common patterns in Danish:
Nouns often have multiple senses (e.g., "kage" = cake/lump)
Verbs distinguish motion vs. state (e.g., "løbe" = run/flow)
Check synset's dns:ontologicalType for semantic classification
DDO CONNECTION AND SYNSET LABELS: Synset labels are compositions of DDO-derived sense labels, showing all words that express the same meaning. For example:
"{hund_1§1; køter_§1; vovhund_§1; vovse_§1}" = all words meaning "domestic dog"
"{forlygte_§2; babs_§1; bryst_§2; patte_1§1a}" = all words meaning "female breast"
Each individual sense label follows DDO structure:
"hund_1§1" = word "hund", entry 1, definition 1 in DDO (ordnet.dk)
"patte_1§1a" = word "patte", entry 1, definition 1, subdefinition a
The § notation connects directly to DDO's definition numbering system
This composition reveals the semantic relationships between Danish words and their shared meanings, all traceable back to authoritative DDO lexicographic data.
RETURN BEHAVIOR: This function has two possible return modes depending on search results:
MULTIPLE RESULTS: Returns List[SearchResult] with basic information for each synset
SINGLE RESULT (redirect): Returns full synset data Dict when DanNet automatically redirects to a single synset. This provides immediate access to all semantic relationships, ontological types, sentiment data, and other rich information without requiring a separate get_synset_info() call.
The single-result case is equivalent to calling get_synset_info() on the synset, providing the same comprehensive RDF data structure with all semantic relations.
Args: query: The Danish word or phrase to search for
language: Language for labels and definitions in results (default: "da" for Danish, "en" for English when available)
Note: Only Danish words can be searched regardless of this parameterReturns: MULTIPLE RESULTS: List of SearchResult objects with: - word: The lexical form - synset_id: Unique synset identifier (format: synset-NNNNN) - label: Human-readable synset label (e.g., "{kage_1§1}") - definition: Brief semantic definition (may be truncated with "...")
SINGLE RESULT: Dict with complete synset data including:
- All RDF properties with namespace prefixes (e.g., wn:hypernym)
- dns:ontologicalType → semantic types with @set array
- dns:sentiment → parsed sentiment (if present)
- synset_id → clean identifier for convenience
- All semantic relationships and linguistic propertiesExamples: # Multiple results case results = get_word_synsets("hund") # Returns list of search result dictionaries for all meanings of "hund" # => [{"word": "hund", "synset_id": "synset-3047", ...}, ...]
# Single result case (redirect)
result = get_word_synsets("svinkeærinde")
# Returns complete synset data for unique word
# => {'wn:hypernym': 'dn:synset-11677', 'dns:sentiment': {...}, ...}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| language | No | da |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it explains two return modes (multiple results vs single-result redirect), the DDO-derived label composition, language parameter limitations, truncated definitions, and the exact structure of returned data. It even provides examples of both return cases. This goes well beyond a minimal description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with headings (DDO CONNECTION, RETURN BEHAVIOR, Args, Returns, Examples). The front-loaded purpose makes it easy to grasp. While some sections (e.g., DDO label composition) are very detailed, they are relevant to interpreting results. It earns its length due to the tool's complexity, though a slightly tighter edit would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool handles two distinct return modes and an ontology model, the description covers all aspects: return types, semantic relationships, language constraints, and even how to interpret labels. It includes practical examples. No output schema was provided, so the detailed Returns section is essential and thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden. It explains 'query' as 'The Danish word or phrase to search for' and 'language' as controlling labels/definitions with a default of 'da' and availability of 'en'. It explicitly states only Danish words can be searched. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Get synsets (word meanings) for a Danish word, returning a sorted list of lexical concepts.' It clearly distinguishes from sibling tools like get_word_synonyms by focusing on synsets (meanings) rather than synonyms. It also differentiates from get_synset_info by explaining the two return modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: 'This function returns all synsets associated with a word, effectively giving you all the different meanings/senses that word can have.' It also notes the single-result redirect case is equivalent to calling get_synset_info(). However, it does not explicitly list alternatives or exclusions, leaving some ambiguity among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sparql_queryAInspect
Execute a SPARQL SELECT query against the DanNet triplestore.
This tool provides direct access to DanNet's RDF data through SPARQL queries. The query is automatically prepended with common namespace prefix declarations, so you can use short prefixes instead of full URIs in your queries.
============================================================ CRITICAL PERFORMANCE RULES (read before writing any query):
ALWAYS start from a known entity URI or a word lookup — never scan the whole graph. FAST: dn:synset-3047 wn:hypernym ?x . SLOW: ?x wn:hypernym ?y . (scans every synset)
ALWAYS use DISTINCT for SELECT queries to avoid duplicate rows.
NEVER use FILTER(CONTAINS(...)) on labels across the whole graph. SLOW: ?s rdfs:label ?l . FILTER(CONTAINS(?l, "hund")) FAST: Use get_word_synsets("hund") first, then query specific synset URIs.
NEVER create cartesian products — every triple pattern must share a variable with at least one other pattern. SLOW: ?x a ontolex:LexicalConcept . ?y a ontolex:LexicalEntry . (cross join!)
ALWAYS add LIMIT (even if max_results caps it server-side, explicit LIMIT lets the query engine optimize).
Use property paths for multi-hop traversals: FAST: dn:synset-3047 wn:hypernym+ ?ancestor . (transitive closure) FAST: ?entry ontolex:canonicalForm/ontolex:writtenRep "hund"@da . (path)
Prefer VALUES over FILTER for matching multiple known entities: FAST: VALUES ?synset { dn:synset-3047 dn:synset-3048 } ?synset rdfs:label ?l . SLOW: ?synset rdfs:label ?l . FILTER(?synset = dn:synset-3047 || ?synset = dn:synset-3048)
The triplestore contains BOTH DanNet (Danish, dn: namespace) AND the Open English WordNet (en: namespace). Unanchored queries will scan both. To restrict to Danish data, anchor on dn: URIs or use @da language tags.
============================================ FAST QUERY TEMPLATES (copy and adapt these):
TEMPLATE 1: Find synsets for a Danish word (via word lookup)
SELECT DISTINCT ?synset ?label ?def WHERE { ?entry ontolex:canonicalForm/ontolex:writtenRep "WORD"@da . ?entry ontolex:sense/ontolex:isLexicalizedSenseOf ?synset . ?synset rdfs:label ?label . OPTIONAL { ?synset skos:definition ?def } }
TEMPLATE 2: Get all properties of a known synset
SELECT ?p ?o WHERE { dn:synset-NNNN ?p ?o . } LIMIT 50
TEMPLATE 3: Find hypernyms (broader concepts) of a known synset
SELECT DISTINCT ?hypernym ?label WHERE { dn:synset-NNNN wn:hypernym ?hypernym . ?hypernym rdfs:label ?label . }
TEMPLATE 4: Find hyponyms (narrower concepts) of a known synset
SELECT DISTINCT ?hyponym ?label WHERE { ?hyponym wn:hypernym dn:synset-NNNN . ?hyponym rdfs:label ?label . }
TEMPLATE 5: Trace full hypernym chain (taxonomic ancestors)
SELECT DISTINCT ?ancestor ?label WHERE { dn:synset-NNNN wn:hypernym+ ?ancestor . ?ancestor rdfs:label ?label . }
TEMPLATE 6: Find all relationships OF a known synset
SELECT DISTINCT ?rel ?target ?targetLabel WHERE { dn:synset-NNNN ?rel ?target . ?target rdfs:label ?targetLabel . FILTER(isURI(?target)) } LIMIT 50
TEMPLATE 7: Find all relationships TO a known synset
SELECT DISTINCT ?source ?rel ?sourceLabel WHERE { ?source ?rel dn:synset-NNNN . ?source rdfs:label ?sourceLabel . FILTER(isURI(?source)) } LIMIT 50
TEMPLATE 8: Query multiple known synsets at once
SELECT DISTINCT ?synset ?label ?def WHERE { VALUES ?synset { dn:synset-3047 dn:synset-3048 dn:synset-6524 } ?synset rdfs:label ?label . OPTIONAL { ?synset skos:definition ?def } }
TEMPLATE 9: Find functional relations for a specific synset
SELECT DISTINCT ?rel ?target ?targetLabel WHERE { dn:synset-NNNN ?rel ?target . ?target rdfs:label ?targetLabel . VALUES ?rel { dns:usedFor dns:usedForObject wn:agent wn:instrument wn:causes } }
TEMPLATE 10: Find ontological type of a synset (stored as RDF Bag)
SELECT ?type WHERE { dn:synset-NNNN dns:ontologicalType ?bag . ?bag ?pos ?type . FILTER(STRSTARTS(STR(?pos), STR(rdf:_))) }
TEMPLATE 11: Rank synsets by taxonomic similarity to a known synset
The custom dnf:path / dnf:lch / dnf:wup functions score how close two
synsets sit in the wn:hypernym hierarchy; higher = more similar, and a
synset scores 1.0 against itself. All three take two synsets and return a
double. They only compare synsets of the same part of speech and language,
so cross-POS or Danish/English pairs come back unbound (dnf:path returns 0
for unrelated pairs). Independent of the inference mode.
SELECT ?synset ?score WHERE { ?synset a ontolex:LexicalConcept . FILTER(STRSTARTS(STR(?synset), STR(dn:))) BIND(dnf:wup(dn:synset-NNNN, ?synset) AS ?score) } ORDER BY DESC(?score)
============================================ KNOWN PREFIXES (automatically declared):
dn: (DanNet data), dns: (DanNet schema), dnc: (DanNet concepts), wn: (WordNet relations), ontolex: (lexical model), skos: (definitions), rdfs: (labels), rdf: (types), owl: (ontology), lexinfo: (morphology), marl: (sentiment), dc: (metadata), ili: (interlingual index), en: (English WordNet), enl: (English lemmas), cor: (Danish register), dnf: (custom similarity functions: dnf:path, dnf:lch, dnf:wup)
Args: query: SPARQL SELECT query string (prefixes will be automatically added) timeout: Query timeout in milliseconds (default: 8000, max: 15000) max_results: Maximum number of results to return (default: 100, max: 100) distinct: Auto-apply DISTINCT to SELECT queries (default: True). Set to False when you need duplicate rows, e.g. for frequency counts. inference: Control model selection for query execution (default: None). None = auto-detect: tries base model first, retries with inference if SELECT results are empty (best for most queries). True = force inference model: needed for inverse relations like wn:hyponym, wn:holonym, etc. that are derived by OWL reasoning. False = force base model only, no retry.
Returns: Dict containing SPARQL results in standard JSON format: - head: Query metadata with variable names - results: Bindings array with variable-value mappings Each value includes type (uri/literal) and language information when applicable
Note: Only SELECT queries are supported. The query is validated before execution.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| timeout | No | ||
| distinct | No | ||
| inference | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it excels. It discloses automatic prefix declaration, query validation, auto-retry with inference when results are empty, the fact that both DanNet and English WordNet are scanned if queries are unanchored, and the behavior of the custom dnf: similarity functions. It also explains performance implications, making the tool's operational characteristics clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but exceptionally well-structured: purpose, critical rules, fast templates, known prefixes, args, returns. It is front-loaded with the most important 'CRITICAL PERFORMANCE RULES' that prevent costly mistakes. The 11 query templates are directly reusable. Every section earns its place, and the formatting makes it scannable despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is remarkably complete. It covers performance constraints, naming conventions, namespace prefixes, inference modes, return format, and validation. The presence of an output schema reduces the need to detail return values, yet the description still includes a helpful summary. For an agent invoking a SPARQL endpoint, this provides all necessary context to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. The 'Args:' section thoroughly explains all five parameters: query, timeout (with default and max), max_results (with default and max), distinct (with use case for disabling), and inference (explaining None/True/False and when to use each). This is far beyond mere schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Execute a SPARQL SELECT query against the DanNet triplestore.' It clearly identifies this as the generic, direct-access query tool, distinguishing it from the specialized sibling lookup tools like get_word_synsets and get_synset_info. Its scope is further narrowed by stating 'Only SELECT queries are supported.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'CRITICAL PERFORMANCE RULES' section provides explicit when-to-use guidance, including direct alternatives: 'Use get_word_synsets("hund") first, then query specific synset URIs.' It also tells when to use certain query patterns (e.g., use VALUES over FILTER, use property paths) and what to avoid (whole-graph scans, cartesian products). This is concrete, actionable guidance that an agent can follow to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switch_dannet_serverAInspect
Switch between local and remote DanNet servers on the fly.
This tool allows you to change the DanNet server endpoint during runtime without restarting the MCP server. Useful for switching between development (local) and production (remote) servers.
Args: server: Server to switch to. Options: - "local": Use localhost:3456 (development server) - "remote": Use wordnet.dk (production server) - Custom URL: Any valid URL starting with http:// or https://
Returns: Dict with status information: - status: "success" or "error" - message: Description of the operation - previous_url: The URL that was previously active - current_url: The URL that is now active
Example: # Switch to local development server result = switch_dannet_server("local")
# Switch to production server
result = switch_dannet_server("remote")
# Switch to custom server
result = switch_dannet_server("https://my-custom-dannet.example.com")
| Name | Required | Description | Default |
|---|---|---|---|
| server | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and provides good disclosure: it changes runtime endpoint, accepts local/remote/custom URL with validation (must start with http:// or https://), and returns a status dict with previous/current URLs. It doesn't mention side effects on ongoing requests or persistence, but for a config switch it's adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with Args, Returns, and Example sections; slightly redundant first two sentences but still focused and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with a simple output, the description is comprehensive: explains the parameter options, return structure, and usage scenario. The included examples further clarify expected behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for the 'server' parameter, and the description fully compensates by detailing the allowed values ('local' maps to localhost:3456, 'remote' to wordnet.dk) and custom URL format with examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Switch between local and remote DanNet servers on the fly,' a specific verb+resource+scope statement. It clearly distinguishes from sibling tools like get_current_dannet_server by indicating this tool changes the endpoint rather than reads it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states it's 'useful for switching between development (local) and production (remote) servers' and emphasizes 'without restarting the MCP server,' giving clear context. However, it does not explicitly name alternative tools or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_synset_structureAInspect
Validate and analyze the structure of synset JSON-LD data.
This enhanced tool helps debug and understand synset data structure, providing validation and insights into the JSON-LD format.
Args: synset_data: Synset data returned from get_synset_info()
Returns: Dict with validation results and structural analysis
| Name | Required | Description | Default |
|---|---|---|---|
| synset_data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so description carries full burden. It mentions the tool validates and analyzes data and returns a dict with results, implying read-only behavior. However, it does not disclose error handling, side effects, or permissions, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose. The Args and Returns sections are clear and structured, but the second sentence 'This enhanced tool helps debug...' is somewhat redundant with the first, adding mild fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the input source and the return type. It provides enough context for an agent to decide when to invoke it. It lacks explicit side-effect disclosure, but given the tool's validation nature, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by explaining that synset_data is the return value from get_synset_info(), providing essential context for the single parameter. It adds meaning beyond the schema's bare object type, though not detailed structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates and analyzes synset JSON-LD data, with a specific verb and resource. It distinguishes itself from siblings like get_synset_info (which fetches data) by focusing on structural validation and analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Args section explicitly states that synset_data is the output from get_synset_info(), giving clear context on when to use this tool (after fetching synset data). However, it does not explicitly state when not to use it or mention alternative tools for validation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides seamless access to the ConceptNet semantic knowledge graph, enabling concept lookup, search, relationship discovery, and semantic similarity calculations across multiple languages.42GPL 3.0
- Alicense-qualityBmaintenanceEnables semantic retrieval and assembly of ICD-10-CM value sets from natural language descriptions for clinical cohort definitions.Apache 2.0
- Alicense-qualityCmaintenanceDanish government public procurement notices (keyless).9MIT
- Alicense-qualityCmaintenanceA local-first multilingual dictionary, thesaurus, translation, lexical-relations, semantic-neighbour, and English wordplay server for the Model Context Protocol (MCP). It operates fully offline with read-only query access and no data mutation while running.Apache 2.0