A Model Context Protocol (MCP) server that provides access to public procurement notices from doffin.no - Norway's official procurement portal. This allows AI assistants like Claude to search and retrieve Norwegian public procurement data.
This MCP server enables AI assistants to:
- Search public procurement notices using keywords, dates, buyer names, and more
- Retrieve detailed notice information including documents, deadlines, and requirements
- Access Norwegian procurement data in a structured, AI-friendly format
Perfect for procurement professionals, business analysts, or anyone monitoring Norwegian public tenders.
New to MCP? Follow the detailed getting started guide for step-by-step instructions.
- Python 3.11 or later
- Claude Desktop (or any MCP-compatible client)
# Clone the repository
git clone https://github.com/yourusername/doffin-mcp.git
cd doffin-mcp/mcp-doffin
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Test that everything works
python mcp_doffin.py
Create the MCP server configuration file:
macOS/Linux: ~/.claude/mcp-servers/doffin.json
Windows: %UserProfile%\.claude\mcp-servers\doffin.json
{
"command": "/path/to/your/.venv/bin/python",
"args": ["/path/to/your/checkout/mcp-doffin/mcp_doffin.py"],
"env": {
"NO_COLOR": "1"
}
}
⚠️ Important: Replace the paths above with your actual absolute paths.
After creating the configuration file, restart Claude Desktop completely.
Open Claude Desktop and try these examples:
Search for API-related procurement notices from Oslo published in the last 30 days
Find all notices with a deadline in the next 7 days
The server provides two MCP tools:
Search public procurement notices with various filters:
q
: Search text (keywords)buyer
: Buyer organization namepublished_from
/published_to
: Date range (YYYY-MM-DD)deadline_to
: Deadline filter (YYYY-MM-DD)county
: Geographic filterprocedure
: Procurement procedure typecpv
: CPV codes (procurement categories)page
: Page number for pagination
Retrieve detailed information for a specific notice:
notice_id
: The notice ID from search resultsurl
: Direct doffin.no notice URL
- Getting Started Guide - Step-by-step setup for beginners
- Detailed Setup Guide - Complete installation and configuration
- Testing Guide - How to run and write tests
- Agent Instructions - For AI agents working with this code
- Docker Deployment - Secure containerized deployment
- Check that the paths in your
doffin.json
are absolute and correct - Ensure the virtual environment is activated when testing manually
- Restart Claude Desktop completely (quit and reopen)
- Check Claude Desktop's logs for error messages
- Verify Python 3.11+ is installed:
python3 --version
orpython --version
- Ensure virtual environment is activated:
source .venv/bin/activate
- Check all dependencies are installed:
pip list
- Test the server manually:
python mcp_doffin.py
- Check your internet connection (server needs to access doffin.no)
- Verify the server isn't rate-limited (wait a few minutes and try again)
Find all IT procurement contracts from the Norwegian government in Q4 2024, focusing on cloud services and API development
Show me all procurement notices from Stavanger municipality that are closing in the next 2 weeks
Search for procurement opportunities related to "artificial intelligence" or "machine learning" published in the last 60 days
Get detailed information about procurement notice 2024-123456, including all documentation and requirements
# Run the test suite
cd doffin-mcp
pip install -r test_requirements.txt
make test
# Run with coverage
make coverage
# Run end-to-end tests (requires internet)
make test-e2e
See tests/README.md for detailed testing information.
For enhanced security, you can run the MCP server in a Docker container:
# Quick setup with Docker
./deploy-docker.sh all
See DOCKER.md for detailed Docker deployment instructions.
When contributing to this repository, please:
- Follow the existing code style and patterns
- Add tests for new functionality
- Update documentation for any changes
- Test all changes thoroughly
This project is open source and available under the MIT License.