Skip to main content
Glama

Fortnox MCP Server

A Model Context Protocol (MCP) server for exploring Fortnox API documentation. Provides 377 Fortnox API endpoints documentation from the official OpenAPI specification.

Overview

  • Documentation-only server - provides API endpoint information, doesn't make API calls

  • 377 Fortnox API endpoints from official OpenAPI 3.0 spec

  • 7 MCP tools for exploring API documentation

  • No authentication required - pure documentation browsing

  • AI-optimized responses with structured markdown formatting

Related MCP server: Apidog MCP Server

Installation

npm install -g fortnox-doc-mcp

Or use with npx:

npx fortnox-doc-mcp

Available Tools

  1. get_api_overview - Get API overview, statistics, and recommended workflow

  2. list_all_endpoints - Browse all Fortnox API endpoints (with optional filters)

  3. get_endpoint_details - Get full documentation for a specific endpoint

  4. get_endpoints_by_resource - Get all endpoints for a resource grouped by operation

  5. search_endpoints - Search endpoints by keyword

  6. list_resource_groups - List all 81 API resource categories

  7. get_schema_details - View data model schemas

Quick Start

For Claude Desktop

Add to your Claude Desktop config file:

Windows: %APPDATA%\Claude\claude_desktop_config.json
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "fortnox-docs": {
      "command": "npx",
      "args": ["-y", "fortnox-doc-mcp"]
    }
  }
}

Restart Claude Desktop to access the tools.

For Other MCP Clients

{
  "servers": {
    "fortnox-doc-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "fortnox-doc-mcp"]
    }
  }
}

Usage Examples

Once configured, you can ask AI assistants:

  • "Give me an overview of the Fortnox API" → Uses get_api_overview

  • "List all Fortnox customer endpoints" → Uses get_endpoints_by_resource

  • "Show me details for GET /3/customers" → Uses get_endpoint_details

  • "Search for invoice endpoints" → Uses search_endpoints

  • "What resource groups are available?" → Uses list_resource_groups

  • "Show me the Customer schema" → Uses get_schema_details

Development

From Source

# Clone repository
git clone https://github.com/yourusername/fortnox-doc-mcp.git
cd fortnox-doc-mcp

# Install dependencies
npm install

# Build
npm run build

# Test
npm test

Project Structure

fortnox-doc-mcp/
├── src/
│   ├── index.ts              # MCP server with 7 tools
│   ├── openapi-parser.ts     # OpenAPI spec parser
│   └── test-docs.ts          # Documentation test
├── openapi (1).json          # Fortnox OpenAPI specification
└── dist/                     # Compiled JavaScript

Technical Details

  • OpenAPI Version: 3.0.3

  • Endpoints: 377 Fortnox API endpoints

  • Resource Groups: 81 categories

  • Loading: Singleton pattern (loaded once into memory)

  • Performance: O(1) endpoint lookups, no external API calls

  • Node Version: 18+

FAQ

Q: Do I need a Fortnox API token?
A: No! This is a documentation server. No API credentials required.

Q: Can this make API calls to Fortnox?
A: No. It only provides documentation about endpoints from the OpenAPI spec.

Q: How do I use this with Claude Desktop?
A: Add the configuration to claude_desktop_config.json and restart Claude Desktop.

Q: Can I use this to build a Fortnox integration?
A: Yes! Use this to explore API documentation, understand endpoints, parameters, and schemas before building your integration.

License

MIT

Available Tools

7 tools
get_api_overviewA

Get comprehensive overview of the Fortnox API including base URL, authentication requirements, rate limits, and available resource groups. Use this FIRST to understand the API before exploring specific endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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 clearly indicates a read operation by saying 'Get comprehensive overview' and lists what is returned, but could explicitly state it has no side effects.

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?

Two concise sentences that front-load the purpose and follow with usage guidance. No unnecessary information.

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

Completeness4/5

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

Given no parameters, no output schema, and no annotations, the description is fairly complete by specifying what the overview includes. However, it might be enhanced by mentioning the format or that it is read-only.

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

Parameters5/5

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

There are zero parameters, so schema coverage is 100%. The description adds meaning by specifying the content of the overview (base URL, auth, etc.), which goes beyond the empty schema.

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

Purpose5/5

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

The description clearly states the tool gets a comprehensive overview of the Fortnox API, listing specific elements (base URL, authentication, rate limits, resource groups). This distinguishes it from siblings like get_endpoint_details and list_resource_groups.

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?

