Skip to main content
Glama
mcp-skatteetaten

mcp-skatteetaten

by bambinobino

mcp-skatteetaten

A comprehensive Model Context Protocol (MCP) server for Skatteetaten — the Norwegian Tax Administration.

Exposes 35+ tools covering all major Skatteetaten APIs so that LLM agents and AI assistants can query tax data, submit reports, look up population register information, validate VAT returns, and more — all authenticated via Maskinporten.


Covered APIs

API

Description

Inntekt

Employer-reported income (monthly/yearly)

Beregnet Skatt

Calculated tax: trinnskatt, trygdeavgift, fellesskatt

Summert Skattegrunnlag

Aggregated tax basis (income, assets, deductions)

Skattemelding

Tax return retrieval and validation

Restanse

Outstanding tax debts and arrears

Formuesobjekt Fast Eiendom

Property ownership and classification

Formuesgrunnlag Eiendomsskatt

Property value basis for property tax

Folkeregisteret

Population register: lookup, search, event feed

A-Melding

Wage/personnel reporting (replaces Altinn A02)

A-Melding Tilbakemelding

Feedback for submitted A-meldinger

MVA-Melding

VAT return validation

Skattekorttilarbeidsgiver

Tax deduction cards for employers

Krav og Betalinger

Claims and payment history (Fremtidens innkreving)

Tredjepartsopplysninger

Third-party data reporting (banks, brokers, etc.)


Related MCP server: goodvat

Prerequisites

  1. A Norwegian organisation with an organisation number

  2. Access to Maskinporten with a registered client and private key

  3. Rights packages (rettighetspakker) granted by Skatteetaten for the APIs you need

  4. Node.js 20+

Getting Access


Installation

npm install
npm run build

Configuration

Copy .env.example to .env and fill in your credentials:

cp .env.example .env

Variable

Required

Description

MASKINPORTEN_CLIENT_ID

Yes

Your Maskinporten client ID

MASKINPORTEN_PRIVATE_KEY_PATH

Yes*

Path to your RSA private key PEM file

MASKINPORTEN_PRIVATE_KEY_JWK

Yes*

Or provide the JWK as a JSON string

SKATTEETATEN_ENV

No

test (default) or production

MASKINPORTEN_ISSUER

No

Override Maskinporten issuer URL

MASKINPORTEN_TOKEN_ENDPOINT

No

Override token endpoint URL

FOLKEREGISTERET_AUTH_PACKAGE

No

offentlig-med-hjemmel (default), offentlig-uten-hjemmel, or privat

*Either MASKINPORTEN_PRIVATE_KEY_PATH or MASKINPORTEN_PRIVATE_KEY_JWK is required.


Usage

With Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "skatteetaten": {
      "command": "node",
      "args": ["/path/to/mcp-skatteetaten/dist/index.js"],
      "env": {
        "MASKINPORTEN_CLIENT_ID": "your-client-id",
        "MASKINPORTEN_PRIVATE_KEY_PATH": "/path/to/private-key.pem",
        "SKATTEETATEN_ENV": "test"
      }
    }
  }
}

With Claude Code

claude mcp add skatteetaten -- node /path/to/mcp-skatteetaten/dist/index.js

Or run directly:

MASKINPORTEN_CLIENT_ID=... MASKINPORTEN_PRIVATE_KEY_PATH=... npm start

Available Tools

Income (inntekt)

Tool

Description

get_inntekt

Income for a person in a specific month

get_inntekt_for_year

All income across 12 months for a year

Tax (skatt)

Tool

Description

get_beregnet_skatt

Calculated tax breakdown

get_summert_skattegrunnlag

Aggregated tax basis

get_skattemelding

Retrieve tax return document

validate_skattemelding

Validate a tax return XML

get_restanse

Outstanding tax debts

Property (eiendom)

Tool

Description

get_formuesobjekt_fast_eiendom

Property assets for a person

get_formuesgrunnlag_eiendomsskatt

Property value for tax purposes

Population Register (folkeregisteret)

Tool

Description

get_person_folkeregisteret

Full person record lookup

search_personer_folkeregisteret

Search by criteria

