Data source: Doffin (DFØ — Direktoratet for forvaltning og økonomistyring)
https://context.gnist.ai/mcp/doffin/
AuthenticationAll requests require a Gnist-API-Key header (or api_key query parameter).
Free tier: 100 calls/day. Get your API key.
Tools (4)
search_noticesSearch Norwegian public procurement notices on Doffin (doffin.no).
Doffin is Norway's national database for public procurement (offentlige anskaffelser).
Covers all Norwegian public tenders — both below and above EU/EEA threshold values.
Includes municipalities, county authorities, state agencies, and public enterprises.
At least one filter parameter is required. Combine filters to narrow results
(e.g. text='IKT' + location='NO03' for IT procurement in Oslo).
Returns:
Paginated list of procurement notices with heading, buyer, deadline, estimated
value, CPV codes, and Doffin URL. Use the notice ID with get_notice for
full details including buyer address, procedure type, and award information.
| Parameter | Type | Required | Description |
|---|---|---|---|
text | any | optional | Free text search across notice titles and descriptions (e.g. "IKT", "rådgivning", "konsulentbistand", "veibygging"). |
status | any | optional | Filter by notice status: 'ACTIVE' (open for bids), 'EXPIRED' (deadline passed), 'AWARDED' (contract awarded), 'CANCELLED'. |
notice_type | any | optional | Filter by notice type: 'COMPETITION' (open tender), 'RESULT' (award notice), 'PLANNING' (prior information), 'MODIFICATION', 'CORRIGENDUM'. |
cpv_code | any | optional | Filter by CPV (Common Procurement Vocabulary) code — 8-digit EU classification (e.g. '72000000' for IT services, '45000000' for construction). |
location | any | optional | Filter by Norwegian NUTS region code: 'NO03' (Oslo), 'NO08' (Vestland), 'NO0A' (Trøndelag), 'NO07' (Vestfold og Telemark), etc. |
page | integer | optional | Page number, 1-based (default 1). (default: 1) |
page_size | integer | optional | Results per page (1-50, default 20). (default: 20) |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "search_notices",
"arguments": {}
}
}get_noticeGet detailed information about a specific Doffin procurement notice.
Returns the full notice including buyer details (name, org number, address),
procedure type, competition documents URL, award information, and whether
the notice was also published on TED (EU procurement).
Returns:
Detailed notice with buyer, procedure, value, and award information.
Returns found=false if the notice ID is not found.
| Parameter | Type | Required | Description |
|---|---|---|---|
notice_id | string | required | Doffin notice ID in format YYYY-NNNNNN (e.g. "2026-105515"). Found in search results. |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_notice",
"arguments": {
"notice_id": "example"
}
}
}get_doffin_changesGet recent changes to Norwegian public procurement tenders from Doffin.
Returns field-level diffs (before/after values) for tenders whose data
changed between periodic snapshot cycles. The system monitors active,
awarded, and cancelled tenders every 6 hours.
Tracks: deadline changes, status transitions (active→awarded/cancelled),
estimated value updates, heading/description changes.
Args:
since: ISO 8601 timestamp — return changes captured after this time.
limit: Maximum number of changes to return (1–100, default 50).
Returns:
Object with count and list of change records, each containing
entity_id (notice ID), changed_at timestamp, and a list of
field changes with before/after values.
| Parameter | Type | Required | Description |
|---|---|---|---|
since | string | required | ISO 8601 timestamp — return changes captured after this time (e.g. "2026-04-01T00:00:00Z"). |
limit | integer | optional | Maximum number of changes to return (1–100, default 50). (default: 50) |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_doffin_changes",
"arguments": {
"since": "example"
}
}
}report_feedbackReport a bug, feature request, or general feedback for this data source.
Use this when something doesn't work as expected, when you'd like
a new feature, or when you have suggestions for improvement.
Args:
feedback: Describe the issue or suggestion.
feedback_type: One of 'bug', 'feature_request', or 'general'.
| Parameter | Type | Required | Description |
|---|---|---|---|
feedback | string | required | |
feedback_type | string | optional | (default: "general") |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "report_feedback",
"arguments": {
"feedback": "example"
}
}
}Quick Start
curl -X POST "https://context.gnist.ai/mcp/doffin/" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Gnist-API-Key: YOUR_API_KEY" \
-d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "get_notice", "arguments": {"notice_id": "example"}}}'
import httpx
resp = httpx.post(
"https://context.gnist.ai/mcp/doffin/",
headers={"Gnist-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json={
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_notice",
"arguments": {
"notice_id": "example"
}
}
},
)
print(resp.json())