@ansvar/ch-pest-management-mcp 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/.github/workflows/check-freshness.yml +49 -0
- package/.github/workflows/ci.yml +21 -0
- package/.github/workflows/codeql.yml +25 -0
- package/.github/workflows/ghcr-build.yml +45 -0
- package/.github/workflows/gitleaks.yml +18 -0
- package/.github/workflows/ingest.yml +59 -0
- package/.github/workflows/publish.yml +24 -0
- package/CHANGELOG.md +16 -0
- package/CODEOWNERS +1 -0
- package/COVERAGE.md +66 -0
- package/DISCLAIMER.md +39 -0
- package/Dockerfile +26 -0
- package/LICENSE +17 -0
- package/PRIVACY.md +23 -0
- package/README.md +98 -0
- package/SECURITY.md +26 -0
- package/TOOLS.md +202 -0
- package/data/coverage.json +34 -0
- package/data/database.db +0 -0
- package/data/sources.yml +57 -0
- package/dist/db.d.ts +26 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +189 -0
- package/dist/db.js.map +1 -0
- package/dist/http-server.d.ts +2 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +270 -0
- package/dist/http-server.js.map +1 -0
- package/dist/jurisdiction.d.ts +18 -0
- package/dist/jurisdiction.d.ts.map +1 -0
- package/dist/jurisdiction.js +16 -0
- package/dist/jurisdiction.js.map +1 -0
- package/dist/metadata.d.ts +10 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +21 -0
- package/dist/metadata.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +216 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/about.d.ts +15 -0
- package/dist/tools/about.d.ts.map +1 -0
- package/dist/tools/about.js +27 -0
- package/dist/tools/about.js.map +1 -0
- package/dist/tools/check-freshness.d.ts +15 -0
- package/dist/tools/check-freshness.d.ts.map +1 -0
- package/dist/tools/check-freshness.js +26 -0
- package/dist/tools/check-freshness.js.map +1 -0
- package/dist/tools/get-approved-products.d.ts +38 -0
- package/dist/tools/get-approved-products.d.ts.map +1 -0
- package/dist/tools/get-approved-products.js +49 -0
- package/dist/tools/get-approved-products.js.map +1 -0
- package/dist/tools/get-ipm-guidance.d.ts +42 -0
- package/dist/tools/get-ipm-guidance.d.ts.map +1 -0
- package/dist/tools/get-ipm-guidance.js +40 -0
- package/dist/tools/get-ipm-guidance.js.map +1 -0
- package/dist/tools/get-pest-details.d.ts +43 -0
- package/dist/tools/get-pest-details.d.ts.map +1 -0
- package/dist/tools/get-pest-details.js +20 -0
- package/dist/tools/get-pest-details.js.map +1 -0
- package/dist/tools/get-treatments.d.ts +46 -0
- package/dist/tools/get-treatments.d.ts.map +1 -0
- package/dist/tools/get-treatments.js +41 -0
- package/dist/tools/get-treatments.js.map +1 -0
- package/dist/tools/identify-from-symptoms.d.ts +31 -0
- package/dist/tools/identify-from-symptoms.d.ts.map +1 -0
- package/dist/tools/identify-from-symptoms.js +49 -0
- package/dist/tools/identify-from-symptoms.js.map +1 -0
- package/dist/tools/list-sources.d.ts +18 -0
- package/dist/tools/list-sources.d.ts.map +1 -0
- package/dist/tools/list-sources.js +51 -0
- package/dist/tools/list-sources.js.map +1 -0
- package/dist/tools/search-crop-threats.d.ts +36 -0
- package/dist/tools/search-crop-threats.d.ts.map +1 -0
- package/dist/tools/search-crop-threats.js +48 -0
- package/dist/tools/search-crop-threats.js.map +1 -0
- package/dist/tools/search-pests.d.ts +31 -0
- package/dist/tools/search-pests.d.ts.map +1 -0
- package/dist/tools/search-pests.js +36 -0
- package/dist/tools/search-pests.js.map +1 -0
- package/docker-compose.yml +12 -0
- package/eslint.config.js +23 -0
- package/package.json +54 -0
- package/scripts/ingest.ts +1037 -0
- package/server.json +71 -0
- package/src/db.ts +230 -0
- package/src/http-server.ts +302 -0
- package/src/jurisdiction.ts +30 -0
- package/src/metadata.ts +31 -0
- package/src/server.ts +239 -0
- package/src/tools/about.ts +28 -0
- package/src/tools/check-freshness.ts +42 -0
- package/src/tools/get-approved-products.ts +68 -0
- package/src/tools/get-ipm-guidance.ts +56 -0
- package/src/tools/get-pest-details.ts +44 -0
- package/src/tools/get-treatments.ts +61 -0
- package/src/tools/identify-from-symptoms.ts +64 -0
- package/src/tools/list-sources.ts +65 -0
- package/src/tools/search-crop-threats.ts +74 -0
- package/src/tools/search-pests.ts +49 -0
- package/tests/db.test.ts +82 -0
- package/tests/helpers/seed-db.ts +187 -0
- package/tests/jurisdiction.test.ts +35 -0
- package/tests/tools/about.test.ts +27 -0
- package/tests/tools/check-freshness.test.ts +58 -0
- package/tests/tools/list-sources.test.ts +57 -0
- package/tests/tools/search-pests.test.ts +64 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { createServer } from 'http';
|
|
2
|
+
import { randomUUID } from 'crypto';
|
|
3
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
4
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
5
|
+
import { ListToolsRequestSchema, CallToolRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { createDatabase } from './db.js';
|
|
8
|
+
import { handleAbout } from './tools/about.js';
|
|
9
|
+
import { handleListSources } from './tools/list-sources.js';
|
|
10
|
+
import { handleCheckFreshness } from './tools/check-freshness.js';
|
|
11
|
+
import { handleSearchPests } from './tools/search-pests.js';
|
|
12
|
+
import { handleGetPestDetails } from './tools/get-pest-details.js';
|
|
13
|
+
import { handleGetTreatments } from './tools/get-treatments.js';
|
|
14
|
+
import { handleGetIpmGuidance } from './tools/get-ipm-guidance.js';
|
|
15
|
+
import { handleSearchCropThreats } from './tools/search-crop-threats.js';
|
|
16
|
+
import { handleIdentifyFromSymptoms } from './tools/identify-from-symptoms.js';
|
|
17
|
+
import { handleGetApprovedProducts } from './tools/get-approved-products.js';
|
|
18
|
+
const SERVER_NAME = 'ch-pest-management-mcp';
|
|
19
|
+
const SERVER_VERSION = '0.1.0';
|
|
20
|
+
const PORT = parseInt(process.env.PORT ?? '3000', 10);
|
|
21
|
+
const SearchPestsArgsSchema = z.object({
|
|
22
|
+
query: z.string(),
|
|
23
|
+
pest_type: z.string().optional(),
|
|
24
|
+
crop: z.string().optional(),
|
|
25
|
+
jurisdiction: z.string().optional(),
|
|
26
|
+
limit: z.number().optional(),
|
|
27
|
+
});
|
|
28
|
+
const PestDetailsArgsSchema = z.object({
|
|
29
|
+
pest_id: z.string(),
|
|
30
|
+
jurisdiction: z.string().optional(),
|
|
31
|
+
});
|
|
32
|
+
const TreatmentsArgsSchema = z.object({
|
|
33
|
+
pest_id: z.string(),
|
|
34
|
+
approach: z.string().optional(),
|
|
35
|
+
jurisdiction: z.string().optional(),
|
|
36
|
+
});
|
|
37
|
+
const IpmGuidanceArgsSchema = z.object({
|
|
38
|
+
crop: z.string(),
|
|
39
|
+
pest_id: z.string().optional(),
|
|
40
|
+
jurisdiction: z.string().optional(),
|
|
41
|
+
});
|
|
42
|
+
const CropThreatsArgsSchema = z.object({
|
|
43
|
+
crop: z.string(),
|
|
44
|
+
growth_stage: z.string().optional(),
|
|
45
|
+
jurisdiction: z.string().optional(),
|
|
46
|
+
});
|
|
47
|
+
const IdentifyArgsSchema = z.object({
|
|
48
|
+
symptoms: z.string(),
|
|
49
|
+
crop: z.string().optional(),
|
|
50
|
+
season: z.string().optional(),
|
|
51
|
+
jurisdiction: z.string().optional(),
|
|
52
|
+
});
|
|
53
|
+
const ApprovedProductsArgsSchema = z.object({
|
|
54
|
+
active_substance: z.string().optional(),
|
|
55
|
+
target_pest: z.string().optional(),
|
|
56
|
+
crop: z.string().optional(),
|
|
57
|
+
jurisdiction: z.string().optional(),
|
|
58
|
+
});
|
|
59
|
+
const TOOLS = [
|
|
60
|
+
{
|
|
61
|
+
name: 'about',
|
|
62
|
+
description: 'Get server metadata: name, version, coverage, data sources, and links.',
|
|
63
|
+
inputSchema: { type: 'object', properties: {} },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'list_sources',
|
|
67
|
+
description: 'List all data sources with authority, URL, license, and freshness info.',
|
|
68
|
+
inputSchema: { type: 'object', properties: {} },
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'check_data_freshness',
|
|
72
|
+
description: 'Check when data was last ingested, staleness status, and how to trigger a refresh.',
|
|
73
|
+
inputSchema: { type: 'object', properties: {} },
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'search_pests',
|
|
77
|
+
description: 'Search pests, diseases, and weeds affecting Swiss crops. Use for broad queries about Schaedlinge, Krankheiten, Unkraeuter.',
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: 'object',
|
|
80
|
+
properties: {
|
|
81
|
+
query: { type: 'string', description: 'Free-text search query (German or English)' },
|
|
82
|
+
pest_type: { type: 'string', description: 'Filter by type: insect, disease, or weed' },
|
|
83
|
+
crop: { type: 'string', description: 'Filter by affected crop' },
|
|
84
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
85
|
+
limit: { type: 'number', description: 'Max results (default: 20, max: 50)' },
|
|
86
|
+
},
|
|
87
|
+
required: ['query'],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'get_pest_details',
|
|
92
|
+
description: 'Get full profile for a pest: lifecycle, identification, crops affected, and treatments.',
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: 'object',
|
|
95
|
+
properties: {
|
|
96
|
+
pest_id: { type: 'string', description: 'Pest ID (e.g. blattlaeuse, septoria)' },
|
|
97
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
98
|
+
},
|
|
99
|
+
required: ['pest_id'],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'get_treatments',
|
|
104
|
+
description: 'Get approved chemical and non-chemical controls for a specific pest.',
|
|
105
|
+
inputSchema: {
|
|
106
|
+
type: 'object',
|
|
107
|
+
properties: {
|
|
108
|
+
pest_id: { type: 'string', description: 'Pest ID' },
|
|
109
|
+
approach: { type: 'string', description: 'Filter: chemical, biological, cultural, mechanical' },
|
|
110
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
111
|
+
},
|
|
112
|
+
required: ['pest_id'],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'get_ipm_guidance',
|
|
117
|
+
description: 'Get IPM guidance for a crop: OELN Schadschwellen, monitoring, cultural controls, prognosis systems.',
|
|
118
|
+
inputSchema: {
|
|
119
|
+
type: 'object',
|
|
120
|
+
properties: {
|
|
121
|
+
crop: { type: 'string', description: 'Crop name (e.g. Winterweizen, Kartoffeln, Reben)' },
|
|
122
|
+
pest_id: { type: 'string', description: 'Optional: filter to specific pest' },
|
|
123
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
124
|
+
},
|
|
125
|
+
required: ['crop'],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'search_crop_threats',
|
|
130
|
+
description: 'List all pests, diseases, and weeds that threaten a specific crop.',
|
|
131
|
+
inputSchema: {
|
|
132
|
+
type: 'object',
|
|
133
|
+
properties: {
|
|
134
|
+
crop: { type: 'string', description: 'Crop name' },
|
|
135
|
+
growth_stage: { type: 'string', description: 'Optional growth stage filter' },
|
|
136
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
137
|
+
},
|
|
138
|
+
required: ['crop'],
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'identify_from_symptoms',
|
|
143
|
+
description: 'Identify a pest, disease, or weed from symptom descriptions.',
|
|
144
|
+
inputSchema: {
|
|
145
|
+
type: 'object',
|
|
146
|
+
properties: {
|
|
147
|
+
symptoms: { type: 'string', description: 'Symptom description in German or English' },
|
|
148
|
+
crop: { type: 'string', description: 'Affected crop' },
|
|
149
|
+
season: { type: 'string', description: 'Time of year' },
|
|
150
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
151
|
+
},
|
|
152
|
+
required: ['symptoms'],
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: 'get_approved_products',
|
|
157
|
+
description: 'Search approved plant protection products from the BLW Pflanzenschutzmittelverzeichnis.',
|
|
158
|
+
inputSchema: {
|
|
159
|
+
type: 'object',
|
|
160
|
+
properties: {
|
|
161
|
+
active_substance: { type: 'string', description: 'Active substance name' },
|
|
162
|
+
target_pest: { type: 'string', description: 'Target organism' },
|
|
163
|
+
crop: { type: 'string', description: 'Target crop' },
|
|
164
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
];
|
|
169
|
+
function textResult(data) {
|
|
170
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
171
|
+
}
|
|
172
|
+
function errorResult(message) {
|
|
173
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: message }) }], isError: true };
|
|
174
|
+
}
|
|
175
|
+
function registerTools(server, db) {
|
|
176
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
177
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
178
|
+
const { name, arguments: args = {} } = request.params;
|
|
179
|
+
try {
|
|
180
|
+
switch (name) {
|
|
181
|
+
case 'about':
|
|
182
|
+
return textResult(handleAbout());
|
|
183
|
+
case 'list_sources':
|
|
184
|
+
return textResult(handleListSources(db));
|
|
185
|
+
case 'check_data_freshness':
|
|
186
|
+
return textResult(handleCheckFreshness(db));
|
|
187
|
+
case 'search_pests':
|
|
188
|
+
return textResult(handleSearchPests(db, SearchPestsArgsSchema.parse(args)));
|
|
189
|
+
case 'get_pest_details':
|
|
190
|
+
return textResult(handleGetPestDetails(db, PestDetailsArgsSchema.parse(args)));
|
|
191
|
+
case 'get_treatments':
|
|
192
|
+
return textResult(handleGetTreatments(db, TreatmentsArgsSchema.parse(args)));
|
|
193
|
+
case 'get_ipm_guidance':
|
|
194
|
+
return textResult(handleGetIpmGuidance(db, IpmGuidanceArgsSchema.parse(args)));
|
|
195
|
+
case 'search_crop_threats':
|
|
196
|
+
return textResult(handleSearchCropThreats(db, CropThreatsArgsSchema.parse(args)));
|
|
197
|
+
case 'identify_from_symptoms':
|
|
198
|
+
return textResult(handleIdentifyFromSymptoms(db, IdentifyArgsSchema.parse(args)));
|
|
199
|
+
case 'get_approved_products':
|
|
200
|
+
return textResult(handleGetApprovedProducts(db, ApprovedProductsArgsSchema.parse(args)));
|
|
201
|
+
default:
|
|
202
|
+
return errorResult(`Unknown tool: ${name}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
const db = createDatabase();
|
|
211
|
+
const sessions = new Map();
|
|
212
|
+
function createMcpServer() {
|
|
213
|
+
const mcpServer = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
|
|
214
|
+
registerTools(mcpServer, db);
|
|
215
|
+
return mcpServer;
|
|
216
|
+
}
|
|
217
|
+
async function handleMCPRequest(req, res) {
|
|
218
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
219
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
220
|
+
const session = sessions.get(sessionId);
|
|
221
|
+
await session.transport.handleRequest(req, res);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (req.method === 'GET' || req.method === 'DELETE') {
|
|
225
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
226
|
+
res.end(JSON.stringify({ error: 'Invalid or missing session ID' }));
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const mcpServer = createMcpServer();
|
|
230
|
+
const transport = new StreamableHTTPServerTransport({
|
|
231
|
+
sessionIdGenerator: () => randomUUID(),
|
|
232
|
+
});
|
|
233
|
+
await mcpServer.connect(transport);
|
|
234
|
+
transport.onclose = () => {
|
|
235
|
+
if (transport.sessionId) {
|
|
236
|
+
sessions.delete(transport.sessionId);
|
|
237
|
+
}
|
|
238
|
+
mcpServer.close().catch(() => { });
|
|
239
|
+
};
|
|
240
|
+
await transport.handleRequest(req, res);
|
|
241
|
+
if (transport.sessionId) {
|
|
242
|
+
sessions.set(transport.sessionId, { transport, server: mcpServer });
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const httpServer = createServer(async (req, res) => {
|
|
246
|
+
const url = new URL(req.url || '/', `http://localhost:${PORT}`);
|
|
247
|
+
if (url.pathname === '/health' && req.method === 'GET') {
|
|
248
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
249
|
+
res.end(JSON.stringify({ status: 'healthy', server: SERVER_NAME, version: SERVER_VERSION }));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (url.pathname === '/mcp' || url.pathname === '/') {
|
|
253
|
+
try {
|
|
254
|
+
await handleMCPRequest(req, res);
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
if (!res.headersSent) {
|
|
258
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
259
|
+
res.end(JSON.stringify({ error: err instanceof Error ? err.message : 'Internal server error' }));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
265
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
266
|
+
});
|
|
267
|
+
httpServer.listen(PORT, () => {
|
|
268
|
+
console.log(`${SERVER_NAME} v${SERVER_VERSION} listening on port ${PORT}`);
|
|
269
|
+
});
|
|
270
|
+
//# sourceMappingURL=http-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const SUPPORTED_JURISDICTIONS: readonly ["CH"];
|
|
2
|
+
export type Jurisdiction = (typeof SUPPORTED_JURISDICTIONS)[number];
|
|
3
|
+
type ValidationSuccess = {
|
|
4
|
+
valid: true;
|
|
5
|
+
jurisdiction: Jurisdiction;
|
|
6
|
+
};
|
|
7
|
+
type ValidationFailure = {
|
|
8
|
+
valid: false;
|
|
9
|
+
error: {
|
|
10
|
+
error: string;
|
|
11
|
+
supported: readonly string[];
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
type ValidationResult = ValidationSuccess | ValidationFailure;
|
|
16
|
+
export declare function validateJurisdiction(input: string | undefined): ValidationResult;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=jurisdiction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jurisdiction.d.ts","sourceRoot":"","sources":["../src/jurisdiction.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,iBAAkB,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,KAAK,iBAAiB,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC;AACrE,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AACF,KAAK,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAE9D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAehF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const SUPPORTED_JURISDICTIONS = ['CH'];
|
|
2
|
+
export function validateJurisdiction(input) {
|
|
3
|
+
const normalised = (input ?? 'CH').toUpperCase();
|
|
4
|
+
if (SUPPORTED_JURISDICTIONS.includes(normalised)) {
|
|
5
|
+
return { valid: true, jurisdiction: normalised };
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
valid: false,
|
|
9
|
+
error: {
|
|
10
|
+
error: 'jurisdiction_not_supported',
|
|
11
|
+
supported: SUPPORTED_JURISDICTIONS,
|
|
12
|
+
message: 'This server currently covers Switzerland. More jurisdictions are planned.',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=jurisdiction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jurisdiction.js","sourceRoot":"","sources":["../src/jurisdiction.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAI,CAAU,CAAC;AAcvD,MAAM,UAAU,oBAAoB,CAAC,KAAyB;IAC5D,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,UAA0B,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,UAA0B,EAAE,CAAC;IACnE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE;YACL,KAAK,EAAE,4BAA4B;YACnC,SAAS,EAAE,uBAAuB;YAClC,OAAO,EAAE,2EAA2E;SACrF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface Meta {
|
|
2
|
+
disclaimer: string;
|
|
3
|
+
data_age: string;
|
|
4
|
+
source_url: string;
|
|
5
|
+
copyright: string;
|
|
6
|
+
server: string;
|
|
7
|
+
version: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function buildMeta(overrides?: Partial<Meta>): Meta;
|
|
10
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAaD,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAUzD"}
|
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const DISCLAIMER = 'Diese Daten dienen ausschliesslich der Information und ersetzen keine professionelle Pflanzenschutzberatung. ' +
|
|
2
|
+
'Vor jeder Anwendung von Pflanzenschutzmitteln (PSM) ist die aktuelle Zulassung im Pflanzenschutzmittelverzeichnis ' +
|
|
3
|
+
'des BLW (psm.admin.ch) zu pruefen. Die Angaben basieren auf dem Pflanzenschutzmittelverzeichnis, den ' +
|
|
4
|
+
'Pflanzenschutzempfehlungen von Agroscope, den OELN-Richtlinien und dem Aktionsplan Pflanzenschutzmittel. ' +
|
|
5
|
+
'Fuer die berufliche Anwendung ist eine Fachbewilligung PSM erforderlich. Pufferstreifen und Auflagen sind ' +
|
|
6
|
+
'eigenstaendig einzuhalten. Kantonale Abweichungen und betriebsspezifische Anpassungen sind zu pruefen. / ' +
|
|
7
|
+
'This data is for informational purposes only and does not replace professional crop protection advice. ' +
|
|
8
|
+
'Before any pesticide application, verify the current authorisation in the BLW Pflanzenschutzmittelverzeichnis ' +
|
|
9
|
+
'(psm.admin.ch). Data sourced from BLW, Agroscope, AGRIDEA, and the Aktionsplan Pflanzenschutzmittel.';
|
|
10
|
+
export function buildMeta(overrides) {
|
|
11
|
+
return {
|
|
12
|
+
disclaimer: DISCLAIMER,
|
|
13
|
+
data_age: overrides?.data_age ?? 'unknown',
|
|
14
|
+
source_url: overrides?.source_url ?? 'https://www.psm.admin.ch/de/produkte',
|
|
15
|
+
copyright: 'Data: BLW, Agroscope, AGRIDEA — used under public-sector information principles. Server: Apache-2.0 Ansvar Systems.',
|
|
16
|
+
server: 'ch-pest-management-mcp',
|
|
17
|
+
version: '0.1.0',
|
|
18
|
+
...overrides,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,GACd,+GAA+G;IAC/G,oHAAoH;IACpH,uGAAuG;IACvG,2GAA2G;IAC3G,4GAA4G;IAC5G,2GAA2G;IAC3G,yGAAyG;IACzG,gHAAgH;IAChH,sGAAsG,CAAC;AAEzG,MAAM,UAAU,SAAS,CAAC,SAAyB;IACjD,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,SAAS;QAC1C,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,sCAAsC;QAC3E,SAAS,EAAE,qHAAqH;QAChI,MAAM,EAAE,wBAAwB;QAChC,OAAO,EAAE,OAAO;QAChB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { ListToolsRequestSchema, CallToolRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { createDatabase } from './db.js';
|
|
7
|
+
import { handleAbout } from './tools/about.js';
|
|
8
|
+
import { handleListSources } from './tools/list-sources.js';
|
|
9
|
+
import { handleCheckFreshness } from './tools/check-freshness.js';
|
|
10
|
+
import { handleSearchPests } from './tools/search-pests.js';
|
|
11
|
+
import { handleGetPestDetails } from './tools/get-pest-details.js';
|
|
12
|
+
import { handleGetTreatments } from './tools/get-treatments.js';
|
|
13
|
+
import { handleGetIpmGuidance } from './tools/get-ipm-guidance.js';
|
|
14
|
+
import { handleSearchCropThreats } from './tools/search-crop-threats.js';
|
|
15
|
+
import { handleIdentifyFromSymptoms } from './tools/identify-from-symptoms.js';
|
|
16
|
+
import { handleGetApprovedProducts } from './tools/get-approved-products.js';
|
|
17
|
+
const SERVER_NAME = 'ch-pest-management-mcp';
|
|
18
|
+
const SERVER_VERSION = '0.1.0';
|
|
19
|
+
const TOOLS = [
|
|
20
|
+
{
|
|
21
|
+
name: 'about',
|
|
22
|
+
description: 'Get server metadata: name, version, coverage, data sources, and links.',
|
|
23
|
+
inputSchema: { type: 'object', properties: {} },
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'list_sources',
|
|
27
|
+
description: 'List all data sources with authority, URL, license, and freshness info.',
|
|
28
|
+
inputSchema: { type: 'object', properties: {} },
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'check_data_freshness',
|
|
32
|
+
description: 'Check when data was last ingested, staleness status, and how to trigger a refresh.',
|
|
33
|
+
inputSchema: { type: 'object', properties: {} },
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'search_pests',
|
|
37
|
+
description: 'Search pests, diseases, and weeds affecting Swiss crops. Use for broad queries about Schaedlinge, Krankheiten, Unkraeuter.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
query: { type: 'string', description: 'Free-text search query (German or English, e.g. "Blattlaeuse Weizen", "Septoria")' },
|
|
42
|
+
pest_type: { type: 'string', description: 'Filter by type: insect, disease, or weed' },
|
|
43
|
+
crop: { type: 'string', description: 'Filter by affected crop (e.g. Winterweizen, Kartoffeln, Reben)' },
|
|
44
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
45
|
+
limit: { type: 'number', description: 'Max results (default: 20, max: 50)' },
|
|
46
|
+
},
|
|
47
|
+
required: ['query'],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'get_pest_details',
|
|
52
|
+
description: 'Get full profile for a pest: lifecycle, identification, crops affected, and treatments. Use pest ID from search_pests.',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
pest_id: { type: 'string', description: 'Pest ID (e.g. blattlaeuse, septoria, ackerfuchsschwanz)' },
|
|
57
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
58
|
+
},
|
|
59
|
+
required: ['pest_id'],
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'get_treatments',
|
|
64
|
+
description: 'Get approved chemical and non-chemical controls for a specific pest. Includes products, active substances, and OELN alternatives.',
|
|
65
|
+
inputSchema: {
|
|
66
|
+
type: 'object',
|
|
67
|
+
properties: {
|
|
68
|
+
pest_id: { type: 'string', description: 'Pest ID (e.g. rapsglanzkaefer, krautfaeule)' },
|
|
69
|
+
approach: { type: 'string', description: 'Filter by approach: chemical, biological, cultural, or mechanical' },
|
|
70
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
71
|
+
},
|
|
72
|
+
required: ['pest_id'],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'get_ipm_guidance',
|
|
77
|
+
description: 'Get IPM (Integrierter Pflanzenschutz) guidance for a crop: OELN Schadschwellen, monitoring methods, cultural controls, prognosis systems.',
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: 'object',
|
|
80
|
+
properties: {
|
|
81
|
+
crop: { type: 'string', description: 'Crop name (e.g. Winterweizen, Kartoffeln, Reben, Apfel)' },
|
|
82
|
+
pest_id: { type: 'string', description: 'Optional: filter to specific pest' },
|
|
83
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
84
|
+
},
|
|
85
|
+
required: ['crop'],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'search_crop_threats',
|
|
90
|
+
description: 'List all pests, diseases, and weeds that threaten a specific crop, with damage thresholds and monitoring advice.',
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
properties: {
|
|
94
|
+
crop: { type: 'string', description: 'Crop name (e.g. Winterweizen, Winterraps, Kartoffeln)' },
|
|
95
|
+
growth_stage: { type: 'string', description: 'Optional growth stage filter (e.g. Bestockung, Bluete, Knollenbildung)' },
|
|
96
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
97
|
+
},
|
|
98
|
+
required: ['crop'],
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'identify_from_symptoms',
|
|
103
|
+
description: 'Identify a pest, disease, or weed from symptom descriptions. Returns ranked differential diagnosis.',
|
|
104
|
+
inputSchema: {
|
|
105
|
+
type: 'object',
|
|
106
|
+
properties: {
|
|
107
|
+
symptoms: { type: 'string', description: 'Symptom description (e.g. "gelbe Flecken auf Weizenblaettern", "Frass an Rapsblueten")' },
|
|
108
|
+
crop: { type: 'string', description: 'Affected crop for narrowing results' },
|
|
109
|
+
season: { type: 'string', description: 'Time of year (e.g. Fruehling, Sommer, Herbst)' },
|
|
110
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
111
|
+
},
|
|
112
|
+
required: ['symptoms'],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'get_approved_products',
|
|
117
|
+
description: 'Search approved plant protection products (Pflanzenschutzmittel) from the BLW Verzeichnis. Filter by active substance, target pest, or crop.',
|
|
118
|
+
inputSchema: {
|
|
119
|
+
type: 'object',
|
|
120
|
+
properties: {
|
|
121
|
+
active_substance: { type: 'string', description: 'Active substance name (e.g. Glyphosat, Mancozeb, Spinosad)' },
|
|
122
|
+
target_pest: { type: 'string', description: 'Target organism (e.g. Blattlaeuse, Unkraeuter, Pilzkrankheiten)' },
|
|
123
|
+
crop: { type: 'string', description: 'Target crop (e.g. Winterweizen, Kartoffeln, Reben)' },
|
|
124
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
const SearchPestsArgsSchema = z.object({
|
|
130
|
+
query: z.string(),
|
|
131
|
+
pest_type: z.string().optional(),
|
|
132
|
+
crop: z.string().optional(),
|
|
133
|
+
jurisdiction: z.string().optional(),
|
|
134
|
+
limit: z.number().optional(),
|
|
135
|
+
});
|
|
136
|
+
const PestDetailsArgsSchema = z.object({
|
|
137
|
+
pest_id: z.string(),
|
|
138
|
+
jurisdiction: z.string().optional(),
|
|
139
|
+
});
|
|
140
|
+
const TreatmentsArgsSchema = z.object({
|
|
141
|
+
pest_id: z.string(),
|
|
142
|
+
approach: z.string().optional(),
|
|
143
|
+
jurisdiction: z.string().optional(),
|
|
144
|
+
});
|
|
145
|
+
const IpmGuidanceArgsSchema = z.object({
|
|
146
|
+
crop: z.string(),
|
|
147
|
+
pest_id: z.string().optional(),
|
|
148
|
+
jurisdiction: z.string().optional(),
|
|
149
|
+
});
|
|
150
|
+
const CropThreatsArgsSchema = z.object({
|
|
151
|
+
crop: z.string(),
|
|
152
|
+
growth_stage: z.string().optional(),
|
|
153
|
+
jurisdiction: z.string().optional(),
|
|
154
|
+
});
|
|
155
|
+
const IdentifyArgsSchema = z.object({
|
|
156
|
+
symptoms: z.string(),
|
|
157
|
+
crop: z.string().optional(),
|
|
158
|
+
season: z.string().optional(),
|
|
159
|
+
jurisdiction: z.string().optional(),
|
|
160
|
+
});
|
|
161
|
+
const ApprovedProductsArgsSchema = z.object({
|
|
162
|
+
active_substance: z.string().optional(),
|
|
163
|
+
target_pest: z.string().optional(),
|
|
164
|
+
crop: z.string().optional(),
|
|
165
|
+
jurisdiction: z.string().optional(),
|
|
166
|
+
});
|
|
167
|
+
function textResult(data) {
|
|
168
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
169
|
+
}
|
|
170
|
+
function errorResult(message) {
|
|
171
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: message }) }], isError: true };
|
|
172
|
+
}
|
|
173
|
+
const db = createDatabase();
|
|
174
|
+
const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
|
|
175
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
176
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
177
|
+
const { name, arguments: args = {} } = request.params;
|
|
178
|
+
try {
|
|
179
|
+
switch (name) {
|
|
180
|
+
case 'about':
|
|
181
|
+
return textResult(handleAbout());
|
|
182
|
+
case 'list_sources':
|
|
183
|
+
return textResult(handleListSources(db));
|
|
184
|
+
case 'check_data_freshness':
|
|
185
|
+
return textResult(handleCheckFreshness(db));
|
|
186
|
+
case 'search_pests':
|
|
187
|
+
return textResult(handleSearchPests(db, SearchPestsArgsSchema.parse(args)));
|
|
188
|
+
case 'get_pest_details':
|
|
189
|
+
return textResult(handleGetPestDetails(db, PestDetailsArgsSchema.parse(args)));
|
|
190
|
+
case 'get_treatments':
|
|
191
|
+
return textResult(handleGetTreatments(db, TreatmentsArgsSchema.parse(args)));
|
|
192
|
+
case 'get_ipm_guidance':
|
|
193
|
+
return textResult(handleGetIpmGuidance(db, IpmGuidanceArgsSchema.parse(args)));
|
|
194
|
+
case 'search_crop_threats':
|
|
195
|
+
return textResult(handleSearchCropThreats(db, CropThreatsArgsSchema.parse(args)));
|
|
196
|
+
case 'identify_from_symptoms':
|
|
197
|
+
return textResult(handleIdentifyFromSymptoms(db, IdentifyArgsSchema.parse(args)));
|
|
198
|
+
case 'get_approved_products':
|
|
199
|
+
return textResult(handleGetApprovedProducts(db, ApprovedProductsArgsSchema.parse(args)));
|
|
200
|
+
default:
|
|
201
|
+
return errorResult(`Unknown tool: ${name}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
async function main() {
|
|
209
|
+
const transport = new StdioServerTransport();
|
|
210
|
+
await server.connect(transport);
|
|
211
|
+
}
|
|
212
|
+
main().catch((err) => {
|
|
213
|
+
process.stderr.write(`Fatal error: ${err.message}\n`);
|
|
214
|
+
process.exit(1);
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function handleAbout(): {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
version: string;
|
|
5
|
+
jurisdiction: "CH"[];
|
|
6
|
+
data_sources: string[];
|
|
7
|
+
tools_count: number;
|
|
8
|
+
links: {
|
|
9
|
+
homepage: string;
|
|
10
|
+
repository: string;
|
|
11
|
+
mcp_network: string;
|
|
12
|
+
};
|
|
13
|
+
_meta: import("../metadata.js").Meta;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=about.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"about.d.ts","sourceRoot":"","sources":["../../src/tools/about.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW;;;;;;;;;;;;;EAwB1B"}
|