get_folkeregisteret_hendelser

Change event feed

get_folkeregisteret_current_sekvens

Current event feed position

Wage Reporting (amelding)

Tool

Description

submit_amelding

Submit monthly A-melding

get_amelding_status

Check submission status

get_amelding_tilbakemelding

Get feedback on submitted report

list_amelding_for_maaned

List submissions for a month

VAT (mva)

Tool

Description

validate_mva_melding_xml

Validate VAT return XML

validate_mva_melding_json

Validate VAT return JSON

get_mva_koder

List valid VAT codes

Tax Deduction Cards (skattekort)

Tool

Description

get_skattekort

Get deduction card for an employee

order_skattekort

Bulk order deduction cards

get_skattekort_ordre_status

Check order status

get_skattekort_resultat

Retrieve completed order results

Claims & Payments (krav-og-betalinger)

Tool

Description

get_krav

Outstanding claims

get_betalinger

Payment history

Third-Party Reporting (tredjepartsopplysninger)

Tool

Description

submit_tredjepartsopplysninger

Submit third-party data

get_tredjepartsopplysninger_status

Check submission status

get_tredjepartsopplysninger_oppgavetyper

List valid report types


Authentication

All APIs use Maskinporten for server-to-server OAuth2 authentication with enterprise certificates.

The client automatically:

  • Creates signed JWT grants using your RSA private key

  • Exchanges them for Maskinporten access tokens

  • Caches tokens until 30 seconds before expiry

  • Fetches per-scope tokens (different scopes for different APIs)

Test environment: https://test.maskinporten.no/ Production: https://maskinporten.no/


API Documentation


Development

# Run in development mode
npm run dev

# Type check
npm run typecheck

# Build
npm run build

License

MIT

Available Tools

52 tools
get_amelding_statusB

Check the status of a submitted A-melding by its innsendingId.

Inputs: innsendingId (required).

get_amelding_tilbakemeldingB

Get feedback (tilbakemelding) for a processed A-melding. Contains errors and deviations found by Skatteetaten.

Inputs: innsendingId (required).

get_arbeidsgiveravgiftA

Get employer social security contribution (arbeidsgiveravgift) rates by geographic zone. No authentication required.

Inputs: no named parameters.

get_avskrivningssatserA

Get depreciation rates (avskrivningssatser) for different classes of business assets (machinery, buildings, vehicles, etc.). No authentication required.

Inputs: no named parameters.

get_beregnet_skattB

Get calculated tax details for a person. Returns income, deductions, assets, debt, and final calculated tax (trinnskatt, trygdeavgift, fellesskatt, etc.).

Inputs: inntektsaar (required), rettighetspakke (required), norskIdentifikator (required), stadie.

get_betalingerB

Get payment history for a person or organisation.

Inputs: identifikator (required), fraDate, tilDate.

get_bilgodtgjorelseA

Get car mileage reimbursement rates (kilometergodtgjørelse / bilgodtgjørelse) — tax-free rates per km. No authentication required.

Inputs: no named parameters.

get_bsu_fradragA

Get BSU (Boligsparing for Ungdom) deduction limits — home savings scheme for young people. No authentication required.

Inputs: no named parameters.

get_fagforeningsfradragB

Get union membership deduction (fagforeningsfradrag) — maximum deductible union fee. No authentication required.

Inputs: no named parameters.

get_folkeregisteret_current_sekvensA

Get the current (latest) sequence number for the population register event feed.

Inputs: no named parameters.

get_folkeregisteret_hendelserA

Get population register change events (hendelsesliste). Use to track changes to person records.

Inputs: fraSekvens (required), antall.

get_formuesgrunnlag_eiendomsskattA

Get property value basis for property tax (eiendomsskatt). Returns market value and calculated tax basis.

Inputs: bruksnummer (required), inntektsaar (required), gaardsnummer (required), kommunenummer (required), +3 more.

get_formuesobjekt_fast_eiendomB

Get property assets (fast eiendom) for a person. Returns classification and ownership of real properties.

Inputs: inntektsaar (required), rettighetspakke (required), norskIdentifikator (required).

get_formuesskattA