Explicitly advises 'Use this FIRST to understand the API before exploring specific endpoints', providing clear guidance on when to use this tool versus alternatives.

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

get_endpoint_detailsA

Get complete documentation for a specific endpoint including: description, parameters (path/query), request body schema, response schema, required vs optional fields. Essential for understanding how to use an endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe API endpoint path exactly as shown in list_all_endpoints (e.g., /3/customers, /3/invoices/{DocumentNumber})
methodYesThe HTTP method (must match exactly)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided; the description indicates a read-only retrieval of documentation. It does not elaborate on permissions, side effects, or limitations. Adequate for a safe, informational tool.

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?

Two sentences: first states purpose and content, second emphasizes utility. No fluff, front-loaded with key information.

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

Completeness4/5

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

For a tool with two parameters and no output schema, the description sufficiently details what the response includes. The list of contents covers typical documentation needs.

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

Parameters4/5

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

Schema coverage is 100% for both parameters. The description adds context by noting the path should match list_all_endpoints output, providing extra guidance beyond the schema.

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

Purpose5/5

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

The description clearly states it retrieves documentation for a specific endpoint, listing included details (description, parameters, schemas). It distinguishes from siblings like list_all_endpoints (lists endpoints) and get_schema_details (schema-only).

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

Usage Guidelines4/5

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

The description says 'Essential for understanding how to use an endpoint,' implying use when endpoint details are needed. It does not explicitly exclude cases or mention alternatives, so guidance is clear but not comprehensive.

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

get_endpoints_by_resourceA

Get all endpoints for a specific resource (e.g., all Customer endpoints, all Invoice endpoints). Returns grouped operations (list, create, get, update, delete) for easier understanding.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceYesResource name (e.g., Customers, Invoices, Orders). Use list_resource_groups to see all available resources.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses that results are grouped by CRUD operations, but does not mention authorization, rate limits, or potential side effects. For a read-only tool, this is minimally adequate.

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?

Two sentences, no filler. Front-loaded with the core action and examples. Every word earns its place.

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?

Given the tool's simplicity (1 param, no output schema), the description covers the essential: what it does, what to expect (grouped operations), and how to find valid inputs. Sibling tools cover other endpoint queries.

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

Parameters4/5

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

The single parameter 'resource' has 100% schema description. The description adds value by pointing to 'list_resource_groups' for discovering available resources, which is helpful beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'endpoints', and specifies the grouping behavior. Examples (Customer, Invoice) make it immediately understandable. This differentiates it from siblings like 'list_all_endpoints' which likely does not group.

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

Usage Guidelines3/5

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

The description implies usage for a specific resource but does not explicitly state when not to use or mention alternatives like 'search_endpoints' or 'list_all_endpoints'. It lacks explicit context for choosing this over siblings.

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

get_schema_detailsB

Get detailed schema information for a specific data model referenced in the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
schemaNameYesThe schema name (e.g., fortnox_Customer, fortnox_Invoice)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully convey behavior. It only states a read operation without disclosing idempotency, authentication needs, or what 'detailed' means. Minimal transparency.

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?

A single, well-front-loaded sentence with zero unnecessary words. Efficient and clear.

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

Completeness3/5

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

Given one required parameter and no output schema, the description is adequate but lacks details about what the response contains or any prerequisites. It meets minimum viability but could expand on output.

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 coverage is 100% with a description for schemaName. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves detailed schema information for a specific data model, using a specific verb and resource reference. It differentiates from sibling tools like get_endpoint_details by focusing on schema data.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as get_endpoint_details or get_api_overview. No context about prerequisites or return format.

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

list_all_endpointsA

List all 377 Fortnox API endpoints with method, path, summary, and resource tags. Supports filtering by HTTP method or resource group. Returns a comprehensive catalog of available endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoOptional: Filter by HTTP method (GET, POST, PUT, DELETE, PATCH)
tagNoOptional: Filter by resource group (e.g., fortnox_Customers, fortnox_Invoices). Use list_resource_groups to see all available tags.
limitNoOptional: Limit number of results (default: all)

TDQS

A3.8/5.0
Behavior2/5

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

No annotations; description only states it returns a catalog, no mention of side effects, authentication, or rate limits. Basic but insufficient for full transparency.

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?

Two sentences, front-loaded with main purpose, no redundant information.

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

