@omnizoek/mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -0
- package/dist/index.js +254 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# @omnizoek/mcp-server
|
|
2
|
+
|
|
3
|
+
> **Model Context Protocol server** for OmniZoek — exposes 10 Dutch government data APIs as AI agent tools.
|
|
4
|
+
|
|
5
|
+
Add this server to Claude Desktop, Cursor, or any MCP-compatible AI client and your agent can instantly look up Dutch addresses, validate IBANs, check vehicle ZE-zone compliance, look up energy labels, and more — all backed by live BAG, EP-Online, RDW, VIES, NS, and ENTSO-E data.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/@omnizoek/mcp-server)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Available tools
|
|
13
|
+
|
|
14
|
+
| Tool | Description |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `omnizoek_address_enrich` | Validate and enrich a Dutch address — BAG ID, building year, surface area, coordinates, energy label |
|
|
17
|
+
| `omnizoek_iban_to_bic` | Resolve an IBAN to BIC/SWIFT and bank name |
|
|
18
|
+
| `omnizoek_vat_verify` | Verify a European VAT number via EU VIES |
|
|
19
|
+
| `omnizoek_validate_finance` | Checksum-validate a Dutch BSN or IBAN |
|
|
20
|
+
| `omnizoek_energy_label` | Look up the official EP-Online energy label for an address |
|
|
21
|
+
| `omnizoek_emission_zone` | Check whether a vehicle (by kenteken) may enter Dutch ZE-zones |
|
|
22
|
+
| `omnizoek_transit_disruptions` | Get current NS train disruptions, optionally filtered by station |
|
|
23
|
+
| `omnizoek_grid_trigger` | Get current ENTSO-E electricity price and whether the negative-price trigger is active |
|
|
24
|
+
| `omnizoek_minimum_wage` | Look up the Dutch statutory minimum wage for a given age |
|
|
25
|
+
| `omnizoek_holiday_surcharge` | Check if a date is a Dutch public holiday and get the wage surcharge multiplier |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
You need an OmniZoek API key. [Get one free at omnizoek.nl →](https://omnizoek.nl/signup)
|
|
32
|
+
|
|
33
|
+
Use an `omni_test_...` key during development — it returns fixture data and is never billed.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Claude Desktop
|
|
38
|
+
|
|
39
|
+
Add the following to your Claude Desktop config file:
|
|
40
|
+
|
|
41
|
+
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
42
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"mcpServers": {
|
|
47
|
+
"omnizoek": {
|
|
48
|
+
"command": "npx",
|
|
49
|
+
"args": ["-y", "@omnizoek/mcp-server"],
|
|
50
|
+
"env": {
|
|
51
|
+
"OMNIZOEK_API_KEY": "omni_live_YOUR_KEY_HERE"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Restart Claude Desktop. You'll see the OmniZoek tools available in the tool panel.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Cursor
|
|
63
|
+
|
|
64
|
+
Add to your Cursor MCP config (`~/.cursor/mcp.json` or the workspace `.cursor/mcp.json`):
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"mcpServers": {
|
|
69
|
+
"omnizoek": {
|
|
70
|
+
"command": "npx",
|
|
71
|
+
"args": ["-y", "@omnizoek/mcp-server"],
|
|
72
|
+
"env": {
|
|
73
|
+
"OMNIZOEK_API_KEY": "omni_live_YOUR_KEY_HERE"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Docker
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
docker run --rm -i \
|
|
86
|
+
-e OMNIZOEK_API_KEY=omni_live_YOUR_KEY_HERE \
|
|
87
|
+
omnizoek/mcp-server
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
To use via Docker in your MCP config:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"mcpServers": {
|
|
95
|
+
"omnizoek": {
|
|
96
|
+
"command": "docker",
|
|
97
|
+
"args": ["run", "--rm", "-i", "-e", "OMNIZOEK_API_KEY=omni_live_YOUR_KEY_HERE", "omnizoek/mcp-server"]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Environment variables
|
|
106
|
+
|
|
107
|
+
| Variable | Required | Description |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| `OMNIZOEK_API_KEY` | ✅ Yes | Your OmniZoek API key. Prefix `omni_test_` for sandbox mode. |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Example prompts
|
|
114
|
+
|
|
115
|
+
Once configured, you can ask your AI agent:
|
|
116
|
+
|
|
117
|
+
- *"What street is postcode 1012LG house number 1?"*
|
|
118
|
+
- *"Is IBAN NL91ABNA0417164300 valid, and what bank is it from?"*
|
|
119
|
+
- *"Can a diesel Euro 4 van with kenteken AB123C drive through an Amsterdam ZE-zone?"*
|
|
120
|
+
- *"What is the minimum wage for a 19-year-old in the Netherlands today?"*
|
|
121
|
+
- *"Is 25 December 2025 a public holiday, and what is the retail surcharge multiplier?"*
|
|
122
|
+
- *"What is the current electricity price in the Netherlands, and is the negative-price trigger active?"*
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Development
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Clone the monorepo
|
|
130
|
+
git clone https://github.com/JakoRens/searchworks-nl.git
|
|
131
|
+
cd searchworks-nl/omni-mcp
|
|
132
|
+
|
|
133
|
+
# Install dependencies
|
|
134
|
+
npm install
|
|
135
|
+
|
|
136
|
+
# Build
|
|
137
|
+
npm run build
|
|
138
|
+
|
|
139
|
+
# Run locally (requires OMNIZOEK_API_KEY)
|
|
140
|
+
OMNIZOEK_API_KEY=omni_test_... npm start
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Test with MCP Inspector
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
npx @modelcontextprotocol/inspector node dist/index.js
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Set `OMNIZOEK_API_KEY` in the inspector's environment variable panel, then use the tool explorer to call any tool interactively.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Links
|
|
154
|
+
|
|
155
|
+
- [OmniZoek API docs](https://omnizoek.nl/docs)
|
|
156
|
+
- [Sign up for an API key](https://omnizoek.nl/signup)
|
|
157
|
+
- [JavaScript SDK — `@omnizoek/sdk`](https://www.npmjs.com/package/@omnizoek/sdk)
|
|
158
|
+
- [React hooks — `@omnizoek/react`](https://www.npmjs.com/package/@omnizoek/react)
|
|
159
|
+
- [Model Context Protocol](https://modelcontextprotocol.io)
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
import { OmniClient } from "@omnizoek/sdk";
|
|
7
|
+
|
|
8
|
+
// src/tools.ts
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
function errResponse(err) {
|
|
11
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
12
|
+
return {
|
|
13
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
14
|
+
isError: true
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function registerTools(server2, client) {
|
|
18
|
+
server2.tool(
|
|
19
|
+
"omnizoek_address_enrich",
|
|
20
|
+
"Enrich a Dutch address using postcode and house number. Returns the verified street name, city, municipality, province, BAG object ID, surface area (m\xB2), building year, usage function, and optionally the official EP-Online energy label. Use this when you need to validate or complete a Dutch address, or look up property details.",
|
|
21
|
+
{
|
|
22
|
+
postcode: z.string().describe(
|
|
23
|
+
"Dutch postcode without spaces, e.g. '1012LG'. Four digits followed by two uppercase letters."
|
|
24
|
+
),
|
|
25
|
+
house_number: z.string().describe(
|
|
26
|
+
"House number as a string, e.g. '1', '23', or '4B'. Additions such as letters or 'bis' are included here."
|
|
27
|
+
),
|
|
28
|
+
energy: z.boolean().optional().describe(
|
|
29
|
+
"Whether to include the EP-Online energy label in the response. Defaults to true. Set to false to speed up the call if the energy label is not needed."
|
|
30
|
+
)
|
|
31
|
+
},
|
|
32
|
+
async ({ postcode, house_number, energy }) => {
|
|
33
|
+
try {
|
|
34
|
+
const result = await client.geo.enrichAddress({
|
|
35
|
+
postcode,
|
|
36
|
+
houseNumber: house_number,
|
|
37
|
+
energy
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
41
|
+
};
|
|
42
|
+
} catch (err) {
|
|
43
|
+
return errResponse(err);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
server2.tool(
|
|
48
|
+
"omnizoek_iban_to_bic",
|
|
49
|
+
"Resolve a Dutch or European IBAN to its BIC/SWIFT code and bank name. Useful for payment processing, supplier onboarding, or any workflow that requires knowing which bank holds an account.",
|
|
50
|
+
{
|
|
51
|
+
iban: z.string().describe(
|
|
52
|
+
"Full IBAN number including country code, e.g. 'NL91ABNA0417164300'. Spaces are automatically stripped."
|
|
53
|
+
)
|
|
54
|
+
},
|
|
55
|
+
async ({ iban }) => {
|
|
56
|
+
try {
|
|
57
|
+
const result = await client.finance.ibanToBic({ iban });
|
|
58
|
+
return {
|
|
59
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
60
|
+
};
|
|
61
|
+
} catch (err) {
|
|
62
|
+
return errResponse(err);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
server2.tool(
|
|
67
|
+
"omnizoek_vat_verify",
|
|
68
|
+
"Verify a European VAT number (Dutch BTW-nummer or any EU member state) via the official EU VIES service. Returns whether the number is valid, the registered company name, and the registered address. Use during B2B onboarding or invoicing to confirm a customer is a registered VAT payer.",
|
|
69
|
+
{
|
|
70
|
+
country_code: z.string().length(2).describe(
|
|
71
|
+
"ISO 3166-1 alpha-2 country code for the VAT number, e.g. 'NL', 'DE', 'BE'. Required even when the country is already encoded in the vat_number."
|
|
72
|
+
),
|
|
73
|
+
vat_number: z.string().describe(
|
|
74
|
+
"VAT number without the country prefix, e.g. '123456782B01' for NL123456782B01. Or pass the full number \u2014 the country prefix is stripped automatically."
|
|
75
|
+
)
|
|
76
|
+
},
|
|
77
|
+
async ({ country_code, vat_number }) => {
|
|
78
|
+
try {
|
|
79
|
+
const result = await client.finance.vatVerify({
|
|
80
|
+
countryCode: country_code,
|
|
81
|
+
vatNumber: vat_number
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
85
|
+
};
|
|
86
|
+
} catch (err) {
|
|
87
|
+
return errResponse(err);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
server2.tool(
|
|
92
|
+
"omnizoek_validate_finance",
|
|
93
|
+
"Validate a Dutch BSN (citizen service number) or IBAN using checksum algorithms. Returns whether the number is structurally valid, the algorithm used, and a human-readable detail message. Does NOT verify against live government registers \u2014 it is a format/checksum check only.",
|
|
94
|
+
{
|
|
95
|
+
type: z.enum(["bsn", "iban"]).describe(
|
|
96
|
+
"'bsn' to validate a Dutch citizen service number (Burgerservicenummer), or 'iban' to validate an IBAN checksum."
|
|
97
|
+
),
|
|
98
|
+
number: z.string().describe(
|
|
99
|
+
"The number to validate. For BSN: 9 digits, e.g. '111222333'. For IBAN: full IBAN including country code, e.g. 'NL91ABNA0417164300'."
|
|
100
|
+
)
|
|
101
|
+
},
|
|
102
|
+
async ({ type, number }) => {
|
|
103
|
+
try {
|
|
104
|
+
const result = await client.compliance.validateFinance({ type, number });
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
107
|
+
};
|
|
108
|
+
} catch (err) {
|
|
109
|
+
return errResponse(err);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
server2.tool(
|
|
114
|
+
"omnizoek_energy_label",
|
|
115
|
+
"Retrieve the official EP-Online energy label for a Dutch residential or commercial address. Returns the label class (A++++ through G), calculation type, registration date, and validity period. Use for real-estate listings, compliance checks, or sustainability reporting.",
|
|
116
|
+
{
|
|
117
|
+
postcode: z.string().describe("Dutch postcode without spaces, e.g. '1012LG'."),
|
|
118
|
+
house_number: z.string().describe("House number, e.g. '1' or '23B'.")
|
|
119
|
+
},
|
|
120
|
+
async ({ postcode, house_number }) => {
|
|
121
|
+
try {
|
|
122
|
+
const result = await client.realEstate.energyLabel({
|
|
123
|
+
postcode,
|
|
124
|
+
houseNumber: house_number
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
128
|
+
};
|
|
129
|
+
} catch (err) {
|
|
130
|
+
return errResponse(err);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
server2.tool(
|
|
135
|
+
"omnizoek_emission_zone",
|
|
136
|
+
"Check whether a Dutch-registered vehicle (by licence plate / kenteken) is allowed to enter zero-emission zones (ZE-zones). Returns whether the vehicle is ZE-compliant, its fuel types, Euro standard, emission category, and which zones were checked. Use for fleet management, delivery routing, or vehicle compliance checks.",
|
|
137
|
+
{
|
|
138
|
+
kenteken: z.string().describe(
|
|
139
|
+
"Dutch licence plate (kenteken) without hyphens and in uppercase, e.g. 'AB123C' or 'ABCD12'."
|
|
140
|
+
)
|
|
141
|
+
},
|
|
142
|
+
async ({ kenteken }) => {
|
|
143
|
+
try {
|
|
144
|
+
const result = await client.logistics.emissionZone({ kenteken });
|
|
145
|
+
return {
|
|
146
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
147
|
+
};
|
|
148
|
+
} catch (err) {
|
|
149
|
+
return errResponse(err);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
server2.tool(
|
|
154
|
+
"omnizoek_transit_disruptions",
|
|
155
|
+
"Retrieve current and upcoming NS (Dutch national railway) train disruptions and maintenance windows. Optionally filter by station code. Returns disruption type, title, cause, start/end time, and impact level. Use for travel planning assistants, commute notifications, or logistics coordination.",
|
|
156
|
+
{
|
|
157
|
+
station_code: z.string().optional().describe(
|
|
158
|
+
"Optional NS station code to filter disruptions, e.g. 'ASD' for Amsterdam Centraal, 'UT' for Utrecht Centraal. Omit to get all nationwide disruptions."
|
|
159
|
+
)
|
|
160
|
+
},
|
|
161
|
+
async ({ station_code }) => {
|
|
162
|
+
try {
|
|
163
|
+
const result = await client.logistics.transitDisruptions(
|
|
164
|
+
station_code ? { stationCode: station_code } : void 0
|
|
165
|
+
);
|
|
166
|
+
return {
|
|
167
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
168
|
+
};
|
|
169
|
+
} catch (err) {
|
|
170
|
+
return errResponse(err);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
);
|
|
174
|
+
server2.tool(
|
|
175
|
+
"omnizoek_grid_trigger",
|
|
176
|
+
"Check the current Dutch electricity grid status from ENTSO-E. Returns the current day-ahead price (\u20AC/MWh), whether prices are negative, and whether a 'trigger' condition is active (useful for smart energy management systems, EV charging schedulers, or demand-response automation). The trigger fires when the price falls below zero.",
|
|
177
|
+
{
|
|
178
|
+
country_code: z.string().length(2).optional().describe(
|
|
179
|
+
"ISO 3166-1 alpha-2 country code. Defaults to 'NL' (Netherlands). Other supported values: 'BE', 'DE'."
|
|
180
|
+
)
|
|
181
|
+
},
|
|
182
|
+
async ({ country_code }) => {
|
|
183
|
+
try {
|
|
184
|
+
const result = await client.energy.gridTrigger(
|
|
185
|
+
country_code ? { countryCode: country_code } : void 0
|
|
186
|
+
);
|
|
187
|
+
return {
|
|
188
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
189
|
+
};
|
|
190
|
+
} catch (err) {
|
|
191
|
+
return errResponse(err);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
server2.tool(
|
|
196
|
+
"omnizoek_minimum_wage",
|
|
197
|
+
"Look up the current Dutch statutory minimum wage (Wettelijk Minimumloon, WML) for a given age. Returns the hourly, daily, and monthly gross amounts in euros, plus the relevant law reference. Optionally pass a reference date to look up historical or future values.",
|
|
198
|
+
{
|
|
199
|
+
age: z.number().int().min(13).max(99).describe("Age of the employee in whole years, e.g. 21."),
|
|
200
|
+
date: z.string().optional().describe(
|
|
201
|
+
"Reference date in YYYY-MM-DD format. Defaults to today. Use a past date to look up historical minimum wages, or a future date if the next period's rates have been published."
|
|
202
|
+
)
|
|
203
|
+
},
|
|
204
|
+
async ({ age, date }) => {
|
|
205
|
+
try {
|
|
206
|
+
const result = await client.hr.minimumWage({ age, date });
|
|
207
|
+
return {
|
|
208
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
209
|
+
};
|
|
210
|
+
} catch (err) {
|
|
211
|
+
return errResponse(err);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
server2.tool(
|
|
216
|
+
"omnizoek_holiday_surcharge",
|
|
217
|
+
"Check whether a given date is a Dutch public holiday and return the applicable wage surcharge multiplier for a given industry (e.g. retail, hospitality, healthcare). Returns the holiday name if applicable, the surcharge multiplier (e.g. 1.5 for time-and-a-half), and the legal basis. Use for HR systems, payroll calculations, or shift scheduling.",
|
|
218
|
+
{
|
|
219
|
+
date: z.string().describe(
|
|
220
|
+
"Date to check in YYYY-MM-DD format, e.g. '2025-12-25' for Christmas. Use today's date to check current surcharge applicability."
|
|
221
|
+
),
|
|
222
|
+
industry: z.string().describe(
|
|
223
|
+
"Industry sector for the surcharge lookup. Common values: 'retail', 'horeca', 'healthcare', 'transport', 'construction'. Use 'general' if the specific industry is unknown."
|
|
224
|
+
)
|
|
225
|
+
},
|
|
226
|
+
async ({ date, industry }) => {
|
|
227
|
+
try {
|
|
228
|
+
const result = await client.hr.holidaySurcharge({ date, industry });
|
|
229
|
+
return {
|
|
230
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
231
|
+
};
|
|
232
|
+
} catch (err) {
|
|
233
|
+
return errResponse(err);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// src/index.ts
|
|
240
|
+
var apiKey = process.env.OMNIZOEK_API_KEY;
|
|
241
|
+
if (!apiKey) {
|
|
242
|
+
process.stderr.write(
|
|
243
|
+
"[omnizoek-mcp] Error: OMNIZOEK_API_KEY environment variable is not set.\n Set it to your OmniZoek API key: https://omnizoek.nl/signup\n Use an 'omni_test_...' key for sandbox testing (free, never billed).\n"
|
|
244
|
+
);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
var omni = new OmniClient({ apiKey });
|
|
248
|
+
var server = new McpServer({
|
|
249
|
+
name: "omnizoek",
|
|
250
|
+
version: "0.1.0"
|
|
251
|
+
});
|
|
252
|
+
registerTools(server, omni);
|
|
253
|
+
var transport = new StdioServerTransport();
|
|
254
|
+
await server.connect(transport);
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@omnizoek/mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server that exposes OmniZoek Dutch government data APIs as AI agent tools (Claude Desktop, Cursor, and any MCP-compatible client).",
|
|
5
|
+
"author": "OmniZoek <support@omnizoek.nl>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://omnizoek.nl/docs",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/JakoRens/searchworks-nl.git",
|
|
11
|
+
"directory": "omni-mcp"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"omnizoek",
|
|
15
|
+
"mcp",
|
|
16
|
+
"model-context-protocol",
|
|
17
|
+
"ai",
|
|
18
|
+
"agent",
|
|
19
|
+
"claude",
|
|
20
|
+
"cursor",
|
|
21
|
+
"dutch",
|
|
22
|
+
"netherlands",
|
|
23
|
+
"bag",
|
|
24
|
+
"postcode",
|
|
25
|
+
"iban",
|
|
26
|
+
"energy-label",
|
|
27
|
+
"rdw",
|
|
28
|
+
"ns"
|
|
29
|
+
],
|
|
30
|
+
"type": "module",
|
|
31
|
+
"bin": {
|
|
32
|
+
"omnizoek-mcp": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsup",
|
|
39
|
+
"dev": "tsup --watch",
|
|
40
|
+
"start": "node dist/index.js",
|
|
41
|
+
"typecheck": "tsc --noEmit",
|
|
42
|
+
"prepublishOnly": "npm run build"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.6.0",
|
|
46
|
+
"@omnizoek/sdk": "^0.1.1",
|
|
47
|
+
"zod": "^3.23.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"tsup": "^8.0.0",
|
|
51
|
+
"typescript": "^5.4.0"
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=18"
|
|
55
|
+
}
|
|
56
|
+
}
|