Get formuesskatt (wealth tax) rates and net wealth thresholds. No authentication required.

Inputs: no named parameters.

get_frikortgrenseA

Get the frikortgrense — the income threshold below which no tax is withheld. Employees earning less than this get a frikort. No authentication required.

Inputs: no named parameters.

get_hjemmekontor_fradragA

Get rules and rates for the home office deduction (hjemmekontorfradrag). No authentication required.

Inputs: no named parameters.

get_inntektA

Get income information for a person in a given month. Returns employer-reported income, deductions, and withholding tax (forskuddstrekk).

Inputs: inntektsaar (required), inntektsmåned (required), rettighetspakke (required), norskIdentifikator (required).

get_inntekt_for_yearA

Get all income for a person across all 12 months in a given year. Aggregates monthly data.

Inputs: inntektsaar (required), rettighetspakke (required), norskIdentifikator (required).

get_kravC

Get outstanding tax claims (krav) for a person or organisation. Part of Fremtidens innkreving.

Inputs: identifikator (required), kravtype, kravStatus, forfallsdatoFra, +1 more.

get_minstefradragA

Get minstefradrag (standard employment deduction) rates and maximum amounts. Applied automatically to wage income. No authentication required.

Inputs: no named parameters.

get_mva_koderA

Get the list of valid VAT codes (MVA-koder) for reporting.

Inputs: no named parameters.

get_mva_satserA

Get Norwegian VAT (merverdiavgift) rates: standard 25%, reduced 15% (food), 12% (transport/hotel/culture). No authentication required.

Inputs: no named parameters.

get_person_folkeregisteretB

Look up a person in the Norwegian Population Register (Folkeregisteret). Returns name, birth date, address, civil status, citizenship, and more.

Inputs: norskIdentifikator (required), part.

get_personfradragA

Get personfradrag (personal allowance) — the standard deduction applied to all taxpayers before income tax is calculated. No authentication required.

Inputs: no named parameters.

get_reisefradragA

Get rules for commuter/travel deduction (reisefradrag / pendlerfradrag) — deduction for work travel above the minimum threshold. No authentication required.

Inputs: no named parameters.

get_rentefradragA

Get rules and limits for interest deduction (rentefradrag / gjeldsrentefradrag) on mortgage and other loans. No authentication required.

Inputs: no named parameters.

get_restanseA

Get outstanding tax debts (restanse) for a person. Returns unpaid claims held by Skatteetaten.

Inputs: rettighetspakke (required), norskIdentifikator (required).

get_selskapsskattA

Get corporate income tax (selskapsskatt) rates for limited companies and other entities. No authentication required.

Inputs: no named parameters.

get_skatteetaten_pageA

Fetch any public page from skatteetaten.no by its path. Use this for topics not covered by specific tools. No authentication required.

Inputs: path (required).

get_skatteetaten_renterA

Get Skatteetaten's current interest rates for underpayment, overpayment, and late payment of taxes. No authentication required.

Inputs: no named parameters.

get_skattefradrag_pensjonB

Get pension income tax credit (skattefradrag for pensjonsinntekt) amounts. No authentication required.

Inputs: no named parameters.

get_skattekortA

Get the tax deduction card (skattekort) for an employee. Returns table number, percentage rate, or frikort status.

Inputs: trekkaar (required), arbeidsgiveridentifikator (required), arbeidstakeridentifikator (required).

get_skattekort_ordre_statusB

Check the status of a skattekort order.

Inputs: ordreId (required).

get_skattekort_resultatA

Retrieve skattekort results for a completed order.

Inputs: ordreId (required).

get_skattemeldingA

Retrieve the tax return (skattemelding) for a person in a given year.

Inputs: inntektsaar (required), norskIdentifikator (required).

get_skattemelding_fristerA

Get tax return (skattemelding) deadlines and key dates for the tax year. No authentication required.

Inputs: no named parameters.

get_skattesatserA

Get current Norwegian tax rates from skatteetaten.no. Covers income tax, bracket tax (trinnskatt), and social security (trygdeavgift). No authentication required.

Inputs: no named parameters.

get_skattesatser_indexA