Completeness4/5

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

Covers returned fields (method, path, summary, tags) and filtering; lacks pagination details but mentions limit parameter default appropriately.

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

Parameters4/5

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

Schema coverage is 100% and description adds value by hinting at list_resource_groups for tag parameter, enhancing understanding beyond schema.

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

Purpose5/5

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

Description clearly states 'List all 377 Fortnox API endpoints' with specific verb and resource, and distinguishes from siblings like get_endpoint_details by being a comprehensive listing.

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

Usage Guidelines3/5

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

Implied usage through filtering options and mention of list_resource_groups, but lacks explicit when to use vs. alternatives or when not to use.

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

list_resource_groupsA

List all 81 resource groups in the Fortnox API with endpoint counts. Resource groups represent different business entities (Customers, Invoices, Products, etc.). Use this to discover what resources are available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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 that it lists all 81 groups and includes endpoint counts, which is sufficient behavioral information for a read-only discovery tool.

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?

Two sentences, no wasted words. The first sentence states the action and result, the second explains the purpose. Perfectly front-loaded.

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?

Given no output schema, the description mentions the output includes endpoint counts. It is complete for a simple list tool, and the sibling tool names indicate it fits well in the toolkit.

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

Parameters4/5

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

The input schema has zero parameters and 100% coverage. Baseline for 0 params is 4. The description does not need to add parameter semantics, and it correctly focuses on output characteristics.

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

Purpose5/5

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

The description clearly states the tool lists all 81 resource groups with endpoint counts, and gives examples of business entities (Customers, Invoices). It distinguishes itself from sibling tools that deal with specific endpoints or schemas.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this to discover what resources are available,' which is clear usage guidance. While it does not provide when-not or alternatives, the context makes it obvious.

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

search_endpointsA

Search across all endpoints by keyword. Searches in: path, summary, description, and tags. Returns ranked results. Use this when you know what you want to do but not the exact endpoint name.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYesSearch keyword (e.g., "customer", "invoice", "payment", "bookkeep", "email")
limitNoOptional: Maximum number of results to return (default: 20)

TDQS

A4.7/5.0
Behavior4/5

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

The description discloses that it returns ranked results and searches multiple fields, adding behavioral context beyond the schema. No annotations are provided, so the description carries the burden, and it does so adequately without contradictions.

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 three sentences, front-loaded with the primary action, and every sentence adds value: scope, fields searched, ranking, and usage guidance. No wasted words.

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?

Given the tool's simplicity (2 parameters, no output schema) and sibling context, the description covers purpose, scope, behavior, and usage guidance completely.

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

Parameters4/5

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

The schema has 100% description coverage, but the description adds meaning by specifying which fields are searched (path, summary, description, tags), complementing the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool searches across all endpoints by keyword, specifying the fields searched (path, summary, description, tags) and that it returns ranked results. It effectively distinguishes from siblings like list_all_endpoints and get_endpoint_details.

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?

The description explicitly states 'Use this when you know what you want to do but not the exact endpoint name,' providing clear guidance on when to use this tool versus alternatives.

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. 7 tool updatesv1.0.3
    • First observedget_api_overview
    • First observedget_endpoint_details
    • First observedget_endpoints_by_resource
    • First observedget_schema_details
    • First observedlist_all_endpoints
    • First observedlist_resource_groups
    • First observedsearch_endpoints

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: overview, resource groups, all endpoints, search, endpoint details, endpoints by resource, and schema details. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., list_resource_groups, get_endpoint_details), making them predictable and clear.

Tool Count5/5

7 tools is perfectly scoped for a documentation exploration server, covering all necessary operations without excess or deficiency.

Completeness5/5

The set provides full coverage for API documentation discovery: overview, resource listing, endpoint cataloging, search, detailed endpoint info, resource-grouped endpoints, and schema details. No obvious gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with access to comprehensive Safaricom Daraja API documentation for all 22 M-Pesa APIs through searchable tools, enabling developers to query payment processing, transaction management, and business operations documentation.
    15
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI tools to search and explore API documentation from Apidog projects or OpenAPI/Swagger specifications, providing endpoint details, schemas, and project statistics through natural language queries.
    628 npm
    1
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    Exposes Swagger/OpenAPI API documentation to AI models, enabling exploration, search, and interaction with endpoints, schemas, and execution of API calls.
    14
    1 npm
    2
    MIT