@ansvar/rwandan-law-mcp 1.0.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 (124) hide show
  1. package/LICENSE +110 -0
  2. package/README.md +83 -0
  3. package/dist/__tests__/contract/golden.test.d.ts +9 -0
  4. package/dist/__tests__/contract/golden.test.d.ts.map +1 -0
  5. package/dist/__tests__/contract/golden.test.js +76 -0
  6. package/dist/__tests__/contract/golden.test.js.map +1 -0
  7. package/dist/api/health.d.ts +3 -0
  8. package/dist/api/health.d.ts.map +1 -0
  9. package/dist/api/health.js +101 -0
  10. package/dist/api/health.js.map +1 -0
  11. package/dist/api/mcp.d.ts +3 -0
  12. package/dist/api/mcp.d.ts.map +1 -0
  13. package/dist/api/mcp.js +119 -0
  14. package/dist/api/mcp.js.map +1 -0
  15. package/dist/scripts/build-db.d.ts +11 -0
  16. package/dist/scripts/build-db.d.ts.map +1 -0
  17. package/dist/scripts/build-db.js +375 -0
  18. package/dist/scripts/build-db.js.map +1 -0
  19. package/dist/scripts/drift-detect.d.ts +9 -0
  20. package/dist/scripts/drift-detect.d.ts.map +1 -0
  21. package/dist/scripts/drift-detect.js +62 -0
  22. package/dist/scripts/drift-detect.js.map +1 -0
  23. package/dist/scripts/ingest.d.ts +10 -0
  24. package/dist/scripts/ingest.d.ts.map +1 -0
  25. package/dist/scripts/ingest.js +333 -0
  26. package/dist/scripts/ingest.js.map +1 -0
  27. package/dist/scripts/lib/fetcher.d.ts +26 -0
  28. package/dist/scripts/lib/fetcher.d.ts.map +1 -0
  29. package/dist/scripts/lib/fetcher.js +102 -0
  30. package/dist/scripts/lib/fetcher.js.map +1 -0
  31. package/dist/scripts/lib/parser.d.ts +60 -0
  32. package/dist/scripts/lib/parser.d.ts.map +1 -0
  33. package/dist/scripts/lib/parser.js +560 -0
  34. package/dist/scripts/lib/parser.js.map +1 -0
  35. package/dist/scripts/lib/pdf.d.ts +7 -0
  36. package/dist/scripts/lib/pdf.d.ts.map +1 -0
  37. package/dist/scripts/lib/pdf.js +124 -0
  38. package/dist/scripts/lib/pdf.js.map +1 -0
  39. package/dist/src/capabilities.d.ts +16 -0
  40. package/dist/src/capabilities.d.ts.map +1 -0
  41. package/dist/src/capabilities.js +43 -0
  42. package/dist/src/capabilities.js.map +1 -0
  43. package/dist/src/constants.d.ts +7 -0
  44. package/dist/src/constants.d.ts.map +1 -0
  45. package/dist/src/constants.js +7 -0
  46. package/dist/src/constants.js.map +1 -0
  47. package/dist/src/index.d.ts +8 -0
  48. package/dist/src/index.d.ts.map +1 -0
  49. package/dist/src/index.js +80 -0
  50. package/dist/src/index.js.map +1 -0
  51. package/dist/src/tools/about.d.ts +45 -0
  52. package/dist/src/tools/about.d.ts.map +1 -0
  53. package/dist/src/tools/about.js +54 -0
  54. package/dist/src/tools/about.js.map +1 -0
  55. package/dist/src/tools/build-legal-stance.d.ts +21 -0
  56. package/dist/src/tools/build-legal-stance.d.ts.map +1 -0
  57. package/dist/src/tools/build-legal-stance.js +46 -0
  58. package/dist/src/tools/build-legal-stance.js.map +1 -0
  59. package/dist/src/tools/check-currency.d.ts +20 -0
  60. package/dist/src/tools/check-currency.d.ts.map +1 -0
  61. package/dist/src/tools/check-currency.js +41 -0
  62. package/dist/src/tools/check-currency.js.map +1 -0
  63. package/dist/src/tools/format-citation.d.ts +14 -0
  64. package/dist/src/tools/format-citation.d.ts.map +1 -0
  65. package/dist/src/tools/format-citation.js +28 -0
  66. package/dist/src/tools/format-citation.js.map +1 -0
  67. package/dist/src/tools/get-eu-basis.d.ts +21 -0
  68. package/dist/src/tools/get-eu-basis.d.ts.map +1 -0
  69. package/dist/src/tools/get-eu-basis.js +52 -0
  70. package/dist/src/tools/get-eu-basis.js.map +1 -0
  71. package/dist/src/tools/get-provision-eu-basis.d.ts +20 -0
  72. package/dist/src/tools/get-provision-eu-basis.d.ts.map +1 -0
  73. package/dist/src/tools/get-provision-eu-basis.js +45 -0
  74. package/dist/src/tools/get-provision-eu-basis.js.map +1 -0
  75. package/dist/src/tools/get-provision.d.ts +24 -0
  76. package/dist/src/tools/get-provision.d.ts.map +1 -0
  77. package/dist/src/tools/get-provision.js +80 -0
  78. package/dist/src/tools/get-provision.js.map +1 -0
  79. package/dist/src/tools/get-rwandan-implementations.d.ts +21 -0
  80. package/dist/src/tools/get-rwandan-implementations.d.ts.map +1 -0
  81. package/dist/src/tools/get-rwandan-implementations.js +42 -0
  82. package/dist/src/tools/get-rwandan-implementations.js.map +1 -0
  83. package/dist/src/tools/list-sources.d.ts +25 -0
  84. package/dist/src/tools/list-sources.d.ts.map +1 -0
  85. package/dist/src/tools/list-sources.js +41 -0
  86. package/dist/src/tools/list-sources.js.map +1 -0
  87. package/dist/src/tools/registry.d.ts +13 -0
  88. package/dist/src/tools/registry.d.ts.map +1 -0
  89. package/dist/src/tools/registry.js +365 -0
  90. package/dist/src/tools/registry.js.map +1 -0
  91. package/dist/src/tools/search-eu-implementations.d.ts +24 -0
  92. package/dist/src/tools/search-eu-implementations.d.ts.map +1 -0
  93. package/dist/src/tools/search-eu-implementations.js +58 -0
  94. package/dist/src/tools/search-eu-implementations.js.map +1 -0
  95. package/dist/src/tools/search-legislation.d.ts +24 -0
  96. package/dist/src/tools/search-legislation.d.ts.map +1 -0
  97. package/dist/src/tools/search-legislation.js +54 -0
  98. package/dist/src/tools/search-legislation.js.map +1 -0
  99. package/dist/src/tools/validate-citation.d.ts +20 -0
  100. package/dist/src/tools/validate-citation.d.ts.map +1 -0
  101. package/dist/src/tools/validate-citation.js +107 -0
  102. package/dist/src/tools/validate-citation.js.map +1 -0
  103. package/dist/src/tools/validate-eu-compliance.d.ts +20 -0
  104. package/dist/src/tools/validate-eu-compliance.d.ts.map +1 -0
  105. package/dist/src/tools/validate-eu-compliance.js +98 -0
  106. package/dist/src/tools/validate-eu-compliance.js.map +1 -0
  107. package/dist/src/utils/as-of-date.d.ts +9 -0
  108. package/dist/src/utils/as-of-date.d.ts.map +1 -0
  109. package/dist/src/utils/as-of-date.js +25 -0
  110. package/dist/src/utils/as-of-date.js.map +1 -0
  111. package/dist/src/utils/fts-query.d.ts +19 -0
  112. package/dist/src/utils/fts-query.d.ts.map +1 -0
  113. package/dist/src/utils/fts-query.js +47 -0
  114. package/dist/src/utils/fts-query.js.map +1 -0
  115. package/dist/src/utils/metadata.d.ts +16 -0
  116. package/dist/src/utils/metadata.d.ts.map +1 -0
  117. package/dist/src/utils/metadata.js +22 -0
  118. package/dist/src/utils/metadata.js.map +1 -0
  119. package/dist/src/utils/statute-id.d.ts +18 -0
  120. package/dist/src/utils/statute-id.d.ts.map +1 -0
  121. package/dist/src/utils/statute-id.js +34 -0
  122. package/dist/src/utils/statute-id.js.map +1 -0
  123. package/package.json +74 -0
  124. package/server.json +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-citation.js","sourceRoot":"","sources":["../../../src/tools/format-citation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA0B;IAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,gDAAgD;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC7F,yDAAyD;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAEzG,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAE7D,IAAI,SAAiB,CAAC;IACtB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACvE,MAAM;QACR,KAAK,UAAU;YACb,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,MAAM;QACR,KAAK,MAAM,CAAC;QACZ;YACE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,MAAM;IACV,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * get_eu_basis — Get EU legal basis for an Rwandan statute.
