@ansvar/ch-environmental-compliance-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 +15 -0
- package/CODEOWNERS +1 -0
- package/COVERAGE.md +50 -0
- package/DISCLAIMER.md +48 -0
- package/Dockerfile +26 -0
- package/LICENSE +17 -0
- package/PRIVACY.md +23 -0
- package/README.md +116 -0
- package/SECURITY.md +25 -0
- package/TOOLS.md +142 -0
- package/data/coverage.json +24 -0
- package/data/database.db +0 -0
- package/data/sources.yml +36 -0
- package/dist/db.d.ts +25 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +197 -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 +274 -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 +22 -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 +220 -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-environmental-compliance.d.ts +30 -0
- package/dist/tools/check-environmental-compliance.d.ts.map +1 -0
- package/dist/tools/check-environmental-compliance.js +103 -0
- package/dist/tools/check-environmental-compliance.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-ammonia-rules.d.ts +24 -0
- package/dist/tools/get-ammonia-rules.d.ts.map +1 -0
- package/dist/tools/get-ammonia-rules.js +31 -0
- package/dist/tools/get-ammonia-rules.js.map +1 -0
- package/dist/tools/get-bff-requirements.d.ts +26 -0
- package/dist/tools/get-bff-requirements.d.ts.map +1 -0
- package/dist/tools/get-bff-requirements.js +36 -0
- package/dist/tools/get-bff-requirements.js.map +1 -0
- package/dist/tools/get-buffer-zone-rules.d.ts +23 -0
- package/dist/tools/get-buffer-zone-rules.d.ts.map +1 -0
- package/dist/tools/get-buffer-zone-rules.js +30 -0
- package/dist/tools/get-buffer-zone-rules.js.map +1 -0
- package/dist/tools/get-eip-requirements.d.ts +31 -0
- package/dist/tools/get-eip-requirements.d.ts.map +1 -0
- package/dist/tools/get-eip-requirements.js +40 -0
- package/dist/tools/get-eip-requirements.js.map +1 -0
- package/dist/tools/get-nutrient-loss-limits.d.ts +24 -0
- package/dist/tools/get-nutrient-loss-limits.d.ts.map +1 -0
- package/dist/tools/get-nutrient-loss-limits.js +31 -0
- package/dist/tools/get-nutrient-loss-limits.js.map +1 -0
- package/dist/tools/get-water-protection-zones.d.ts +32 -0
- package/dist/tools/get-water-protection-zones.d.ts.map +1 -0
- package/dist/tools/get-water-protection-zones.js +36 -0
- package/dist/tools/get-water-protection-zones.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 +61 -0
- package/dist/tools/list-sources.js.map +1 -0
- package/dist/tools/search-environmental-rules.d.ts +25 -0
- package/dist/tools/search-environmental-rules.d.ts.map +1 -0
- package/dist/tools/search-environmental-rules.js +26 -0
- package/dist/tools/search-environmental-rules.js.map +1 -0
- package/docker-compose.yml +12 -0
- package/eslint.config.js +26 -0
- package/package.json +54 -0
- package/scripts/ingest.ts +911 -0
- package/server.json +16 -0
- package/src/db.ts +238 -0
- package/src/http-server.ts +307 -0
- package/src/jurisdiction.ts +30 -0
- package/src/metadata.ts +32 -0
- package/src/server.ts +244 -0
- package/src/tools/about.ts +28 -0
- package/src/tools/check-environmental-compliance.ts +143 -0
- package/src/tools/check-freshness.ts +42 -0
- package/src/tools/get-ammonia-rules.ts +44 -0
- package/src/tools/get-bff-requirements.ts +52 -0
- package/src/tools/get-buffer-zone-rules.ts +43 -0
- package/src/tools/get-eip-requirements.ts +57 -0
- package/src/tools/get-nutrient-loss-limits.ts +44 -0
- package/src/tools/get-water-protection-zones.ts +50 -0
- package/src/tools/list-sources.ts +75 -0
- package/src/tools/search-environmental-rules.ts +35 -0
- package/tests/db.test.ts +80 -0
- package/tests/helpers/seed-db.ts +173 -0
- package/tests/jurisdiction.test.ts +35 -0
- package/tests/tools/about.test.ts +26 -0
- package/tests/tools/check-freshness.test.ts +50 -0
- package/tests/tools/list-sources.test.ts +61 -0
- package/tests/tools/search-environmental-rules.test.ts +47 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,274 @@
|
|
|
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 { handleSearchEnvironmentalRules } from './tools/search-environmental-rules.js';
|
|
12
|
+
import { handleGetWaterProtectionZones } from './tools/get-water-protection-zones.js';
|
|
13
|
+
import { handleGetBufferZoneRules } from './tools/get-buffer-zone-rules.js';
|
|
14
|
+
import { handleGetAmmoniaRules } from './tools/get-ammonia-rules.js';
|
|
15
|
+
import { handleGetBffRequirements } from './tools/get-bff-requirements.js';
|
|
16
|
+
import { handleGetNutrientLossLimits } from './tools/get-nutrient-loss-limits.js';
|
|
17
|
+
import { handleGetEipRequirements } from './tools/get-eip-requirements.js';
|
|
18
|
+
import { handleCheckEnvironmentalCompliance } from './tools/check-environmental-compliance.js';
|
|
19
|
+
const SERVER_NAME = 'ch-environmental-compliance-mcp';
|
|
20
|
+
const SERVER_VERSION = '0.1.0';
|
|
21
|
+
const PORT = parseInt(process.env.PORT ?? '3000', 10);
|
|
22
|
+
const SearchArgsSchema = z.object({
|
|
23
|
+
query: z.string(),
|
|
24
|
+
topic: z.string().optional(),
|
|
25
|
+
jurisdiction: z.string().optional(),
|
|
26
|
+
limit: z.number().optional(),
|
|
27
|
+
});
|
|
28
|
+
const WaterProtectionArgsSchema = z.object({
|
|
29
|
+
zone_type: z.string().optional(),
|
|
30
|
+
jurisdiction: z.string().optional(),
|
|
31
|
+
});
|
|
32
|
+
const BufferZoneArgsSchema = z.object({
|
|
33
|
+
zone_type: z.string().optional(),
|
|
34
|
+
jurisdiction: z.string().optional(),
|
|
35
|
+
});
|
|
36
|
+
const AmmoniaArgsSchema = z.object({
|
|
37
|
+
technique: z.string().optional(),
|
|
38
|
+
jurisdiction: z.string().optional(),
|
|
39
|
+
});
|
|
40
|
+
const BffArgsSchema = z.object({
|
|
41
|
+
bff_type: z.string().optional(),
|
|
42
|
+
quality_level: z.string().optional(),
|
|
43
|
+
jurisdiction: z.string().optional(),
|
|
44
|
+
});
|
|
45
|
+
const NutrientLossArgsSchema = z.object({
|
|
46
|
+
nutrient: z.string().optional(),
|
|
47
|
+
jurisdiction: z.string().optional(),
|
|
48
|
+
});
|
|
49
|
+
const EipArgsSchema = z.object({
|
|
50
|
+
project_type: z.string().optional(),
|
|
51
|
+
jurisdiction: z.string().optional(),
|
|
52
|
+
});
|
|
53
|
+
const ComplianceArgsSchema = z.object({
|
|
54
|
+
facility_type: z.string(),
|
|
55
|
+
animal_count: z.number().optional(),
|
|
56
|
+
area_ha: z.number().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_environmental_rules',
|
|
77
|
+
description: 'Search Swiss environmental compliance rules across all topics: Gewaesserschutz, Ammoniak, BFF, Pufferstreifen, VBBo, UVP.',
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: 'object',
|
|
80
|
+
properties: {
|
|
81
|
+
query: { type: 'string', description: 'Free-text search query (German or English)' },
|
|
82
|
+
topic: { type: 'string', description: 'Filter by topic (e.g. Gewaesserschutz, Ammoniak, BFF, UVP, VBBo)' },
|
|
83
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
84
|
+
limit: { type: 'number', description: 'Max results (default: 20, max: 50)' },
|
|
85
|
+
},
|
|
86
|
+
required: ['query'],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'get_water_protection_zones',
|
|
91
|
+
description: 'Get Grundwasserschutzzonen (S1, S2, S3, Sm, Zu) with restrictions and legal basis. Based on GSchG/GSchV.',
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
zone_type: { type: 'string', description: 'Zone type: S1, S2, S3, Sm, Zu (omit for all zones)' },
|
|
96
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'get_buffer_zone_rules',
|
|
102
|
+
description: 'Get Pufferstreifen distances and requirements along water bodies, hedges, and boundaries. Based on OELN/ChemRRV.',
|
|
103
|
+
inputSchema: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
properties: {
|
|
106
|
+
zone_type: { type: 'string', description: 'Buffer type filter (e.g. Gewaesser, Hecke, Nachbar, SPe)' },
|
|
107
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'get_ammonia_rules',
|
|
113
|
+
description: 'Get Ammoniakemissionen rules: emission factors by technique, Schleppschlauch-Pflicht, Agrammon parameters. Based on LRV.',
|
|
114
|
+
inputSchema: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
technique: { type: 'string', description: 'Application technique filter (e.g. Schleppschlauch, Prallteller, Injektion)' },
|
|
118
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'get_bff_requirements',
|
|
124
|
+
description: 'Get BFF types, QI/QII payment rates, minimum area requirements, and botanical criteria. Based on DZV.',
|
|
125
|
+
inputSchema: {
|
|
126
|
+
type: 'object',
|
|
127
|
+
properties: {
|
|
128
|
+
bff_type: { type: 'string', description: 'BFF type filter (e.g. extensiv-wiese, buntbrache, hecke)' },
|
|
129
|
+
quality_level: { type: 'string', description: 'Quality level: QI or QII' },
|
|
130
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'get_nutrient_loss_limits',
|
|
136
|
+
description: 'Get Pa.Iv. 19.475 nutrient loss reduction targets for N and P through 2030.',
|
|
137
|
+
inputSchema: {
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: {
|
|
140
|
+
nutrient: { type: 'string', description: 'Nutrient filter: N or P' },
|
|
141
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'get_eip_requirements',
|
|
147
|
+
description: 'Get UVP thresholds for agricultural buildings and VBBo Richtwerte for soil contamination.',
|
|
148
|
+
inputSchema: {
|
|
149
|
+
type: 'object',
|
|
150
|
+
properties: {
|
|
151
|
+
project_type: { type: 'string', description: 'Project type filter (e.g. Stallbau, Biogasanlage)' },
|
|
152
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'check_environmental_compliance',
|
|
158
|
+
description: 'Check which environmental rules apply to a given agricultural operation.',
|
|
159
|
+
inputSchema: {
|
|
160
|
+
type: 'object',
|
|
161
|
+
properties: {
|
|
162
|
+
facility_type: { type: 'string', description: 'Type of operation (e.g. Milchwirtschaft, Schweinehaltung, Ackerbau)' },
|
|
163
|
+
animal_count: { type: 'number', description: 'Number of animals (GVE) — used for ammonia and UVP thresholds' },
|
|
164
|
+
area_ha: { type: 'number', description: 'Farm area in hectares — used for BFF minimum calculations' },
|
|
165
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
166
|
+
},
|
|
167
|
+
required: ['facility_type'],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
];
|
|
171
|
+
function textResult(data) {
|
|
172
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
173
|
+
}
|
|
174
|
+
function errorResult(message) {
|
|
175
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: message }) }], isError: true };
|
|
176
|
+
}
|
|
177
|
+
function registerTools(server, db) {
|
|
178
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
179
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
180
|
+
const { name, arguments: args = {} } = request.params;
|
|
181
|
+
try {
|
|
182
|
+
switch (name) {
|
|
183
|
+
case 'about':
|
|
184
|
+
return textResult(handleAbout());
|
|
185
|
+
case 'list_sources':
|
|
186
|
+
return textResult(handleListSources(db));
|
|
187
|
+
case 'check_data_freshness':
|
|
188
|
+
return textResult(handleCheckFreshness(db));
|
|
189
|
+
case 'search_environmental_rules':
|
|
190
|
+
return textResult(handleSearchEnvironmentalRules(db, SearchArgsSchema.parse(args)));
|
|
191
|
+
case 'get_water_protection_zones':
|
|
192
|
+
return textResult(handleGetWaterProtectionZones(db, WaterProtectionArgsSchema.parse(args)));
|
|
193
|
+
case 'get_buffer_zone_rules':
|
|
194
|
+
return textResult(handleGetBufferZoneRules(db, BufferZoneArgsSchema.parse(args)));
|
|
195
|
+
case 'get_ammonia_rules':
|
|
196
|
+
return textResult(handleGetAmmoniaRules(db, AmmoniaArgsSchema.parse(args)));
|
|
197
|
+
case 'get_bff_requirements':
|
|
198
|
+
return textResult(handleGetBffRequirements(db, BffArgsSchema.parse(args)));
|
|
199
|
+
case 'get_nutrient_loss_limits':
|
|
200
|
+
return textResult(handleGetNutrientLossLimits(db, NutrientLossArgsSchema.parse(args)));
|
|
201
|
+
case 'get_eip_requirements':
|
|
202
|
+
return textResult(handleGetEipRequirements(db, EipArgsSchema.parse(args)));
|
|
203
|
+
case 'check_environmental_compliance':
|
|
204
|
+
return textResult(handleCheckEnvironmentalCompliance(db, ComplianceArgsSchema.parse(args)));
|
|
205
|
+
default:
|
|
206
|
+
return errorResult(`Unknown tool: ${name}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const db = createDatabase();
|
|
215
|
+
const sessions = new Map();
|
|
216
|
+
function createMcpServer() {
|
|
217
|
+
const mcpServer = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
|
|
218
|
+
registerTools(mcpServer, db);
|
|
219
|
+
return mcpServer;
|
|
220
|
+
}
|
|
221
|
+
async function handleMCPRequest(req, res) {
|
|
222
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
223
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
224
|
+
const session = sessions.get(sessionId);
|
|
225
|
+
await session.transport.handleRequest(req, res);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (req.method === 'GET' || req.method === 'DELETE') {
|
|
229
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
230
|
+
res.end(JSON.stringify({ error: 'Invalid or missing session ID' }));
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const mcpServer = createMcpServer();
|
|
234
|
+
const transport = new StreamableHTTPServerTransport({
|
|
235
|
+
sessionIdGenerator: () => randomUUID(),
|
|
236
|
+
});
|
|
237
|
+
await mcpServer.connect(transport);
|
|
238
|
+
transport.onclose = () => {
|
|
239
|
+
if (transport.sessionId) {
|
|
240
|
+
sessions.delete(transport.sessionId);
|
|
241
|
+
}
|
|
242
|
+
mcpServer.close().catch(() => { });
|
|
243
|
+
};
|
|
244
|
+
await transport.handleRequest(req, res);
|
|
245
|
+
if (transport.sessionId) {
|
|
246
|
+
sessions.set(transport.sessionId, { transport, server: mcpServer });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const httpServer = createServer(async (req, res) => {
|
|
250
|
+
const url = new URL(req.url || '/', `http://localhost:${PORT}`);
|
|
251
|
+
if (url.pathname === '/health' && req.method === 'GET') {
|
|
252
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
253
|
+
res.end(JSON.stringify({ status: 'healthy', server: SERVER_NAME, version: SERVER_VERSION }));
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (url.pathname === '/mcp' || url.pathname === '/') {
|
|
257
|
+
try {
|
|
258
|
+
await handleMCPRequest(req, res);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
if (!res.headersSent) {
|
|
262
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
263
|
+
res.end(JSON.stringify({ error: err instanceof Error ? err.message : 'Internal server error' }));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
269
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
270
|
+
});
|
|
271
|
+
httpServer.listen(PORT, () => {
|
|
272
|
+
console.log(`${SERVER_NAME} v${SERVER_VERSION} listening on port ${PORT}`);
|
|
273
|
+
});
|
|
274
|
+
//# 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;AAcD,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAUzD"}
|
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const DISCLAIMER = 'Diese Daten dienen ausschliesslich der Information und stellen keine rechtliche oder umweltfachliche ' +
|
|
2
|
+
'Beratung dar. Vor Massnahmen im Gewaesserschutz, bei Ammoniakemissionen oder Biodiversitaetsfoerderflaechen ' +
|
|
3
|
+
'ist stets die zustaendige kantonale Fachstelle oder das BAFU zu konsultieren. Die Daten basieren auf dem ' +
|
|
4
|
+
'Gewaesserschutzgesetz (GSchG, SR 814.20), der Gewaesserschutzverordnung (GSchV, SR 814.201), der ' +
|
|
5
|
+
'Luftreinhalte-Verordnung (LRV, SR 814.318.142.1), der Direktzahlungsverordnung (DZV, SR 910.13) sowie ' +
|
|
6
|
+
'Publikationen von BAFU, BLW und Agroscope. Kantonale Abweichungen und betriebsspezifische Auflagen sind ' +
|
|
7
|
+
'eigenstaendig zu pruefen. / ' +
|
|
8
|
+
'This data is provided for informational purposes only and does not constitute legal or environmental ' +
|
|
9
|
+
'compliance advice. Always consult the relevant cantonal authority or BAFU before taking action. Data sourced ' +
|
|
10
|
+
'from GSchG, LRV, DZV, BAFU, BLW, and Agroscope publications.';
|
|
11
|
+
export function buildMeta(overrides) {
|
|
12
|
+
return {
|
|
13
|
+
disclaimer: DISCLAIMER,
|
|
14
|
+
data_age: overrides?.data_age ?? 'unknown',
|
|
15
|
+
source_url: overrides?.source_url ?? 'https://www.bafu.admin.ch/bafu/de/home/themen/wasser/fachinformationen/gewaesserschutz.html',
|
|
16
|
+
copyright: 'Data: BAFU, BLW, Agroscope — used under public-sector information principles. Server: Apache-2.0 Ansvar Systems.',
|
|
17
|
+
server: 'ch-environmental-compliance-mcp',
|
|
18
|
+
version: '0.1.0',
|
|
19
|
+
...overrides,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,GACd,uGAAuG;IACvG,8GAA8G;IAC9G,2GAA2G;IAC3G,mGAAmG;IACnG,wGAAwG;IACxG,0GAA0G;IAC1G,8BAA8B;IAC9B,uGAAuG;IACvG,+GAA+G;IAC/G,8DAA8D,CAAC;AAEjE,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,6FAA6F;QAClI,SAAS,EAAE,kHAAkH;QAC7H,MAAM,EAAE,iCAAiC;QACzC,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,220 @@
|
|
|
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 { handleSearchEnvironmentalRules } from './tools/search-environmental-rules.js';
|
|
11
|
+
import { handleGetWaterProtectionZones } from './tools/get-water-protection-zones.js';
|
|
12
|
+
import { handleGetBufferZoneRules } from './tools/get-buffer-zone-rules.js';
|
|
13
|
+
import { handleGetAmmoniaRules } from './tools/get-ammonia-rules.js';
|
|
14
|
+
import { handleGetBffRequirements } from './tools/get-bff-requirements.js';
|
|
15
|
+
import { handleGetNutrientLossLimits } from './tools/get-nutrient-loss-limits.js';
|
|
16
|
+
import { handleGetEipRequirements } from './tools/get-eip-requirements.js';
|
|
17
|
+
import { handleCheckEnvironmentalCompliance } from './tools/check-environmental-compliance.js';
|
|
18
|
+
const SERVER_NAME = 'ch-environmental-compliance-mcp';
|
|
19
|
+
const SERVER_VERSION = '0.1.0';
|
|
20
|
+
const TOOLS = [
|
|
21
|
+
{
|
|
22
|
+
name: 'about',
|
|
23
|
+
description: 'Get server metadata: name, version, coverage, data sources, and links.',
|
|
24
|
+
inputSchema: { type: 'object', properties: {} },
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'list_sources',
|
|
28
|
+
description: 'List all data sources with authority, URL, license, and freshness info.',
|
|
29
|
+
inputSchema: { type: 'object', properties: {} },
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'check_data_freshness',
|
|
33
|
+
description: 'Check when data was last ingested, staleness status, and how to trigger a refresh.',
|
|
34
|
+
inputSchema: { type: 'object', properties: {} },
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'search_environmental_rules',
|
|
38
|
+
description: 'Search Swiss environmental compliance rules across all topics: Gewaesserschutz, Ammoniak, BFF, Pufferstreifen, VBBo, UVP. Use for broad queries.',
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
properties: {
|
|
42
|
+
query: { type: 'string', description: 'Free-text search query (German or English)' },
|
|
43
|
+
topic: { type: 'string', description: 'Filter by topic (e.g. Gewaesserschutz, Ammoniak, BFF, UVP, VBBo)' },
|
|
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_water_protection_zones',
|
|
52
|
+
description: 'Get Grundwasserschutzzonen (S1, S2, S3, Sm, Zu) with restrictions and legal basis. Based on GSchG/GSchV.',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
zone_type: { type: 'string', description: 'Zone type: S1, S2, S3, Sm, Zu (omit for all zones)' },
|
|
57
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'get_buffer_zone_rules',
|
|
63
|
+
description: 'Get Pufferstreifen (buffer zone) distances and requirements along water bodies, hedges, and field boundaries. Based on OELN/ChemRRV.',
|
|
64
|
+
inputSchema: {
|
|
65
|
+
type: 'object',
|
|
66
|
+
properties: {
|
|
67
|
+
zone_type: { type: 'string', description: 'Buffer type filter (e.g. Gewaesser, Hecke, Nachbar, SPe)' },
|
|
68
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'get_ammonia_rules',
|
|
74
|
+
description: 'Get Ammoniakemissionen rules: emission factors by technique, Schleppschlauch-Pflicht, Agrammon model parameters. Based on LRV.',
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
technique: { type: 'string', description: 'Application technique filter (e.g. Schleppschlauch, Prallteller, Injektion)' },
|
|
79
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'get_bff_requirements',
|
|
85
|
+
description: 'Get Biodiversitaetsfoerderflaechen (BFF) types, QI/QII payment rates, minimum area requirements, and botanical criteria. Based on DZV.',
|
|
86
|
+
inputSchema: {
|
|
87
|
+
type: 'object',
|
|
88
|
+
properties: {
|
|
89
|
+
bff_type: { type: 'string', description: 'BFF type filter (e.g. extensiv-wiese, buntbrache, hecke)' },
|
|
90
|
+
quality_level: { type: 'string', description: 'Quality level: QI or QII' },
|
|
91
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'get_nutrient_loss_limits',
|
|
97
|
+
description: 'Get Pa.Iv. 19.475 nutrient loss reduction targets (Absenkpfad) for N and P through 2030. Yearly milestones and Suisse-Bilanz tolerance changes.',
|
|
98
|
+
inputSchema: {
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: {
|
|
101
|
+
nutrient: { type: 'string', description: 'Nutrient filter: N (Stickstoff) or P (Phosphor)' },
|
|
102
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'get_eip_requirements',
|
|
108
|
+
description: 'Get UVP (Umweltvertraeglichkeitspruefung) thresholds for agricultural buildings and VBBo Richtwerte for soil contamination.',
|
|
109
|
+
inputSchema: {
|
|
110
|
+
type: 'object',
|
|
111
|
+
properties: {
|
|
112
|
+
project_type: { type: 'string', description: 'Project type filter (e.g. Stallbau, Biogasanlage, Schweinehaltung)' },
|
|
113
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'check_environmental_compliance',
|
|
119
|
+
description: 'Check which environmental rules apply to a given agricultural operation: water protection, buffer zones, ammonia, BFF, UVP, nutrient loss limits.',
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
facility_type: { type: 'string', description: 'Type of operation (e.g. Milchwirtschaft, Schweinehaltung, Ackerbau, Gemuese)' },
|
|
124
|
+
animal_count: { type: 'number', description: 'Number of animals (GVE) — used for ammonia and UVP thresholds' },
|
|
125
|
+
area_ha: { type: 'number', description: 'Farm area in hectares — used for BFF minimum calculations' },
|
|
126
|
+
jurisdiction: { type: 'string', description: 'ISO 3166-1 alpha-2 code (default: CH)' },
|
|
127
|
+
},
|
|
128
|
+
required: ['facility_type'],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
const SearchArgsSchema = z.object({
|
|
133
|
+
query: z.string(),
|
|
134
|
+
topic: z.string().optional(),
|
|
135
|
+
jurisdiction: z.string().optional(),
|
|
136
|
+
limit: z.number().optional(),
|
|
137
|
+
});
|
|
138
|
+
const WaterProtectionArgsSchema = z.object({
|
|
139
|
+
zone_type: z.string().optional(),
|
|
140
|
+
jurisdiction: z.string().optional(),
|
|
141
|
+
});
|
|
142
|
+
const BufferZoneArgsSchema = z.object({
|
|
143
|
+
zone_type: z.string().optional(),
|
|
144
|
+
jurisdiction: z.string().optional(),
|
|
145
|
+
});
|
|
146
|
+
const AmmoniaArgsSchema = z.object({
|
|
147
|
+
technique: z.string().optional(),
|
|
148
|
+
jurisdiction: z.string().optional(),
|
|
149
|
+
});
|
|
150
|
+
const BffArgsSchema = z.object({
|
|
151
|
+
bff_type: z.string().optional(),
|
|
152
|
+
quality_level: z.string().optional(),
|
|
153
|
+
jurisdiction: z.string().optional(),
|
|
154
|
+
});
|
|
155
|
+
const NutrientLossArgsSchema = z.object({
|
|
156
|
+
nutrient: z.string().optional(),
|
|
157
|
+
jurisdiction: z.string().optional(),
|
|
158
|
+
});
|
|
159
|
+
const EipArgsSchema = z.object({
|
|
160
|
+
project_type: z.string().optional(),
|
|
161
|
+
jurisdiction: z.string().optional(),
|
|
162
|
+
});
|
|
163
|
+
const ComplianceArgsSchema = z.object({
|
|
164
|
+
facility_type: z.string(),
|
|
165
|
+
animal_count: z.number().optional(),
|
|
166
|
+
area_ha: z.number().optional(),
|
|
167
|
+
jurisdiction: z.string().optional(),
|
|
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
|
+
const db = createDatabase();
|
|
176
|
+
const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
|
|
177
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
178
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
179
|
+
const { name, arguments: args = {} } = request.params;
|
|
180
|
+
try {
|
|
181
|
+
switch (name) {
|
|
182
|
+
case 'about':
|
|
183
|
+
return textResult(handleAbout());
|
|
184
|
+
case 'list_sources':
|
|
185
|
+
return textResult(handleListSources(db));
|
|
186
|
+
case 'check_data_freshness':
|
|
187
|
+
return textResult(handleCheckFreshness(db));
|
|
188
|
+
case 'search_environmental_rules':
|
|
189
|
+
return textResult(handleSearchEnvironmentalRules(db, SearchArgsSchema.parse(args)));
|
|
190
|
+
case 'get_water_protection_zones':
|
|
191
|
+
return textResult(handleGetWaterProtectionZones(db, WaterProtectionArgsSchema.parse(args)));
|
|
192
|
+
case 'get_buffer_zone_rules':
|
|
193
|
+
return textResult(handleGetBufferZoneRules(db, BufferZoneArgsSchema.parse(args)));
|
|
194
|
+
case 'get_ammonia_rules':
|
|
195
|
+
return textResult(handleGetAmmoniaRules(db, AmmoniaArgsSchema.parse(args)));
|
|
196
|
+
case 'get_bff_requirements':
|
|
197
|
+
return textResult(handleGetBffRequirements(db, BffArgsSchema.parse(args)));
|
|
198
|
+
case 'get_nutrient_loss_limits':
|
|
199
|
+
return textResult(handleGetNutrientLossLimits(db, NutrientLossArgsSchema.parse(args)));
|
|
200
|
+
case 'get_eip_requirements':
|
|
201
|
+
return textResult(handleGetEipRequirements(db, EipArgsSchema.parse(args)));
|
|
202
|
+
case 'check_environmental_compliance':
|
|
203
|
+
return textResult(handleCheckEnvironmentalCompliance(db, ComplianceArgsSchema.parse(args)));
|
|
204
|
+
default:
|
|
205
|
+
return errorResult(`Unknown tool: ${name}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
async function main() {
|
|
213
|
+
const transport = new StdioServerTransport();
|
|
214
|
+
await server.connect(transport);
|
|
215
|
+
}
|
|
216
|
+
main().catch((err) => {
|
|
217
|
+
process.stderr.write(`Fatal error: ${err.message}\n`);
|
|
218
|
+
process.exit(1);
|
|
219
|
+
});
|
|
220
|
+
//# 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"}
|