@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.
Files changed (113) hide show
  1. package/.github/workflows/check-freshness.yml +49 -0
  2. package/.github/workflows/ci.yml +21 -0
  3. package/.github/workflows/codeql.yml +25 -0
  4. package/.github/workflows/ghcr-build.yml +45 -0
  5. package/.github/workflows/gitleaks.yml +18 -0
  6. package/.github/workflows/ingest.yml +59 -0
  7. package/.github/workflows/publish.yml +24 -0
  8. package/CHANGELOG.md +15 -0
  9. package/CODEOWNERS +1 -0
  10. package/COVERAGE.md +50 -0
  11. package/DISCLAIMER.md +48 -0
  12. package/Dockerfile +26 -0
  13. package/LICENSE +17 -0
  14. package/PRIVACY.md +23 -0
  15. package/README.md +116 -0
  16. package/SECURITY.md +25 -0
  17. package/TOOLS.md +142 -0
  18. package/data/coverage.json +24 -0
  19. package/data/database.db +0 -0
  20. package/data/sources.yml +36 -0
  21. package/dist/db.d.ts +25 -0
  22. package/dist/db.d.ts.map +1 -0
  23. package/dist/db.js +197 -0
  24. package/dist/db.js.map +1 -0
  25. package/dist/http-server.d.ts +2 -0
  26. package/dist/http-server.d.ts.map +1 -0
  27. package/dist/http-server.js +274 -0
  28. package/dist/http-server.js.map +1 -0
  29. package/dist/jurisdiction.d.ts +18 -0
  30. package/dist/jurisdiction.d.ts.map +1 -0
  31. package/dist/jurisdiction.js +16 -0
  32. package/dist/jurisdiction.js.map +1 -0
  33. package/dist/metadata.d.ts +10 -0
  34. package/dist/metadata.d.ts.map +1 -0
  35. package/dist/metadata.js +22 -0
  36. package/dist/metadata.js.map +1 -0
  37. package/dist/server.d.ts +3 -0
  38. package/dist/server.d.ts.map +1 -0
  39. package/dist/server.js +220 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/tools/about.d.ts +15 -0
  42. package/dist/tools/about.d.ts.map +1 -0
  43. package/dist/tools/about.js +27 -0
  44. package/dist/tools/about.js.map +1 -0
  45. package/dist/tools/check-environmental-compliance.d.ts +30 -0
  46. package/dist/tools/check-environmental-compliance.d.ts.map +1 -0
  47. package/dist/tools/check-environmental-compliance.js +103 -0
  48. package/dist/tools/check-environmental-compliance.js.map +1 -0
  49. package/dist/tools/check-freshness.d.ts +15 -0
  50. package/dist/tools/check-freshness.d.ts.map +1 -0
  51. package/dist/tools/check-freshness.js +26 -0
  52. package/dist/tools/check-freshness.js.map +1 -0
  53. package/dist/tools/get-ammonia-rules.d.ts +24 -0
  54. package/dist/tools/get-ammonia-rules.d.ts.map +1 -0
  55. package/dist/tools/get-ammonia-rules.js +31 -0
  56. package/dist/tools/get-ammonia-rules.js.map +1 -0
  57. package/dist/tools/get-bff-requirements.d.ts +26 -0
  58. package/dist/tools/get-bff-requirements.d.ts.map +1 -0
  59. package/dist/tools/get-bff-requirements.js +36 -0
  60. package/dist/tools/get-bff-requirements.js.map +1 -0
  61. package/dist/tools/get-buffer-zone-rules.d.ts +23 -0
  62. package/dist/tools/get-buffer-zone-rules.d.ts.map +1 -0
  63. package/dist/tools/get-buffer-zone-rules.js +30 -0
  64. package/dist/tools/get-buffer-zone-rules.js.map +1 -0
  65. package/dist/tools/get-eip-requirements.d.ts +31 -0
  66. package/dist/tools/get-eip-requirements.d.ts.map +1 -0
  67. package/dist/tools/get-eip-requirements.js +40 -0
  68. package/dist/tools/get-eip-requirements.js.map +1 -0
  69. package/dist/tools/get-nutrient-loss-limits.d.ts +24 -0
  70. package/dist/tools/get-nutrient-loss-limits.d.ts.map +1 -0
  71. package/dist/tools/get-nutrient-loss-limits.js +31 -0
  72. package/dist/tools/get-nutrient-loss-limits.js.map +1 -0
  73. package/dist/tools/get-water-protection-zones.d.ts +32 -0
  74. package/dist/tools/get-water-protection-zones.d.ts.map +1 -0
  75. package/dist/tools/get-water-protection-zones.js +36 -0
  76. package/dist/tools/get-water-protection-zones.js.map +1 -0
  77. package/dist/tools/list-sources.d.ts +18 -0
  78. package/dist/tools/list-sources.d.ts.map +1 -0
  79. package/dist/tools/list-sources.js +61 -0
  80. package/dist/tools/list-sources.js.map +1 -0
  81. package/dist/tools/search-environmental-rules.d.ts +25 -0
  82. package/dist/tools/search-environmental-rules.d.ts.map +1 -0
  83. package/dist/tools/search-environmental-rules.js +26 -0
  84. package/dist/tools/search-environmental-rules.js.map +1 -0
  85. package/docker-compose.yml +12 -0
  86. package/eslint.config.js +26 -0
  87. package/package.json +54 -0
  88. package/scripts/ingest.ts +911 -0
  89. package/server.json +16 -0
  90. package/src/db.ts +238 -0
  91. package/src/http-server.ts +307 -0
  92. package/src/jurisdiction.ts +30 -0
  93. package/src/metadata.ts +32 -0
  94. package/src/server.ts +244 -0
  95. package/src/tools/about.ts +28 -0
  96. package/src/tools/check-environmental-compliance.ts +143 -0
  97. package/src/tools/check-freshness.ts +42 -0
  98. package/src/tools/get-ammonia-rules.ts +44 -0
  99. package/src/tools/get-bff-requirements.ts +52 -0
  100. package/src/tools/get-buffer-zone-rules.ts +43 -0
  101. package/src/tools/get-eip-requirements.ts +57 -0
  102. package/src/tools/get-nutrient-loss-limits.ts +44 -0
  103. package/src/tools/get-water-protection-zones.ts +50 -0
  104. package/src/tools/list-sources.ts +75 -0
  105. package/src/tools/search-environmental-rules.ts +35 -0
  106. package/tests/db.test.ts +80 -0
  107. package/tests/helpers/seed-db.ts +173 -0
  108. package/tests/jurisdiction.test.ts +35 -0
  109. package/tests/tools/about.test.ts +26 -0
  110. package/tests/tools/check-freshness.test.ts +50 -0
  111. package/tests/tools/list-sources.test.ts +61 -0
  112. package/tests/tools/search-environmental-rules.test.ts +47 -0
  113. package/tsconfig.json +19 -0
