OpenTK Dutch Parliament

OpenTK Dutch Parliament

r-huijts

Provides access to Dutch parliamentary data including documents, debates, MP information, and voting records through Bert Hubert's OpenTK service.

Provides a bridge to Dutch parliamentary data through Bert Hubert's tkconv service, enabling search across documents, MP information retrieval, and access to official records for political research and civic engagement.

16320 views4Local (stdio)

What it does

  • Search parliamentary documents and debates
  • Retrieve MP profiles and contact information
  • Get committee details and membership
  • Download official MP portrait photos
  • Access document metadata and links
  • Track recent parliamentary activities

Best for

Political researchers analyzing Dutch parliamentJournalists covering Dutch politicsCitizens researching MP positions and voting recordsStudents studying Dutch parliamentary processes
Built on OpenTK's comprehensive parliamentary databaseNo API key required10 specialized tools for parliamentary data

About OpenTK Dutch Parliament

OpenTK Dutch Parliament is a community-built MCP server published by r-huijts that provides AI assistants with tools and capabilities via the Model Context Protocol. OpenTK Dutch Parliament: Access Dutch parliamentary data, search documents, and retrieve MP info for research and civic It is categorized under developer tools, analytics data. This server exposes 17 tools that AI clients can invoke during conversations and coding sessions.

How to install

You can install OpenTK Dutch Parliament in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.

License

OpenTK Dutch Parliament is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.

Tools (17)

get_overview

Provides a comprehensive overview of recent parliamentary activities, including the most recent documents and MPs celebrating birthdays today. The response contains structured data with two main sections: 'recentDocuments' (listing the latest parliamentary documents with their IDs, titles, types, dates, and URLs) and 'birthdays' (listing MPs celebrating birthdays today). The results are paginated with 10 documents per page. The tool supports iterative pagination - check the pagination.hasMoreDocuments field in the response to determine if additional pages are available. The response includes pagination information showing the current page, whether more documents are available, and the total number of documents retrieved. Applicable when general information about recent parliamentary activities is needed.

birthdays_today

Lists all Members of Parliament celebrating their birthday today, including their names, political parties, and birth dates. The response is a JSON array where each entry contains the MP's ID, name, party affiliation, and other details. This tool takes no parameters as it always returns today's birthdays. Applicable when information about MPs' birthdays is needed.

list_persons

Provides a complete directory of current Members of Parliament with their IDs, names, titles, party affiliations, and faction memberships. The response is a JSON array where each entry contains an MP's full details including unique MP IDs that can be referenced by other tools. This tool takes no parameters as it returns all current MPs. Applicable when comprehensive information about all MPs is needed or when analyzing the composition of parliament by party.

search_tk

Performs a comprehensive search across all parliamentary data including documents, activities, and cases. Returns results matching the provided keyword or phrase. Use this for general searches when you need information on any topic discussed in parliament, regardless of document type or context. Search syntax: Searching for 'Joe Biden' finds documents containing both 'Joe' and 'Biden' anywhere in the text. Searching for "Joe Biden" (with quotes) finds only documents where these words appear next to each other. Searching for 'Hubert NOT Bruls' finds documents containing 'Hubert' but not 'Bruls'. The capital letters in 'NOT' are important. You can also use 'OR' and 'NEAR()' operators.

search_tk_filtered

Performs a search within a specific category of parliamentary data, allowing results to be limited to only documents, activities, or cases. Returns paginated results sorted by date (most recent first). Search syntax supports: keyword searches ('Joe Biden' finds both terms), exact phrase searches ("Joe Biden" with quotes finds the exact phrase), exclusion ('Hubert NOT Bruls' excludes documents with 'Bruls'), and boolean operators ('OR', 'NEAR()'). Results can be returned in 'full' or 'summary' format.

OpenTK Model Context Protocol Server

Important Attribution: This MCP server is built as a wrapper around the excellent OpenTK project created by Bert Hubert. The OpenTK project provides unprecedented access to Dutch parliamentary data through a user-friendly interface. Learn more about the project in Bert's article: Welkom bij OpenTK. All credit for the underlying data access and processing goes to Bert Hubert and his contributions to open government data.

A bridge between large language models (LLMs) and Dutch parliamentary data through a standardized interface. This MCP server provides access to Dutch parliamentary documents, debates, and member information from the Tweede Kamer.

OpenTK Model Context Protocol Server MCP server

Real-World Natural Language Interaction Examples

Example 1: Comparing Party Positions on AI Policies

