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. 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 o
Add this skill
npx mdskills install r-huijts/opentk-mcpComprehensive MCP server for Dutch parliamentary data with 17 well-documented tools and NLP features
1# OpenTK Model Context Protocol Server23> **Important Attribution**: This MCP server is built as a wrapper around the excellent [OpenTK project](https://berthub.eu/tkconv/) created by [Bert Hubert](https://berthub.eu/). 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](https://berthub.eu/articles/posts/welkom-bij-opentk/). All credit for the underlying data access and processing goes to Bert Hubert and his contributions to open government data.45A 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.67<a href="https://glama.ai/mcp/servers/@r-huijts/opentk-mcp">8 <img width="380" height="200" src="https://glama.ai/mcp/servers/@r-huijts/opentk-mcp/badge" alt="OpenTK Model Context Protocol Server MCP server" />9</a>1011## Real-World Natural Language Interaction Examples1213## Example 1: Comparing Party Positions on AI Policies14User 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."1516## Example 2: Researching Parliamentary Discussions on Climate Policy17User 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?"1819## Example 3: Information About a Specific MP's Voting Record20User 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?"2122## Example 4: Finding Recent Housing Legislation Developments23User 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."2425## Example 5: Efficiently Triaging Multiple Documents (NEW - Smart Analysis)26User 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?"2728## Example 6: Extracting Key Topics from Parliamentary Documents (NEW - Smart Analysis)29User 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."3031## Example 7: Finding MPs with Specific Committee Memberships32User 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?"3334## Example 8: Identifying Upcoming Parliamentary Activities on Digital Security35User 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?"3637## Project Concept3839The 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.4041The 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:42431. Search for parliamentary documents using complex queries442. Access information about Members of Parliament453. Retrieve official documents in various formats and read the full content of the documents464. Analyze parliamentary activities and proceedings475. Track legislative cases and government pledges486. **Intelligently analyze document relevance using NLP before loading full content** (NEW in v1.0.16)497. **Extract keywords, entities, and topics for efficient document triage** (NEW in v1.0.16)5051The project leverages Bert Hubert's tkconv service as its primary data source, which provides a more accessible API than the official Dutch Parliament APIs.5253## Features5455### Core Parliamentary Data Access56- Search parliamentary documents with advanced query capabilities (quotes, NOT, OR, NEAR operators)57- Access comprehensive MP information and committee memberships58- Retrieve full document content (PDF, Word) with smart chunking59- Track legislative cases, government activities, and voting results60- Real-time access to parliamentary proceedings and upcoming activities6162### Smart Document Analysis (NEW in v1.0.16) 🎯63- **NLP-Powered Relevance Analysis**: Intelligently analyze documents before loading full content64- **TF-IDF Keyword Extraction**: Identify the top 10-15 most important terms in any document65- **Dutch-Optimized Entity Recognition**: Automatically detect persons (MPs, ministers), political parties (VVD, PVV, CDA, D66, etc.), and organizations66- **Topic Categorization**: Classify documents across 10 major political themes (Climate, Economy, Healthcare, Education, etc.)67- **Relevance Scoring**: Rank documents by relevance to specific search terms (0-100 score)68- **Context-Efficient Triage**: Reduce context window usage by 80-90% when evaluating multiple documents6970### Advanced Document Navigation71- Find specific person occurrences with fuzzy matching72- Find party mentions with fuzzy matching73- Navigate large documents efficiently with character offsets74- Sequential reading with pagination support7576## Available Tools7778OpenTK provides 17 specialized tools for accessing Dutch parliamentary data:7980### Overview & Discovery81- **`get_overview`**: Comprehensive overview of recent parliamentary activities and MP birthdays (paginated)82- **`birthdays_today`**: List MPs celebrating birthdays today83- **`list_persons`**: Complete directory of current MPs with party affiliations8485### Search & Filter86- **`search_tk`**: Comprehensive search across all parliamentary data with advanced query syntax87- **`search_tk_filtered`**: Search within specific categories (Document, Activiteit, Zaak)88- **`search_by_category`**: Search for specific document types (questions, motions, all)8990### Document Intelligence (NEW) 🎯91- **`analyze_document_relevance`**: NLP-powered document analysis with keyword extraction, entity recognition, and relevance scoring92- **`get_document_content`**: Retrieve document content (PDF/DOCX) with three reading modes (targeted, sequential, full)93- **`find_person_in_document`**: Locate all occurrences of a person in a document with fuzzy matching94- **`find_party_in_document`**: Locate all occurrences of a political party in a document9596### Document Metadata97- **`get_document_details`**: Retrieve structured metadata about documents98- **`get_document_links`**: Convert document URLs to clickable markdown links99100### Parliamentary Structure101- **`get_committees`**: List all parliamentary committees102- **`get_committee_details`**: Detailed information about specific committees103104### Activities & Voting105- **`get_upcoming_activities`**: Upcoming parliamentary debates and meetings106- **`get_voting_results`**: Recent voting results with party positions107108### Media109- **`get_photo`**: Retrieve official MP portrait photographs110111## Installation112113### 1. Quick Start with NPM Package (Recommended)114115The fastest way to get started is using the published npm package:116117```bash118npx @r-huijts/opentk-mcp119```120121### 2. Using Claude Desktop with NPM Package122123Update your Claude configuration file (`~/Library/Application Support/Claude/claude_desktop_config.json`):124125```json126{127 "mcpServers": {128 "opentk": {129 "command": "npx",130 "args": [131 "-y",132 "@r-huijts/opentk-mcp"133 ]134 }135 }136}137```138139**Alternative configurations:**140141For MultiServerMCPClient (Python):142```python143mcp_client = MultiServerMCPClient({144 "opentk": {145 "command": "npx",146 "args": ["-y", "@r-huijts/opentk-mcp"],147 "transport": "stdio",148 }149})150```151152### 3. From Source (Development)153154If you want to modify the code or contribute to development:155156**Clone Repository:**157```bash158git clone https://github.com/r-huijts/opentk-mcp.git159cd opentk-mcp160```161162**Install Dependencies:**163```bash164npm install165```166167**Build the Project:**168```bash169npm run build170```171172**Start the Server:**173```bash174npm start175```176177**Configure Claude Desktop for local development:**178179Update your Claude configuration file:180181```json182{183 "mcpServers": {184 "opentk-local": {185 "command": "node",186 "args": [187 "/absolute/path/to/your/opentk-mcp/dist/index.js"188 ]189 }190 }191}192```193194Make sure to replace `/absolute/path/to/your/opentk-mcp/` with the actual path to your installation.195196### 4. Publishing (for maintainers)197198To publish a new version of the scoped package:199200```bash201npm run build202npm publish --access=public203```204205Note: Scoped packages require the `--access=public` flag to be publicly available.206207## Search Functionality208209The search functionality is particularly sophisticated, supporting:210211- Simple keyword searches: `kunstmatige intelligentie`212- Exact phrase searches: `"kunstmatige intelligentie"`213- Exclusion searches: `Hubert NOT Bruls`214- Boolean operators: `OR`, `NEAR()`215216The implementation handles various edge cases:217- Preserves quotes in search queries218- Uses proper content type headers219- Implements fallback mechanisms for API errors220- Provides meaningful error messages221222## Error Handling223224The API service includes robust error handling:225- Graceful handling of API errors (4xx, 5xx)226- Fallback to simplified queries when complex ones fail227- Detailed error messages for debugging228- Proper logging to stderr (not stdout, which would break the stdio transport)229230## Configuration231232The server connects to Bert Hubert's [tkconv service](https://berthub.eu/tkconv/) as its primary data source, which provides a more accessible API than the official Dutch Parliament APIs. This service, created by Bert Hubert, does the heavy lifting of collecting, organizing, and making available Dutch parliamentary data in a developer-friendly format. Our MCP server builds upon this foundation to create a standardized interface for AI assistants to interact with this valuable data.233234## License235236MIT237238## Conclusion239240The OpenTK MCP server provides a robust and well-structured interface to Dutch parliamentary data, making it accessible to AI assistants through the Model Context Protocol. Its modular design, comprehensive API, NLP-powered document analysis (v1.0.16), and thorough testing ensure reliable access to parliamentary information for AI-assisted research, analysis, and information retrieval.241242Once configured, Claude will be able to access Dutch parliamentary data through the OpenTK MCP server using all 17 specialized tools for search, document analysis, MP information, committee tracking, voting results, and more.
Full transparency — inspect the skill content before installing.