3
+ */
4
+ import type Database from '@ansvar/mcp-sqlite';
5
+ import { type ToolResponse } from '../utils/metadata.js';
6
+ export interface GetEUBasisInput {
7
+ document_id: string;
8
+ include_articles?: boolean;
9
+ reference_types?: string[];
10
+ }
11
+ export interface EUBasisResult {
12
+ eu_document_id: string;
13
+ eu_document_type: string;
14
+ eu_document_title: string | null;
15
+ reference_type: string;
16
+ reference_count: number;
17
+ implementation_status: string | null;
18
+ articles?: string[];
19
+ }
20
+ export declare function getEUBasis(db: InstanceType<typeof Database>, input: GetEUBasisInput): Promise<ToolResponse<EUBasisResult[]>>;
21
+ //# sourceMappingURL=get-eu-basis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-eu-basis.d.ts","sourceRoot":"","sources":["../../../src/tools/get-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAqDxC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * get_eu_basis — Get EU legal basis for an Rwandan statute.
3
+ */
4
+ import { resolveDocumentId } from '../utils/statute-id.js';
5
+ import { generateResponseMetadata } from '../utils/metadata.js';
6
+ export async function getEUBasis(db, input) {
7
+ const resolvedId = resolveDocumentId(db, input.document_id);
8
+ if (!resolvedId) {
9
+ return { results: [], _metadata: generateResponseMetadata(db) };
10
+ }
11
+ // Check if EU reference tables exist
12
+ try {
13
+ db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
14
+ }
15
+ catch {
16
+ return {
17
+ results: [],
18
+ _metadata: {
19
+ ...generateResponseMetadata(db),
20
+ ...{ note: 'EU references not available in this database tier' },
21
+ },
22
+ };
23
+ }
24
+ let sql = `
25
+ SELECT
26
+ er.eu_document_id,
27
+ ed.type as eu_document_type,
28
+ COALESCE(ed.title, ed.short_name) as eu_document_title,
29
+ er.reference_type,
30
+ COUNT(*) as reference_count,
31
+ MAX(er.implementation_status) as implementation_status
32
+ FROM eu_references er
33
+ LEFT JOIN eu_documents ed ON ed.id = er.eu_document_id
34
+ WHERE er.document_id = ?
35
+ `;
36
+ const params = [resolvedId];
37
+ if (input.reference_types && input.reference_types.length > 0) {
38
+ const placeholders = input.reference_types.map(() => '?').join(', ');
39
+ sql += ` AND er.reference_type IN (${placeholders})`;
40
+ params.push(...input.reference_types);
41
+ }
42
+ sql += ' GROUP BY er.eu_document_id, er.reference_type ORDER BY reference_count DESC';
43
+ const rows = db.prepare(sql).all(...params);
44
+ if (input.include_articles) {
45
+ for (const row of rows) {
46
+ const articles = db.prepare('SELECT DISTINCT eu_article FROM eu_references WHERE document_id = ? AND eu_document_id = ? AND eu_article IS NOT NULL').all(resolvedId, row.eu_document_id);
47
+ row.articles = articles.map(a => a.eu_article);
48
+ }
49
+ }
50
+ return { results: rows, _metadata: generateResponseMetadata(db) };
51
+ }
52
+ //# sourceMappingURL=get-eu-basis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-eu-basis.js","sourceRoot":"","sources":["../../../src/tools/get-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAkBnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAiC,EACjC,KAAsB;IAEtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,mDAAmD,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,GAAG;;;;;;;;;;;GAWT,CAAC;IACF,MAAM,MAAM,GAAa,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,GAAG,IAAI,8BAA8B,YAAY,GAAG,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,IAAI,8EAA8E,CAAC;IAEtF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAoB,CAAC;IAE/D,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,uHAAuH,CACxH,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,cAAc,CAA6B,CAAC;YAClE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * get_provision_eu_basis — Get EU legal basis for a specific provision.
3
+ */
4
+ import type Database from '@ansvar/mcp-sqlite';
5
+ import { type ToolResponse } from '../utils/metadata.js';
6
+ export interface GetProvisionEUBasisInput {
7
+ document_id: string;
8
+ provision_ref: string;
9
+ }
10
+ export interface ProvisionEUBasisResult {
11
+ eu_document_id: string;
12
+ eu_document_type: string;
13
+ eu_document_title: string | null;
14
+ eu_article: string | null;
15
+ reference_type: string;
16
+ reference_context: string | null;
17
+ full_citation: string | null;
18
+ }
19
+ export declare function getProvisionEUBasis(db: InstanceType<typeof Database>, input: GetProvisionEUBasisInput): Promise<ToolResponse<ProvisionEUBasisResult[]>>;
20
+ //# sourceMappingURL=get-provision-eu-basis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-provision-eu-basis.d.ts","sourceRoot":"","sources":["../../../src/tools/get-provision-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC,CA4CjD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * get_provision_eu_basis — Get EU legal basis for a specific provision.
3
+ */
4
+ import { resolveDocumentId } from '../utils/statute-id.js';
5
+ import { generateResponseMetadata } from '../utils/metadata.js';
6
+ export async function getProvisionEUBasis(db, input) {
7
+ const resolvedId = resolveDocumentId(db, input.document_id);
8
+ if (!resolvedId) {
9
+ return { results: [], _metadata: generateResponseMetadata(db) };
10
+ }
11
+ try {
12
+ db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
13
+ }
14
+ catch {
15
+ return {
16
+ results: [],
17
+ _metadata: {
18
+ ...generateResponseMetadata(db),
19
+ ...{ note: 'EU references not available in this database tier' },
20
+ },
21
+ };
22
+ }
23
+ // Find the provision
24
+ const ref = input.provision_ref.trim();
25
+ const provision = db.prepare("SELECT id FROM legal_provisions WHERE document_id = ? AND (provision_ref = ? OR provision_ref = ? OR section = ?)").get(resolvedId, ref, `s${ref}`, ref);
26
+ if (!provision) {
27
+ return { results: [], _metadata: generateResponseMetadata(db) };
28
+ }
29
+ const rows = db.prepare(`
30
+ SELECT
31
+ er.eu_document_id,
32
+ ed.type as eu_document_type,
33
+ COALESCE(ed.title, ed.short_name) as eu_document_title,
34
+ er.eu_article,
35
+ er.reference_type,
36
+ er.reference_context,
37
+ er.full_citation
38
+ FROM eu_references er
39
+ LEFT JOIN eu_documents ed ON ed.id = er.eu_document_id
40
+ WHERE er.provision_id = ?
41
+ ORDER BY er.reference_type, er.eu_document_id
42
+ `).all(provision.id);
43
+ return { results: rows, _metadata: generateResponseMetadata(db) };
44
+ }
45
+ //# sourceMappingURL=get-provision-eu-basis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-provision-eu-basis.js","sourceRoot":"","sources":["../../../src/tools/get-provision-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAiBnF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAiC,EACjC,KAA+B;IAE/B,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,mDAAmD,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,mHAAmH,CACpH,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,CAA+B,CAAC;IAErE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAavB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAA6B,CAAC;IAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * get_provision — Retrieve specific provision(s) from an Rwandan statute.
3
+ */
4
+ import type Database from '@ansvar/mcp-sqlite';
5
+ import { type ToolResponse } from '../utils/metadata.js';
6
+ export interface GetProvisionInput {
7
+ document_id: string;
8
+ section?: string;
9
+ provision_ref?: string;
10
+ as_of_date?: string;
11
+ }
12
+ export interface ProvisionResult {
13
+ document_id: string;
14
+ document_title: string;
15
+ provision_ref: string;
16
+ chapter: string | null;
17
+ section: string;
18
+ title: string | null;
19
+ content: string;
20
+ section_number?: string;
21
+ url?: string;
22
+ }
23
+ export declare function getProvision(db: InstanceType<typeof Database>, input: GetProvisionInput): Promise<ToolResponse<ProvisionResult[]>>;
24
+ //# sourceMappingURL=get-provision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-provision.d.ts","sourceRoot":"","sources":["../../../src/tools/get-provision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CA+F1C"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * get_provision — Retrieve specific provision(s) from an Rwandan statute.
3
+ */
4
+ import { resolveDocumentId } from '../utils/statute-id.js';
5
+ import { generateResponseMetadata } from '../utils/metadata.js';
6
+ export async function getProvision(db, input) {
7
+ const resolvedId = resolveDocumentId(db, input.document_id);
8
+ if (!resolvedId) {
9
+ return {
10
+ results: [],
11
+ _metadata: {
12
+ ...generateResponseMetadata(db),
13
+ ...{ note: `No document found matching "${input.document_id}"` },
14
+ },
15
+ };
16
+ }
17
+ const docRow = db.prepare('SELECT id, title, url FROM legal_documents WHERE id = ?').get(resolvedId);
18
+ if (!docRow) {
19
+ return { results: [], _metadata: generateResponseMetadata(db) };
20
+ }
21
+ // Specific provision lookup
22
+ const ref = input.provision_ref ?? input.section;
23
+ if (ref) {
24
+ const refTrimmed = ref.trim();
25
+ // Try direct provision_ref match
26
+ let provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, refTrimmed);
27
+ // Try with "s" prefix (e.g., "1" -> "s1")
28
+ if (!provision) {
29
+ provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, `s${refTrimmed}`);
30
+ }
31
+ // Try section column match
32
+ if (!provision) {
33
+ provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND section = ?').get(resolvedId, refTrimmed);
34
+ }
35
+ // Try LIKE match for flexible input
36
+ if (!provision) {
37
+ provision = db.prepare("SELECT * FROM legal_provisions WHERE document_id = ? AND (provision_ref LIKE ? OR section LIKE ?)").get(resolvedId, `%${refTrimmed}%`, `%${refTrimmed}%`);
38
+ }
39
+ if (provision) {
40
+ return {
41
+ results: [{
42
+ document_id: resolvedId,
43
+ document_title: docRow.title,
44
+ provision_ref: String(provision.provision_ref),
45
+ chapter: provision.chapter,
46
+ section: String(provision.section),
47
+ title: provision.title,
48
+ content: String(provision.content),
49
+ section_number: String(provision.provision_ref).replace(/^s/, ''),
50
+ url: docRow.url ?? undefined,
51
+ }],
52
+ _metadata: generateResponseMetadata(db),
53
+ };
54
+ }
55
+ return {
56
+ results: [],
57
+ _metadata: {
58
+ ...generateResponseMetadata(db),
59
+ ...{ note: `Provision "${ref}" not found in document "${resolvedId}"` },
60
+ },
61
+ };
62
+ }
63
+ // Return all provisions for the document
64
+ const provisions = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? ORDER BY id').all(resolvedId);
65
+ return {
66
+ results: provisions.map(p => ({
67
+ document_id: resolvedId,
68
+ document_title: docRow.title,
69
+ provision_ref: String(p.provision_ref),
70
+ chapter: p.chapter,
71
+ section: String(p.section),
72
+ title: p.title,
73
+ content: String(p.content),
74
+ section_number: String(p.provision_ref).replace(/^s/, ''),
75
+ url: docRow.url ?? undefined,
76
+ })),
77
+ _metadata: generateResponseMetadata(db),
78
+ };
79
+ }
80
+ //# sourceMappingURL=get-provision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-provision.js","sourceRoot":"","sources":["../../../src/tools/get-provision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * get_rwandan_implementations — Find Rwandan statutes that reference a specific EU directive/regulation.
3
+ */
4
+ import type Database from '@ansvar/mcp-sqlite';
5
+ import { type ToolResponse } from '../utils/metadata.js';
6
+ export interface GetRwandanImplementationsInput {
7
+ eu_document_id: string;
8
+ primary_only?: boolean;
9
+ in_force_only?: boolean;
10
+ }
11
+ export interface RwandanImplementationResult {
12
+ document_id: string;
13
+ document_title: string;
14
+ status: string;
15
+ reference_type: string;
16
+ implementation_status: string | null;
17
+ is_primary: boolean;
18
+ reference_count: number;
19
+ }
20
+ export declare function getRwandanImplementations(db: InstanceType<typeof Database>, input: GetRwandanImplementationsInput): Promise<ToolResponse<RwandanImplementationResult[]>>;
21
+ //# sourceMappingURL=get-rwandan-implementations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-rwandan-implementations.d.ts","sourceRoot":"","sources":["../../../src/tools/get-rwandan-implementations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAwCtD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * get_rwandan_implementations — Find Rwandan statutes that reference a specific EU directive/regulation.
3
+ */
4
+ import { generateResponseMetadata } from '../utils/metadata.js';
5
+ export async function getRwandanImplementations(db, input) {
6
+ try {
7
+ db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
8
+ }
9
+ catch {
10
+ return {
11
+ results: [],
12
+ _metadata: {
13
+ ...generateResponseMetadata(db),
14
+ ...{ note: 'EU references not available in this database tier' },
15
+ },
16
+ };
17
+ }
18
+ let sql = `
19
+ SELECT
20
+ ld.id as document_id,
21
+ ld.title as document_title,
22
+ ld.status,
23
+ er.reference_type,
24
+ MAX(er.implementation_status) as implementation_status,
25
+ MAX(er.is_primary_implementation) as is_primary,
26
+ COUNT(*) as reference_count
27
+ FROM eu_references er
28
+ JOIN legal_documents ld ON ld.id = er.document_id
29
+ WHERE er.eu_document_id = ?
30
+ `;
31
+ const params = [input.eu_document_id];
32
+ if (input.primary_only) {
33
+ sql += ' AND er.is_primary_implementation = 1';
34
+ }
35
+ if (input.in_force_only) {
36
+ sql += " AND ld.status = 'in_force'";
37
+ }
38
+ sql += ' GROUP BY ld.id, er.reference_type ORDER BY is_primary DESC, reference_count DESC';
39
+ const rows = db.prepare(sql).all(...params);
40
+ return { results: rows, _metadata: generateResponseMetadata(db) };
41
+ }
42
+ //# sourceMappingURL=get-rwandan-implementations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-rwandan-implementations.js","sourceRoot":"","sources":["../../../src/tools/get-rwandan-implementations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAkBnF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAiC,EACjC,KAAqC;IAErC,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,mDAAmD,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,GAAG;;;;;;;;;;;;GAYT,CAAC;IACF,MAAM,MAAM,GAAwB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE3D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,GAAG,IAAI,uCAAuC,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,GAAG,IAAI,6BAA6B,CAAC;IACvC,CAAC;IAED,GAAG,IAAI,mFAAmF,CAAC;IAE3F,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAkC,CAAC;IAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * list_sources — Return provenance metadata for all data sources.
3
+ */
4
+ import type Database from '@ansvar/mcp-sqlite';
5
+ import { type ToolResponse } from '../utils/metadata.js';
6
+ export interface SourceInfo {
7
+ name: string;
8
+ authority: string;
9
+ url: string;
10
+ license: string;
11
+ coverage: string;
12
+ languages: string[];
13
+ }
14
+ export interface ListSourcesResult {
15
+ sources: SourceInfo[];
16
+ database: {
17
+ tier: string;
18
+ schema_version: string;
19
+ built_at?: string;
20
+ document_count: number;
21
+ provision_count: number;
22
+ };
23
+ }
24
+ export declare function listSources(db: InstanceType<typeof Database>): Promise<ToolResponse<ListSourcesResult>>;
25
+ //# sourceMappingURL=list-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sources.d.ts","sourceRoot":"","sources":["../../../src/tools/list-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAWD,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CA2B1C"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * list_sources — Return provenance metadata for all data sources.
3
+ */
4
+ import { readDbMetadata } from '../capabilities.js';
5
+ import { generateResponseMetadata } from '../utils/metadata.js';
6
+ function safeCount(db, sql) {
7
+ try {
8
+ const row = db.prepare(sql).get();
9
+ return row ? Number(row.count) : 0;
10
+ }
11
+ catch {
12
+ return 0;
13
+ }
14
+ }
15
+ export async function listSources(db) {
16
+ const meta = readDbMetadata(db);
17
+ return {
18
+ results: {
19
+ sources: [
20
+ {
21
+ name: 'RwandaLII Legislation Portal',
22
+ authority: 'RwandaLII / Laws.Africa',
23
+ url: 'https://rwandalii.org/legislation/',
24
+ license: 'RwandaLII Terms of Use',
25
+ coverage: 'Full Rwanda law catalog (`nature=Law`) with article-level extraction from ' +
26
+ 'AKN HTML and PDF-backed law pages',
27
+ languages: ['en', 'rw', 'fr'],
28
+ },
29
+ ],
30
+ database: {
31
+ tier: meta.tier,
32
+ schema_version: meta.schema_version,
33
+ built_at: meta.built_at,
34
+ document_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_documents'),
35
+ provision_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_provisions'),
36
+ },
37
+ },
38
+ _metadata: generateResponseMetadata(db),
39
+ };
40
+ }
41
+ //# sourceMappingURL=list-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sources.js","sourceRoot":"","sources":["../../../src/tools/list-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAsBnF,SAAS,SAAS,CAAC,EAAiC,EAAE,GAAW;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAmC,CAAC;QACnE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAiC;IAEjC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAEhC,OAAO;QACL,OAAO,EAAE;YACP,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,8BAA8B;oBACpC,SAAS,EAAE,yBAAyB;oBACpC,GAAG,EAAE,oCAAoC;oBACzC,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EACN,4EAA4E;wBAC5E,mCAAmC;oBACrC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;iBAC9B;aACF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,SAAS,CAAC,EAAE,EAAE,+CAA+C,CAAC;gBAC9E,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,gDAAgD,CAAC;aACjF;SACF;QACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tool registry for Rwandan Law MCP Server.
3
+ * Shared between stdio (index.ts) and HTTP (api/mcp.ts) entry points.
4
+ */
5
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
7
+ import type Database from '@ansvar/mcp-sqlite';
8
+ import { type AboutContext } from './about.js';
9
+ export type { AboutContext } from './about.js';
10
+ export declare const TOOLS: Tool[];
11
+ export declare function buildTools(db?: InstanceType<typeof Database>, context?: AboutContext): Tool[];
12
+ export declare function registerTools(server: Server, db: InstanceType<typeof Database>, context?: AboutContext): void;
13
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAGL,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAc/C,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqB/C,eAAO,MAAM,KAAK,EAAE,IAAI,EA2PvB,CAAC;AAEF,wBAAgB,UAAU,CACxB,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EAClC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,EAAE,CAiBR;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,CA8EN"}