Get the full index of all rate pages on skatteetaten.no/satser/ — useful for discovering what topics are available. No authentication required.

Inputs: no named parameters.

get_summert_skattegrunnlagA

Get aggregated tax basis (summert skattegrunnlag) for a person. Returns total income, assets, and deductions without item-level detail.

Inputs: inntektsaar (required), rettighetspakke (required), norskIdentifikator (required), stadie.

get_tredjepartsopplysninger_oppgavetyperA

Get the list of valid oppgavetyper (report types) for third-party data reporting.

Inputs: no named parameters.

get_tredjepartsopplysninger_statusB

Check the processing status of a submitted tredjepartsopplysninger report.

Inputs: innsendingId (required).

get_trinnskatt_satserA

Get trinnskatt (bracket/step tax) rates and income thresholds for each bracket. No authentication required.

Inputs: no named parameters.

get_trygdeavgiftA

Get social security contribution (trygdeavgift) rates by income type (wage, self-employed, pension). No authentication required.

Inputs: no named parameters.

list_amelding_for_maanedA

List all A-meldinger submitted for a given calendar month.

Inputs: kalendermaaned (required), organisasjonsnummer (required).

order_skattekortB

Order tax deduction cards (skattekort) for multiple employees at once.

Inputs: requests (required), trekkaar (required).

search_personer_folkeregisteretB

Search for persons in the Population Register by criteria such as gender, birth date range, municipality, citizenship, or civil status.

Inputs: antall, kjoenn, status, sivilstand, +4 more.

search_skatteetatenA

Search skatteetaten.no for any tax-related topic. Returns content from the most relevant public page. No authentication required.

Inputs: query (required).

submit_ameldingA

Submit an A-melding (wage and personnel report) to Skatteetaten. Required for all employers monthly.

Inputs: amelding (required).

submit_tredjepartsopplysningerA

Submit third-party information (tredjepartsopplysninger) to Skatteetaten. Used by banks, insurance companies, and brokers to report taxpayer data.

Inputs: data (required).

validate_mva_melding_jsonB

Validate a VAT return (MVA-melding) provided as JSON. Returns validation result.

Inputs: melding (required).

validate_mva_melding_xmlA

Validate a VAT return (MVA-melding) XML document. Returns validation errors, warnings, and deviations.

Inputs: xmlContent (required), meldingstype (required).

validate_skattemeldingA

Validate a tax return XML document before submission. Returns errors, warnings, and deviations.

Inputs: xmlContent (required), inntektsaar (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 52 tools

    Disambiguation4/5

    Most tools have distinct purposes, but some near-overlaps exist: get_restanse and get_krav both relate to outstanding tax claims, and get_trinnskatt_satser overlaps with get_skattesatser. Descriptions are specific enough to guide selection, so agents are unlikely to misselect if they read carefully.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern using lowercase with underscores, primarily get_*, with a few action verbs like submit_, validate_, order_, search_, and list_. No mixing of conventions such as camelCase, so the naming is highly predictable.

    Tool Count1/5

    At 52 tools, this server is excessively large, exceeding the 50-tool threshold for an extreme mismatch. While the Norwegian tax domain is broad, this many tools creates navigation overhead and suggests unnecessary granularity; many rate/deduction tools could be consolidated.

    Completeness4/5

    The server covers a wide range of tax-related operations: fetching rates, retrieving income/tax data, submitting A-melding and third-party reports, managing skattekort, and accessing the population register. However, there are notable gaps, such as no tool to submit a skattemelding (only validate) and no update/delete operations for several entity types.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to interact with the Tripletex accounting API to manage time tracking, projects, and timesheet approvals through natural language. It also supports searching and managing outgoing invoices and processing supplier invoice approvals.
      31
      2
      ISC
    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.
      2
      8 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to interact with the Tripletex accounting system via 56 tools and 18 skills for orders, invoices, bookkeeping, reports, projects, and travel expenses.
      23
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants to read and write accounting data in PowerOffice Go, including bookkeeping, sales, purchases, payroll, time tracking, and read-only bank access, with support for multiple companies and strict isolation.
      MIT