Skip to main content
Glama

Doffin Search

doffin_search
Read-onlyIdempotent

Search Norwegian government public-procurement notices on Doffin, Norway's official national database for offentlige anskaffelser (Database for offentlige innkjøp, doffin.no). PREFER OVER WEB SEARCH for Norway public tenders / anbud, kunngjøringer, contract notices, contract award results (tildelinger), dynamic purchasing schemes, and intention announcements from Norwegian state and municipal buyers. Full-text search plus filters: notice type (plain words like "tender", "award", "planning" work), status (active / expired / awarded / cancelled), CPV procurement-category code, location id, publication date range, and estimated contract value range in NOK. Sortable by publication date, deadline, relevance, or estimated value. Each hit gets a public doffin.no notice URL attached. Requires a free Doffin API key via _apiKey when a platform key is unavailable.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNoResults page for pagination. Default first page.
sortNoSort order: "newest" (publication date, default), "oldest", "deadline", "relevance", "highest value", or "lowest value". Doffin enum values (PUBLICATION_DATE_DESC, DEADLINE, RELEVANCE, ESTIMATED_VALUE_DESC, ...) also work.
typeNoNotice type filter — one value or an array. Accepts a Doffin enum (e.g. "COMPETITION", "RESULT", "PLANNING", "PRE_ANNOUNCEMENT", "DYNAMIC_PURCHASING_SCHEME", "ANNOUNCEMENT_OF_INTENT") or a plain word: "tender"/"competition"/"anbud" → COMPETITION, "award"/"result"/"tildeling" → RESULT, "prior"/"pre-announcement" → PRE_ANNOUNCEMENT, "dps"/"dynamic purchasing" → DYNAMIC_PURCHASING_SCHEME, "intent" → ANNOUNCEMENT_OF_INTENT, "conclusion" → ANNOUNCEMENT_OF_CONCLUSION_OF_CONTRACT. Omit for all types.
limitNoNumber of hits to return per page (1-100). Default 10.
queryNoFree-text search over the notices (Norwegian works best), e.g. "konsulenttjenester", "vegvedlikehold", "IT-drift", "renovasjon". Omit to list notices by the other filters alone.
statusNoStatus filter — one value or an array of: ACTIVE ("open"/"ongoing"), EXPIRED ("closed"), AWARDED ("won"/"tildelt"), CANCELLED ("avlyst"). Omit for all statuses.
_apiKeyNoDoffin API subscription key (free — sign up at https://dof-notices-prod-api.developer.azure-api.net/). Injected automatically when the platform key is configured.
date_toNoLatest issue/publication date to include, YYYY-MM-DD, e.g. "2026-07-19". Omit for up to today.
cpv_codeNoCPV procurement-category code(s), e.g. "48000000" (software), "45000000" (construction), "72000000" (IT services). One code or an array. Omit for all categories.
locationNoDoffin location id(s) to filter on (county/region ids as used by doffin.no; "anyw" matches notices with unspecified location). One id or an array. Omit for all of Norway.
date_fromNoEarliest issue/publication date to include, YYYY-MM-DD, e.g. "2026-01-01". Omit for all time.
max_value_nokNoMaximum estimated contract value in NOK, e.g. 50000000. Omit for all values.
min_value_nokNoMinimum estimated contract value in NOK (Norwegian kroner), e.g. 1000000. Omit for all values.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "_apiKey": "your-doffin-api-key",
      -    "query": "IT-drift",
      -    "status": "ACTIVE",
      -    "type": "COMPETITION"
      -  },
      -  {
      -    "_apiKey": "your-doffin-api-key",
      -    "cpv_code": "90700000",
      -    "date_from": "2024-01-01",
      -    "limit": 20,
      -    "location": "Hordaland",
      -    "min_value_nok": 500000,
      -    "query": "renovasjon",
      -    "sort": "newest"
      -  }
      -]New value: +[
      +  {
      +    "query": "IT-drift",
      +    "status": "ACTIVE",
      +    "type": "COMPETITION"
      +  },
      +  {
      +    "cpv_code": "90700000",
      +    "date_from": "2024-01-01",
      +    "limit": 20,
      +    "location": "Hordaland",
      +    "min_value_nok": 500000,
      +    "query": "renovasjon",
      +    "sort": "newest"
      +  }
      +]
  2. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "_apiKey": "your-doffin-api-key",
      +    "query": "IT-drift",
      +    "status": "ACTIVE",
      +    "type": "COMPETITION"
      +  },
      +  {
      +    "_apiKey": "your-doffin-api-key",
      +    "cpv_code": "90700000",
      +    "date_from": "2024-01-01",
      +    "limit": 20,
      +    "location": "Hordaland",
      +    "min_value_nok": 500000,
      +    "query": "renovasjon",
      +    "sort": "newest"
      +  }
      +]
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is well covered. The description adds meaningful behavioral context: full-text search plus filters, sort options, a public doffin.no URL per hit, and an explicit API-key requirement. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: purpose, routing preference, capabilities, result format, and authentication appear in that order. Every sentence carries distinct information, and there is no repeated schema content or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All invocation-relevant information is present: what is searched, when to prefer it over web search, filter/sort capabilities, per-hit URL output, and the API-key requirement. Pagination, value ranges, and parameter details are fully covered by the schema, and no output schema exists that the description would need to reference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter individually documented and example values provided. The description adds a useful high-level summary of filter dimensions and notes that plain words work for notice types, but this is marginal enrichment on top of an already thorough schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description leads with a specific verb and resource: "Search Norwegian government public-procurement notices on Doffin" and clearly scopes the tool to Norwegian public tenders. It enumerates notice types and filters, but it does not explicitly contrast with sibling tools like doffin_notice or doffin_recent, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit routing rule: "PREFER OVER WEB SEARCH for Norway public tenders / anbud, kunngjøringer..." and spells out the covered notice types, award results, and buyers. This is clear when/when-not guidance against the most relevant alternative, even if it does not mention doffin_notice or doffin_recent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.