User Query: "When comparing the activities of opposition parties PvdA, GroenLinks, and Volt with government party BBB in the Dutch House of Representatives in the field of AI, what are actions they can undertake together in the short term that align with the positions and views they have demonstrated over the past year? Please use sources from OpenTK."

Example 2: Researching Parliamentary Discussions on Climate Policy

User Query: "I'd like to analyze recent parliamentary debates on climate policy and emission reduction targets in the Netherlands. Can you help me identify key discussions and the main positions taken by different parties over the past six months?"

Example 3: Information About a Specific MP's Voting Record

User Query: "What is MP Pieter Omtzigt's voting record on healthcare reform legislation, and how does his position differ from other independent members? Has he introduced any motions on this topic?"

Example 4: Finding Recent Housing Legislation Developments

User Query: "What are the most significant parliamentary documents and debates about affordable housing legislation from the past year? I'm particularly interested in proposals addressing the rental market crisis."

Example 5: Efficiently Triaging Multiple Documents (NEW - Smart Analysis)

User Query: "I found 15 documents about climate policy from the last month. Can you quickly identify which 3 documents are most relevant to renewable energy subsidies and wind power legislation, without reading all of them in full?"

Example 6: Extracting Key Topics from Parliamentary Documents (NEW - Smart Analysis)

User Query: "What are the main topics, keywords, and political parties mentioned in document 2024D39058? I want to understand what it's about before diving into the full text."

Example 7: Finding MPs with Specific Committee Memberships

User Query: "Which MPs currently serve on both the Finance Committee and the Economic Affairs Committee? What parties do they represent, and have they recently submitted any joint initiatives?"

Example 8: Identifying Upcoming Parliamentary Activities on Digital Security

User Query: "Are there any scheduled committee meetings or debates about cybersecurity and digital infrastructure planned for the next month? Which ministers will be participating and what specific topics will be addressed?"

Project Concept

The OpenTK project is a Model Context Protocol (MCP) server that provides access to Dutch parliamentary data through a standardized interface. It serves as a bridge between large language models (LLMs) and the Dutch Parliament's information systems, allowing AI assistants to search, retrieve, and analyze parliamentary documents, debates, and member information.

The server uses the @modelcontextprotocol/sdk to implement the MCP specification, which enables structured communication between AI models and external data sources. By exposing parliamentary data through well-defined tools and endpoints, OpenTK makes it possible for AI assistants to:

  1. Search for parliamentary documents using complex queries
  2. Access information about Members of Parliament
  3. Retrieve official documents in various formats and read the full content of the documents
  4. Analyze parliamentary activities and proceedings
  5. Track legislative cases and government pledges
  6. Intelligently analyze document relevance using NLP before loading full content (NEW in v1.0.16)
  7. Extract keywords, entities, and topics for efficient document triage (NEW in v1.0.16)

The project leverages Bert Hubert's tkconv service as its primary data source, which provides a more accessible API than the official Dutch Parliament APIs.

Features

Core Parliamentary Data Access

  • Search parliamentary documents with advanced query capabilities (quotes, NOT, OR, NEAR operators)
  • Access comprehensive MP information and committee memberships
  • Retrieve full document content (PDF, Word) with smart chunking
  • Track legislative cases, government activities, and voting results
  • Real-time access to parliamentary proceedings and upcoming activities

Smart Document Analysis (NEW in v1.0.16) 🎯

  • NLP-Powered Relevance Analysis: Intelligently analyze documents before loading full content
  • TF-IDF Keyword Extraction: Identify the top 10-15 most important terms in any document
  • Dutch-Optimized Entity Recognition: Automatically detect persons (MPs, ministers), political parties (VVD, PVV, CDA, D66, etc.), and organizations
  • Topic Categorization: Classify documents across 10 major political themes (Climate, Economy, Healthcare, Education, etc.)
  • Relevance Scoring: Rank documents by relevance to specific search terms (0-100 score)
  • Context-Efficient Triage: Reduce context window usage by 80-90% when evaluating multiple documents

Advanced Document Navigation

  • Find specific person occurrences with fuzzy matching
  • Find party mentions with fuzzy matching
  • Navigate large documents efficiently with character offsets
  • Sequential reading with pagination support

Available Tools

OpenTK provides 17 specialized tools for accessing Dutch parliamentary data:

Overview & Discovery

  • get_overview: Comprehensive overview of recent parliamentary activities and MP birthdays (paginated)
  • birthdays_today: List MPs celebrating birthdays today
  • list_persons: Complete directory of current MPs with party affiliations

Search & Filter

  • search_tk: Comprehensive search across all parliamentary data with advanced query syntax
  • search_tk_filtered: Search within specific categories (Document, Activiteit, Zaak)
  • search_by_category: Search for specific document types (questions, motions, all)