@@ -0,0 +1,47 @@
1
+ import { describe, test, expect, beforeAll, afterAll } from 'vitest';
2
+ import { handleSearchEnvironmentalRules } from '../../src/tools/search-environmental-rules.js';
3
+ import { createSeededDatabase } from '../helpers/seed-db.js';
4
+ import type { Database } from '../../src/db.js';
5
+ import { existsSync, unlinkSync } from 'fs';
6
+
7
+ const TEST_DB = 'tests/test-search-env.db';
8
+
9
+ describe('search_environmental_rules tool', () => {
10
+ let db: Database;
11
+
12
+ beforeAll(() => {
13
+ db = createSeededDatabase(TEST_DB);
14
+ });
15
+
16
+ afterAll(() => {
17
+ db.close();
18
+ if (existsSync(TEST_DB)) unlinkSync(TEST_DB);
19
+ });
20
+
21
+ test('returns results for Schleppschlauch query', () => {
22
+ const result = handleSearchEnvironmentalRules(db, { query: 'Schleppschlauch' });
23
+ expect(result).toHaveProperty('results_count');
24
+ expect((result as { results_count: number }).results_count).toBeGreaterThan(0);
25
+ });
26
+
27
+ test('returns results for Grundwasser query', () => {
28
+ const result = handleSearchEnvironmentalRules(db, { query: 'Grundwasser' });
29
+ expect((result as { results_count: number }).results_count).toBeGreaterThan(0);
30
+ });
31
+
32
+ test('respects limit parameter', () => {
33
+ const result = handleSearchEnvironmentalRules(db, { query: 'Schutz', limit: 2 });
34
+ const typed = result as { results: unknown[] };
35
+ expect(typed.results.length).toBeLessThanOrEqual(2);
36
+ });
37
+
38
+ test('rejects unsupported jurisdiction', () => {
39
+ const result = handleSearchEnvironmentalRules(db, { query: 'Ammoniak', jurisdiction: 'FR' });
40
+ expect(result).toHaveProperty('error', 'jurisdiction_not_supported');
41
+ });
42
+
43
+ test('returns jurisdiction CH in results', () => {
44
+ const result = handleSearchEnvironmentalRules(db, { query: 'Cadmium' });
45
+ expect((result as { jurisdiction: string }).jurisdiction).toBe('CH');
46
+ });
47
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "outDir": "dist",
7
+ "rootDir": "src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "resolveJsonModule": true,
13
+ "declaration": true,
14
+ "declarationMap": true,
15
+ "sourceMap": true
16
+ },
17
+ "include": ["src/**/*"],
18
+ "exclude": ["node_modules", "dist", "tests", "scripts"]
19
+ }