finn-tannlege-mcp
Server Details
Norwegian dental clinic MCP: more than 4,500 clinics with Helfo, specialty and emergency care data.
- Status
- Healthy
- Uptime
- 98.3% over 65 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- slookisen/lokal
- GitHub Stars
- 2
- Server Listing
- lokal
TDQS
Scored across 5 tools
tannlege_info (single-record lookup by id/org_nr), tannlege_kjeder (chain list), and tannlege_stats (aggregate counts) are clearly distinct. The one fuzzy boundary is tannlege_akutt versus tannlege_search, since search also returns emergency dentists, but akutt's narrower emergency-only focus is spelled out in its description.
All five tools follow the same tannlege_<noun/verb> snake_case pattern (akutt, info, kjeder, search, stats). The convention is uniform and predictable, with no mixed casing or verb/noun drift.
Five tools is a lean but sensible set for a read-only dental-clinic directory covering find, detail, chains, emergency, and stats. Slightly thin, but each tool maps to a distinct query intent rather than being redundant filler.
The surface covers the main directory workflows: search, single-record detail, chain listing, emergency lookup, and aggregate statistics. As a read-only registry it reasonably omits create/update/delete, though it lacks any way to browse all clinics/paginate or explore related entities beyond chains.
Available Tools
5 toolstannlege_akuttFind dental clinics for emergency care in NorwayARead-onlyIdempotentInspect
Find an emergency dentist (akutt tannlege) in Norway: dental clinics that say they take emergency patients, optionally in one county (fylke). Each clinic's akutt is "vakt" only when its emergency duty has a stored quote from the source (badge «Akuttvakt»), and "accepts" when the clinic says it takes emergency patients («Tar imot akuttpasienter»). count is the number of matching clinics. Each clinic has its address, phone and profile URL, and when known its opening hours and online booking link. The response also has advice on the municipal out-of-hours dental service (kommunal tannlegevakt).
| Name | Required | Description | Default |
|---|---|---|---|
| fylke | No | Limit to clinics in this county. Examples: 'Oslo', 'Vestland' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld, but the description adds real behavioral value: it explains the two meanings of the `akutt` field ('vakt' only when a stored source quote exists, 'accepts' when the clinic self-declares), what `count` means, and that the response includes municipal out-of-hours advice. It does not discuss result limits or pagination.
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?
Purpose and scope are front-loaded in the first sentence, followed by the return-value explanation. It is dense but every clause carries information; the akutt-semantics sentence is long yet necessary given the ambiguity it resolves.
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?
With no output schema, the description carries the burden of describing returns, and it does so thoroughly: count, per-clinic address/phone/profile URL, opening hours and booking link, plus the extra out-of-hours advice field. Only pagination/result-limit behavior is left unspecified.
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?
Only one parameter with 100% schema description coverage, so the schema already documents `fylke` with examples. The description only repeats that the county filter is optional, adding no syntax or value-format detail beyond the schema; baseline 3 applies.
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?
States a specific verb (find) and resource (emergency dental clinics / akutt tannlege in Norway) with the optional county scope, so an agent can tell it apart from the generic tannlege_search. It does not explicitly name the sibling tools, so the differentiation is implicit rather than spelled out.
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 emergency-care framing implies when this tool applies, and the optional fylke parameter is described as an optional narrowing. There is no explicit when-to-use versus tannlege_search or the other tannlege_* siblings, and no exclusions or prerequisites, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tannlege_infoGet full details for a dental clinicARead-onlyIdempotentInspect
Get the full record of one dental clinic in Norway, a dentist (tannlege) or specialist practice, by organisation number (org_nr) or id. Returns name, address, phone, mobile, e-mail, website, online booking link, Helfo status, the emergency claim («Akuttvakt» only when an emergency duty has a stored quote from the source; «Tar imot akuttpasienter» when the clinic says it takes emergency patients), specialties, chain, specialists, treatments, opening hours, payment options, the clinic's own description and profile URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Clinic UUID (alternative to org_nr) | |
| org_nr | No | 9-digit Norwegian organisation number. Example: '912345678' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely useful context by enumerating the returned data and disclosing subtle source semantics (Akuttvakt vs Tar imot akuttpasienter). It stops short of noting auth or rate-limit behavior.
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 purpose clause is front-loaded and the second sentence earns its length by documenting the return payload in the absence of an output schema. The field enumeration is dense but not redundant.
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 two-param read tool with no output schema and readOnly annotations, the description covers both how to look up and what comes back. The only minor gap is that it does not state that at least one of id/org_nr is required.
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 100%, so the schema already documents id and org_nr fully. The description confirms they are alternative lookup keys but adds no format or syntax detail beyond the schema. Baseline 3 is appropriate.
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?
States a specific verb ("Get") and resource ("the full record of one dental clinic"), with the identifying keys named. It implicitly contrasts with the search sibling by returning "one" clinic, but never names an alternative explicitly.
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?
Usage is implied by the identifiers (call it when you have an org_nr or id for a single clinic), but there is no explicit when-to-use, when-not, or sibling routing. The agent must infer that tannlege_search is the tool for discovery and this one for retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tannlege_kjederList Norwegian dental chainsARead-onlyIdempotentInspect
List dentist chains (tannlegekjeder) in Norway that are registered in the directory, each with its number of clinic locations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful content context (directory-registered chains, each with clinic location counts), but says nothing about result size, ordering, or whether the list is 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?
A single front-loaded sentence with no filler. The verb, scope, and return content are all packed into one readable clause.
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 no-param, read-only list tool with annotations covering safety and no output schema, the description is nearly sufficient, summarizing that results are chains with location counts. It could note whether the full set is always returned, but nothing essential is missing.
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 takes zero parameters, so there are no parameter semantics to convey; the baseline for a parameterless tool is 4. The description correctly avoids implying any inputs.
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?
States a specific verb (List) and resource (dentist chains / tannlegekjeder) plus scope (Norway, registered in the directory). The resource name itself separates it from siblings like tannlege_search and tannlege_stats, but no sibling is named explicitly, so it stops short of a 5.
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?
Usage is implied: an agent can infer this is the catalog-listing tool for browsing chains, as opposed to tannlege_search or tannlege_info. However, there is no explicit when-to-use statement and no exclusions or alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tannlege_searchSearch Norwegian dental clinicsARead-onlyIdempotentInspect
Find a dentist (tannlege), orthodontist (kjeveortoped) or emergency dentist (akutt tannlege) in Norway by place, county (fylke), specialty, Helfo direct billing or emergency care. The request can go in query as written, such as 'kjeveortoped i Bergen med Helfo-avtale'; the response's tolkning shows how it was read, and count is the number of matching clinics. Each clinic has its name, address, postcode, place, county, phone, website, Helfo status, emergency status (akutt) and profile URL, and when known its online booking link, opening hours, specialties, chain and a price level that has a source.
| Name | Required | Description | Default |
|---|---|---|---|
| akutt | No | If true, only return clinics with an emergency claim: «Akuttvakt» backed by a stored source quote, or «Tar imot akuttpasienter». | |
| fylke | No | Norwegian county (fylke). Examples: 'Oslo', 'Vestland', 'Rogaland' | |
| helfo | No | If true, only return clinics with Helfo direct-billing agreement | |
| limit | No | Max results (default 10, max 25) | |
| query | No | Free-text search (name or city). Examples: 'Oslo tannklinikk', 'kjeveortoped Bergen' | |
| spesialitet | No | Specialty slug. Examples: 'kjeveortopedi', 'endodonti', 'periodonti' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so safety is covered. The description adds behavioral substance the annotations don't: the response echoes the interpretation via `tolkning`, `count` gives the match total, and price levels are qualified as having a source — useful trust context about result provenance.
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?
Purpose is front-loaded in the first sentence, then the invocation hint and return shape follow. The second sentence is long and list-heavy, but every clause carries information; no filler or repetition.
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?
With no output schema and 6 optional params, the description compensates by describing the response envelope (tolkning, count) and per-clinic fields including conditional ones ('when known its online booking link...'). Reasonably complete, though it omits paging/limit behavior and makes no routing statement to the four siblings.
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 100%, so the baseline is 3, but the description adds meaning the schema lacks: `query` is not just 'name or city' as the schema says, it can carry a combined natural-language request including specialty and Helfo constraints ('kjeveortoped i Bergen med Helfo-avtale'). That clarifies real query semantics beyond the per-field docs.
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?
States a concrete verb+resource ('Find a dentist/orthodontist/emergency dentist in Norway') and enumerates the filterable axes (place, county, specialty, Helfo, emergency). It goes beyond a bare restatement by naming the domain vocabulary (tannlege, kjeveortoped, akutt tannlege, Helfo) an agent can match against user phrasing.
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 gives a useful invocation hint ('the request can go in query as written, such as ...'), which is real usage guidance, but it never states when to prefer this tool over siblings like tannlege_akutt (emergency-specific) or tannlege_kjeder (chains), even though it overlaps with both.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tannlege_statsNorwegian dental market statisticsARead-onlyIdempotentInspect
Counts of dentist practices (tannlegeklinikker) in Norway: the total, per county (fylke), and how many have Helfo direct billing, belong to a chain, show an emergency claim (akutt) or list a specialist. An emergency claim is «Akuttvakt», an emergency duty backed by a stored quote from the source, or «Tar imot akuttpasienter», that the clinic says it takes emergency patients.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and a closed world, so the safety profile is covered. The description adds real domain context beyond that: it defines what an 'emergency claim' actually means (an «Akuttvakt» duty backed by a stored source quote, or a clinic self-declaring «Tar imot akuttpasienter»), which an agent cannot get from the annotations.
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?
Front-loaded with the resource and the count dimensions in the first sentence, with the definitional nuance relegated to a second sentence. Both sentences earn their place and there is no filler.
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?
With no output schema and no parameters, the description carries the burden of telling the agent what comes back, and it does so at the level of content (total, per county, and category counts). It does not specify the response shape or field names, which is a minor remaining gap for a no-schema tool.
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?
There are zero input parameters, so the baseline is 4; there is nothing for the description to disambiguate. It correctly makes no attempt to describe parameters.
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 states a specific verb and resource ('Counts of dentist practices (tannlegeklinikker) in Norway') and enumerates the exact breakdowns it returns: total, per county, Helfo direct billing, chain membership, emergency claim, specialist. That is far more specific than the title. It does not explicitly name how it differs from siblings like tannlege_search, so it stops short of a 5.
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?
Usage is only implied: an agent can infer this is the aggregate/statistics view versus the search or listing siblings, but the description never says when to pick it over tannlege_search or tannlege_akutt. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
tannlege_search1 field changed- changed
Input schema / properties / akutt / descriptionPrevious value: -"If true, only return clinics with emergency-duty (akuttvakt)"New value: +"If true, only return clinics with an emergency claim: «Akuttvakt» backed by a stored source quote, or «Tar imot akuttpasienter»."
5 tool updates
- First observed
tannlege_akutt - First observed
tannlege_info - First observed
tannlege_kjeder - First observed
tannlege_search - First observed
tannlege_stats
Related MCP Connectors
Norwegian local-food MCP: 1,500+ farms, shops, markets + umbrellas (Bondens marked, Hanen, REKO).
Read-only MCP: US dental intel, all-category Medicaid fee schedules, dentist lookup. Free tier.
Sourced US and Canadian dental prices, Medicaid and Medicare dental rules, treatment-plan checker.
Keyless open data for 84 German cities: 12 lean read-only MCP tools covering 67 data types.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for querying the official registration records of the Regional Council of Dentistry of Amazonas (Brazil), offering a single read-only tool for consultation.MIT
- AlicenseNot gradedqualityBmaintenanceEnables dental clinic staff to manage appointments, verify patient affiliation, and track accounts receivable through MCP tools, with OAuth 2.1, per-tool scopes, and human approval required for every mutation.MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for querying official dental registration data from the Regional Council of Dentistry of Alagoas (Brazil). It provides a single tool to consult professional records via a hosted HTTP endpoint with prepaid credits.MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying the Regional Dental Council of Rio Grande do Sul (Brazil) professional registration database through a read-only MCP tool. Works with any MCP client via HTTP with prepaid credits.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.