Document Intelligence (NEW) 🎯

  • analyze_document_relevance: NLP-powered document analysis with keyword extraction, entity recognition, and relevance scoring
  • get_document_content: Retrieve document content (PDF/DOCX) with three reading modes (targeted, sequential, full)
  • find_person_in_document: Locate all occurrences of a person in a document with fuzzy matching
  • find_party_in_document: Locate all occurrences of a political party in a document

Document Metadata

  • get_document_details: Retrieve structured metadata about documents
  • get_document_links: Convert document URLs to clickable markdown links

Parliamentary Structure

  • get_committees: List all parliamentary committees
  • get_committee_details: Detailed information about specific committees

Activities & Voting

  • get_upcoming_activities: Upcoming parliamentary debates and meetings
  • get_voting_results: Recent voting results with party positions

Media

  • get_photo: Retrieve official MP portrait photographs

Installation

1. Quick Start with NPM Package (Recommended)

The fastest way to get started is using the published npm package:

npx @r-huijts/opentk-mcp

2. Using Claude Desktop with NPM Package

Update your Claude configuration file (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "opentk": {
      "command": "npx",
      "args": [
        "-y",
        "@r-huijts/opentk-mcp"
      ]
    }
  }
}

Alternative configurations:

For MultiServerMCPClient (Python):

mcp_client = MultiServerMCPClient({
    "opentk": {
        "command": "npx",
        "args": ["-y", "@r-huijts/opentk-mcp"],
        "transport": "stdio",
    }
})

3. From Source (Development)

If you want to modify the code or contribute to development:

Clone Repository:

git clone https://github.com/r-huijts/opentk-mcp.git
cd opentk-mcp

Install Dependencies:

npm install

Build the Project:

npm run build

Start the Server:

npm start

Configure Claude Desktop for local development:

Update your Claude configuration file:

{
  "mcpServers": {
    "opentk-local": {
      "command": "node",
      "args": [
        "/absolute/path/to/your/opentk-mcp/dist/index.js"
      ]
    }
  }
}

Make sure to replace /absolute/path/to/your/opentk-mcp/ with the actual path to your installation.

4. Publishing (for maintainers)

To publish a new version of the scoped package:

npm run build
npm publish --access=public

Note: Scoped packages require the --access=public flag to be publicly available.

Search Functionality

The search functionality is particularly sophisticated, supporting:

  • Simple keyword searches: kunstmatige intelligentie
  • Exact phrase searches: "kunstmatige intelligentie"
  • Exclusion searches: Hubert NOT Bruls
  • Boolean operators: OR, NEAR()

The implementation handles various edge cases:

  • Preserves quotes in search queries
  • Uses proper content

README truncated. View full README on GitHub.

Alternatives

Related Skills

Browse all skills
mcp-developer

Use when building MCP servers or clients that connect AI systems with external tools and data sources. Invoke for MCP protocol compliance, TypeScript/Python SDKs, resource providers, tool functions.

0
ccxt-typescript

CCXT cryptocurrency exchange library for TypeScript and JavaScript developers (Node.js and browser). Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors. Use when working with crypto exchanges in TypeScript/JavaScript projects, trading bots, arbitrage systems, or portfolio management tools. Includes both REST and WebSocket examples.

0
dotnet-backend

.NET/C# backend developer for ASP.NET Core APIs with Entity Framework Core. Builds REST APIs, minimal APIs, gRPC services, authentication with Identity/JWT, authorization, database operations, background services, SignalR real-time features. Activates for: .NET, C#, ASP.NET Core, Entity Framework Core, EF Core, .NET Core, minimal API, Web API, gRPC, authentication .NET, Identity, JWT .NET, authorization, LINQ, async/await C#, background service, IHostedService, SignalR, SQL Server, PostgreSQL .NET, dependency injection, middleware .NET.

64
supabase-developer

Build full-stack applications with Supabase (PostgreSQL, Auth, Storage, Real-time, Edge Functions). Use when implementing authentication, database design with RLS, file storage, real-time features, or serverless functions.

59
data-storytelling

Transform data into compelling narratives using visualization, context, and persuasive structure. Use when presenting analytics to stakeholders, creating data reports, or building executive presentations.

13
python-expert

Senior Python developer expertise for writing clean, efficient, and well-documented code. Use when: writing Python code, optimizing Python scripts, reviewing Python code for best practices, debugging Python issues, implementing type hints, or when user mentions Python, PEP 8, or needs help with Python data structures and algorithms.

13